From 2ab284f559f216ca5e5e83425f584a438dc2fa9b Mon Sep 17 00:00:00 2001
From: GitHub Actions <actions@github.com>
Date: Tue, 5 Aug 2025 01:35:36 +0000
Subject: [PATCH] chore: update OpenAPI specification

---
 fern/apis/api/openapi.json | 56882 +++++++++++++++++++++--------------
 1 file changed, 34666 insertions(+), 22216 deletions(-)

diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json
index a270759b..275dc715 100644
--- a/fern/apis/api/openapi.json
+++ b/fern/apis/api/openapi.json
@@ -306,46 +306,61 @@
         ]
       }
     },
-    "/assistant": {
-      "post": {
-        "operationId": "AssistantController_create",
-        "summary": "Create Assistant",
-        "parameters": [],
-        "requestBody": {
-          "required": true,
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/CreateAssistantDTO"
-              }
+    "/chat": {
+      "get": {
+        "operationId": "ChatController_listChats",
+        "summary": "List Chats",
+        "parameters": [
+          {
+            "name": "assistantId",
+            "required": false,
+            "in": "query",
+            "description": "This is the unique identifier for the assistant that will be used for the chat.",
+            "schema": {
+              "type": "string"
             }
-          }
-        },
-        "responses": {
-          "201": {
-            "description": "",
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Assistant"
-                }
-              }
+          },
+          {
+            "name": "workflowId",
+            "required": false,
+            "in": "query",
+            "description": "This is the unique identifier for the workflow that will be used for the chat.",
+            "schema": {
+              "type": "string"
             }
-          }
-        },
-        "tags": [
-          "Assistants"
-        ],
-        "security": [
+          },
           {
-            "bearer": []
-          }
-        ]
-      },
-      "get": {
-        "operationId": "AssistantController_findAll",
-        "summary": "List Assistants",
-        "parameters": [
+            "name": "sessionId",
+            "required": false,
+            "in": "query",
+            "description": "This is the unique identifier for the session that will be used for the chat.",
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "name": "page",
+            "required": false,
+            "in": "query",
+            "description": "This is the page number to return. Defaults to 1.",
+            "schema": {
+              "minimum": 1,
+              "type": "number"
+            }
+          },
+          {
+            "name": "sortOrder",
+            "required": false,
+            "in": "query",
+            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
+            "schema": {
+              "enum": [
+                "ASC",
+                "DESC"
+              ],
+              "type": "string"
+            }
+          },
           {
             "name": "limit",
             "required": false,
@@ -444,63 +459,79 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "type": "array",
-                  "items": {
-                    "$ref": "#/components/schemas/Assistant"
-                  }
+                  "$ref": "#/components/schemas/ChatPaginatedResponse"
                 }
               }
             }
           }
         },
         "tags": [
-          "Assistants"
+          "Chats"
         ],
         "security": [
           {
             "bearer": []
           }
         ]
-      }
-    },
-    "/assistant/{id}": {
-      "get": {
-        "operationId": "AssistantController_findOne",
-        "summary": "Get Assistant",
-        "parameters": [
-          {
-            "name": "id",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
+      },
+      "post": {
+        "operationId": "ChatController_createChat",
+        "summary": "Create Chat",
+        "description": "Creates a new chat. Requires at least one of: assistantId/assistant, sessionId, or previousChatId. Note: sessionId and previousChatId are mutually exclusive.",
+        "parameters": [],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/CreateChatDTO"
+              }
             }
           }
-        ],
+        },
         "responses": {
           "200": {
+            "description": "Chat response - either non-streaming chat or streaming",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/Chat"
+                    },
+                    {
+                      "$ref": "#/components/schemas/CreateChatStreamResponse"
+                    }
+                  ]
+                }
+              }
+            }
+          },
+          "201": {
             "description": "",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/Assistant"
+                  "type": "object"
                 }
               }
             }
           }
         },
         "tags": [
-          "Assistants"
+          "Chats"
         ],
         "security": [
           {
             "bearer": []
           }
         ]
-      },
-      "patch": {
-        "operationId": "AssistantController_update",
-        "summary": "Update Assistant",
+      }
+    },
+    "/chat/{id}": {
+      "get": {
+        "operationId": "ChatController_getChat",
+        "summary": "Get Chat",
         "parameters": [
           {
             "name": "id",
@@ -511,30 +542,20 @@
             }
           }
         ],
-        "requestBody": {
-          "required": true,
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/UpdateAssistantDTO"
-              }
-            }
-          }
-        },
         "responses": {
           "200": {
             "description": "",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/Assistant"
+                  "$ref": "#/components/schemas/Chat"
                 }
               }
             }
           }
         },
         "tags": [
-          "Assistants"
+          "Chats"
         ],
         "security": [
           {
@@ -543,8 +564,8 @@
         ]
       },
       "delete": {
-        "operationId": "AssistantController_remove",
-        "summary": "Delete Assistant",
+        "operationId": "ChatController_deleteChat",
+        "summary": "Delete Chat",
         "parameters": [
           {
             "name": "id",
@@ -561,14 +582,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/Assistant"
+                  "$ref": "#/components/schemas/Chat"
                 }
               }
             }
           }
         },
         "tags": [
-          "Assistants"
+          "Chats"
         ],
         "security": [
           {
@@ -577,98 +598,98 @@
         ]
       }
     },
-    "/phone-number": {
+    "/chat/responses": {
       "post": {
-        "operationId": "PhoneNumberController_create",
-        "summary": "Create Phone Number",
+        "operationId": "ChatController_createOpenAIChat",
+        "summary": "Create Chat (OpenAI Compatible)",
         "parameters": [],
         "requestBody": {
           "required": true,
           "content": {
             "application/json": {
               "schema": {
-                "oneOf": [
-                  {
-                    "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
-                    "title": "ByoPhoneNumber"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
-                    "title": "TwilioPhoneNumber"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
-                    "title": "VonagePhoneNumber"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
-                    "title": "VapiPhoneNumber"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
-                    "title": "TelnyxPhoneNumber"
-                  }
-                ],
-                "discriminator": {
-                  "propertyName": "provider",
-                  "mapping": {
-                    "byo-phone-number": "#/components/schemas/CreateByoPhoneNumberDTO",
-                    "twilio": "#/components/schemas/CreateTwilioPhoneNumberDTO",
-                    "vonage": "#/components/schemas/CreateVonagePhoneNumberDTO",
-                    "vapi": "#/components/schemas/CreateVapiPhoneNumberDTO",
-                    "telnyx": "#/components/schemas/CreateTelnyxPhoneNumberDTO"
-                  }
-                }
+                "$ref": "#/components/schemas/OpenAIResponsesRequest"
               }
             }
           }
         },
         "responses": {
-          "201": {
-            "description": "",
+          "200": {
+            "description": "OpenAI Responses API format - either non-streaming or streaming",
             "content": {
               "application/json": {
                 "schema": {
-                  "title": "PhoneNumber",
                   "oneOf": [
                     {
-                      "$ref": "#/components/schemas/ByoPhoneNumber",
-                      "title": "ByoPhoneNumber"
+                      "$ref": "#/components/schemas/ResponseObject"
                     },
                     {
-                      "$ref": "#/components/schemas/TwilioPhoneNumber",
-                      "title": "TwilioPhoneNumber"
+                      "$ref": "#/components/schemas/ResponseTextDeltaEvent"
                     },
                     {
-                      "$ref": "#/components/schemas/VonagePhoneNumber",
-                      "title": "VonagePhoneNumber"
+                      "$ref": "#/components/schemas/ResponseTextDoneEvent"
                     },
                     {
-                      "$ref": "#/components/schemas/VapiPhoneNumber",
-                      "title": "VapiPhoneNumber"
+                      "$ref": "#/components/schemas/ResponseCompletedEvent"
                     },
                     {
-                      "$ref": "#/components/schemas/TelnyxPhoneNumber",
-                      "title": "TelnyxPhoneNumber"
-                    }
-                  ],
-                  "discriminator": {
-                    "propertyName": "provider",
-                    "mapping": {
-                      "byo-phone-number": "#/components/schemas/ByoPhoneNumber",
-                      "twilio": "#/components/schemas/TwilioPhoneNumber",
-                      "vonage": "#/components/schemas/VonagePhoneNumber",
-                      "vapi": "#/components/schemas/VapiPhoneNumber",
-                      "telnyx": "#/components/schemas/TelnyxPhoneNumber"
+                      "$ref": "#/components/schemas/ResponseErrorEvent"
                     }
-                  }
+                  ]
+                }
+              }
+            }
+          },
+          "201": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "object"
                 }
               }
             }
           }
         },
         "tags": [
-          "Phone Numbers"
+          "Chats"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      }
+    },
+    "/campaign": {
+      "post": {
+        "operationId": "CampaignController_create",
+        "summary": "Create Campaign",
+        "parameters": [],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/CreateCampaignDTO"
+              }
+            }
+          }
+        },
+        "responses": {
+          "201": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Campaign"
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Campaigns"
         ],
         "security": [
           {
@@ -677,9 +698,53 @@
         ]
       },
       "get": {
-        "operationId": "PhoneNumberController_findAll",
-        "summary": "List Phone Numbers",
+        "operationId": "CampaignController_findAll",
+        "summary": "List Campaigns",
         "parameters": [
+          {
+            "name": "id",
+            "required": false,
+            "in": "query",
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "name": "status",
+            "required": false,
+            "in": "query",
+            "schema": {
+              "enum": [
+                "scheduled",
+                "in-progress",
+                "ended"
+              ],
+              "type": "string"
+            }
+          },
+          {
+            "name": "page",
+            "required": false,
+            "in": "query",
+            "description": "This is the page number to return. Defaults to 1.",
+            "schema": {
+              "minimum": 1,
+              "type": "number"
+            }
+          },
+          {
+            "name": "sortOrder",
+            "required": false,
+            "in": "query",
+            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
+            "schema": {
+              "enum": [
+                "ASC",
+                "DESC"
+              ],
+              "type": "string"
+            }
+          },
           {
             "name": "limit",
             "required": false,
@@ -778,49 +843,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "type": "array",
-                  "items": {
-                    "title": "PhoneNumber",
-                    "oneOf": [
-                      {
-                        "$ref": "#/components/schemas/ByoPhoneNumber",
-                        "title": "ByoPhoneNumber"
-                      },
-                      {
-                        "$ref": "#/components/schemas/TwilioPhoneNumber",
-                        "title": "TwilioPhoneNumber"
-                      },
-                      {
-                        "$ref": "#/components/schemas/VonagePhoneNumber",
-                        "title": "VonagePhoneNumber"
-                      },
-                      {
-                        "$ref": "#/components/schemas/VapiPhoneNumber",
-                        "title": "VapiPhoneNumber"
-                      },
-                      {
-                        "$ref": "#/components/schemas/TelnyxPhoneNumber",
-                        "title": "TelnyxPhoneNumber"
-                      }
-                    ],
-                    "discriminator": {
-                      "propertyName": "provider",
-                      "mapping": {
-                        "byo-phone-number": "#/components/schemas/ByoPhoneNumber",
-                        "twilio": "#/components/schemas/TwilioPhoneNumber",
-                        "vonage": "#/components/schemas/VonagePhoneNumber",
-                        "vapi": "#/components/schemas/VapiPhoneNumber",
-                        "telnyx": "#/components/schemas/TelnyxPhoneNumber"
-                      }
-                    }
-                  }
+                  "$ref": "#/components/schemas/CampaignPaginatedResponse"
                 }
               }
             }
           }
         },
         "tags": [
-          "Phone Numbers"
+          "Campaigns"
         ],
         "security": [
           {
@@ -829,10 +859,10 @@
         ]
       }
     },
-    "/phone-number/{id}": {
+    "/campaign/{id}": {
       "get": {
-        "operationId": "PhoneNumberController_findOne",
-        "summary": "Get Phone Number",
+        "operationId": "CampaignController_findOne",
+        "summary": "Get Campaign",
         "parameters": [
           {
             "name": "id",
@@ -849,46 +879,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "title": "PhoneNumber",
-                  "oneOf": [
-                    {
-                      "$ref": "#/components/schemas/ByoPhoneNumber",
-                      "title": "ByoPhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TwilioPhoneNumber",
-                      "title": "TwilioPhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/VonagePhoneNumber",
-                      "title": "VonagePhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/VapiPhoneNumber",
-                      "title": "VapiPhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TelnyxPhoneNumber",
-                      "title": "TelnyxPhoneNumber"
-                    }
-                  ],
-                  "discriminator": {
-                    "propertyName": "provider",
-                    "mapping": {
-                      "byo-phone-number": "#/components/schemas/ByoPhoneNumber",
-                      "twilio": "#/components/schemas/TwilioPhoneNumber",
-                      "vonage": "#/components/schemas/VonagePhoneNumber",
-                      "vapi": "#/components/schemas/VapiPhoneNumber",
-                      "telnyx": "#/components/schemas/TelnyxPhoneNumber"
-                    }
-                  }
+                  "$ref": "#/components/schemas/Campaign"
                 }
               }
             }
           }
         },
         "tags": [
-          "Phone Numbers"
+          "Campaigns"
         ],
         "security": [
           {
@@ -897,8 +895,8 @@
         ]
       },
       "patch": {
-        "operationId": "PhoneNumberController_update",
-        "summary": "Update Phone Number",
+        "operationId": "CampaignController_update",
+        "summary": "Update Campaign",
         "parameters": [
           {
             "name": "id",
@@ -914,38 +912,7 @@
           "content": {
             "application/json": {
               "schema": {
-                "oneOf": [
-                  {
-                    "$ref": "#/components/schemas/UpdateByoPhoneNumberDTO",
-                    "title": "ByoPhoneNumber"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateTwilioPhoneNumberDTO",
-                    "title": "TwilioPhoneNumber"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateVonagePhoneNumberDTO",
-                    "title": "VonagePhoneNumber"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateVapiPhoneNumberDTO",
-                    "title": "VapiPhoneNumber"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateTelnyxPhoneNumberDTO",
-                    "title": "TelnyxPhoneNumber"
-                  }
-                ],
-                "discriminator": {
-                  "propertyName": "provider",
-                  "mapping": {
-                    "byo-phone-number": "#/components/schemas/UpdateByoPhoneNumberDTO",
-                    "twilio": "#/components/schemas/UpdateTwilioPhoneNumberDTO",
-                    "vonage": "#/components/schemas/UpdateVonagePhoneNumberDTO",
-                    "vapi": "#/components/schemas/UpdateVapiPhoneNumberDTO",
-                    "telnyx": "#/components/schemas/UpdateTelnyxPhoneNumberDTO"
-                  }
-                }
+                "$ref": "#/components/schemas/UpdateCampaignDTO"
               }
             }
           }
@@ -956,46 +923,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "title": "PhoneNumber",
-                  "oneOf": [
-                    {
-                      "$ref": "#/components/schemas/ByoPhoneNumber",
-                      "title": "ByoPhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TwilioPhoneNumber",
-                      "title": "TwilioPhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/VonagePhoneNumber",
-                      "title": "VonagePhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/VapiPhoneNumber",
-                      "title": "VapiPhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TelnyxPhoneNumber",
-                      "title": "TelnyxPhoneNumber"
-                    }
-                  ],
-                  "discriminator": {
-                    "propertyName": "provider",
-                    "mapping": {
-                      "byo-phone-number": "#/components/schemas/ByoPhoneNumber",
-                      "twilio": "#/components/schemas/TwilioPhoneNumber",
-                      "vonage": "#/components/schemas/VonagePhoneNumber",
-                      "vapi": "#/components/schemas/VapiPhoneNumber",
-                      "telnyx": "#/components/schemas/TelnyxPhoneNumber"
-                    }
-                  }
+                  "$ref": "#/components/schemas/Campaign"
                 }
               }
             }
           }
         },
         "tags": [
-          "Phone Numbers"
+          "Campaigns"
         ],
         "security": [
           {
@@ -1004,8 +939,8 @@
         ]
       },
       "delete": {
-        "operationId": "PhoneNumberController_remove",
-        "summary": "Delete Phone Number",
+        "operationId": "CampaignController_remove",
+        "summary": "Delete Campaign",
         "parameters": [
           {
             "name": "id",
@@ -1022,46 +957,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "title": "PhoneNumber",
-                  "oneOf": [
-                    {
-                      "$ref": "#/components/schemas/ByoPhoneNumber",
-                      "title": "ByoPhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TwilioPhoneNumber",
-                      "title": "TwilioPhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/VonagePhoneNumber",
-                      "title": "VonagePhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/VapiPhoneNumber",
-                      "title": "VapiPhoneNumber"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TelnyxPhoneNumber",
-                      "title": "TelnyxPhoneNumber"
-                    }
-                  ],
-                  "discriminator": {
-                    "propertyName": "provider",
-                    "mapping": {
-                      "byo-phone-number": "#/components/schemas/ByoPhoneNumber",
-                      "twilio": "#/components/schemas/TwilioPhoneNumber",
-                      "vonage": "#/components/schemas/VonagePhoneNumber",
-                      "vapi": "#/components/schemas/VapiPhoneNumber",
-                      "telnyx": "#/components/schemas/TelnyxPhoneNumber"
-                    }
-                  }
+                  "$ref": "#/components/schemas/Campaign"
                 }
               }
             }
           }
         },
         "tags": [
-          "Phone Numbers"
+          "Campaigns"
         ],
         "security": [
           {
@@ -1070,108 +973,17 @@
         ]
       }
     },
-    "/tool": {
+    "/session": {
       "post": {
-        "operationId": "ToolController_create",
-        "summary": "Create Tool",
+        "operationId": "SessionController_create",
+        "summary": "Create Session",
         "parameters": [],
         "requestBody": {
           "required": true,
           "content": {
             "application/json": {
               "schema": {
-                "oneOf": [
-                  {
-                    "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                    "title": "DtmfTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                    "title": "EndCallTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                    "title": "FunctionTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateGhlToolDTO",
-                    "title": "GhlTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateMakeToolDTO",
-                    "title": "MakeTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                    "title": "TransferCallTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateOutputToolDTO",
-                    "title": "OutputTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateBashToolDTO",
-                    "title": "BashTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateComputerToolDTO",
-                    "title": "ComputerTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateTextEditorToolDTO",
-                    "title": "TextEditorTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateQueryToolDTO",
-                    "title": "QueryTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                    "title": "GoogleCalendarCreateEventTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                    "title": "GoogleSheetsRowAppendTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                    "title": "GoogleCalendarCheckAvailabilityTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                    "title": "SlackSendMessageTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateSmsSendToolDTO",
-                    "title": "SmsSendTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateMcpToolDTO",
-                    "title": "McpTool"
-                  }
-                ],
-                "discriminator": {
-                  "propertyName": "type",
-                  "mapping": {
-                    "dtmf": "#/components/schemas/CreateDtmfToolDTO",
-                    "endCall": "#/components/schemas/CreateEndCallToolDTO",
-                    "function": "#/components/schemas/CreateFunctionToolDTO",
-                    "ghl": "#/components/schemas/CreateGhlToolDTO",
-                    "make": "#/components/schemas/CreateMakeToolDTO",
-                    "transferCall": "#/components/schemas/CreateTransferCallToolDTO",
-                    "output": "#/components/schemas/CreateOutputToolDTO",
-                    "bash": "#/components/schemas/CreateBashToolDTO",
-                    "computer": "#/components/schemas/CreateComputerToolDTO",
-                    "textEditor": "#/components/schemas/CreateTextEditorToolDTO",
-                    "query": "#/components/schemas/CreateQueryToolDTO",
-                    "google.calendar.event.create": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                    "google.sheets.row.append": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                    "google.calendar.availability.check": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                    "slack.message.send": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                    "sms": "#/components/schemas/CreateSmsSendToolDTO",
-                    "mcp": "#/components/schemas/CreateMcpToolDTO"
-                  }
-                }
+                "$ref": "#/components/schemas/CreateSessionDTO"
               }
             }
           }
@@ -1182,105 +994,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "oneOf": [
-                    {
-                      "$ref": "#/components/schemas/DtmfTool",
-                      "title": "DtmfTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/EndCallTool",
-                      "title": "EndCallTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/FunctionTool",
-                      "title": "FunctionTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GhlTool",
-                      "title": "GhlTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/MakeTool",
-                      "title": "MakeTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TransferCallTool",
-                      "title": "TransferCallTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/OutputTool",
-                      "title": "OutputTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/BashTool",
-                      "title": "BashTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/ComputerTool",
-                      "title": "ComputerTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TextEditorTool",
-                      "title": "TextEditorTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/QueryTool",
-                      "title": "QueryTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleCalendarCreateEventTool",
-                      "title": "GoogleCalendarCreateEventTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleSheetsRowAppendTool",
-                      "title": "GoogleSheetsRowAppendTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
-                      "title": "GoogleCalendarCheckAvailabilityTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/SlackSendMessageTool",
-                      "title": "SlackSendMessageTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/SmsSendTool",
-                      "title": "SmsSendTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/McpTool",
-                      "title": "McpTool"
-                    }
-                  ],
-                  "discriminator": {
-                    "propertyName": "type",
-                    "mapping": {
-                      "dtmf": "#/components/schemas/DtmfTool",
-                      "endCall": "#/components/schemas/EndCallTool",
-                      "function": "#/components/schemas/FunctionTool",
-                      "ghl": "#/components/schemas/GhlTool",
-                      "make": "#/components/schemas/MakeTool",
-                      "transferCall": "#/components/schemas/TransferCallTool",
-                      "output": "#/components/schemas/OutputTool",
-                      "bash": "#/components/schemas/BashTool",
-                      "computer": "#/components/schemas/ComputerTool",
-                      "textEditor": "#/components/schemas/TextEditorTool",
-                      "query": "#/components/schemas/QueryTool",
-                      "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool",
-                      "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool",
-                      "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
-                      "slack.message.send": "#/components/schemas/SlackSendMessageTool",
-                      "sms": "#/components/schemas/SmsSendTool",
-                      "mcp": "#/components/schemas/McpTool"
-                    }
-                  }
+                  "$ref": "#/components/schemas/Session"
                 }
               }
             }
           }
         },
         "tags": [
-          "Tools"
+          "Sessions"
         ],
         "security": [
           {
@@ -1289,9 +1010,59 @@
         ]
       },
       "get": {
-        "operationId": "ToolController_findAll",
-        "summary": "List Tools",
+        "operationId": "SessionController_findAllPaginated",
+        "summary": "List Sessions",
         "parameters": [
+          {
+            "name": "name",
+            "required": false,
+            "in": "query",
+            "description": "This is the name of the session to filter by.",
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "name": "assistantId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the assistant to filter sessions by.",
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "name": "workflowId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the workflow to filter sessions by.",
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "name": "page",
+            "required": false,
+            "in": "query",
+            "description": "This is the page number to return. Defaults to 1.",
+            "schema": {
+              "minimum": 1,
+              "type": "number"
+            }
+          },
+          {
+            "name": "sortOrder",
+            "required": false,
+            "in": "query",
+            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
+            "schema": {
+              "enum": [
+                "ASC",
+                "DESC"
+              ],
+              "type": "string"
+            }
+          },
           {
             "name": "limit",
             "required": false,
@@ -1390,108 +1161,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "type": "array",
-                  "items": {
-                    "oneOf": [
-                      {
-                        "$ref": "#/components/schemas/DtmfTool",
-                        "title": "DtmfTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/EndCallTool",
-                        "title": "EndCallTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/FunctionTool",
-                        "title": "FunctionTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/GhlTool",
-                        "title": "GhlTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/MakeTool",
-                        "title": "MakeTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/TransferCallTool",
-                        "title": "TransferCallTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/OutputTool",
-                        "title": "OutputTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/BashTool",
-                        "title": "BashTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/ComputerTool",
-                        "title": "ComputerTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/TextEditorTool",
-                        "title": "TextEditorTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/QueryTool",
-                        "title": "QueryTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/GoogleCalendarCreateEventTool",
-                        "title": "GoogleCalendarCreateEventTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/GoogleSheetsRowAppendTool",
-                        "title": "GoogleSheetsRowAppendTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
-                        "title": "GoogleCalendarCheckAvailabilityTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/SlackSendMessageTool",
-                        "title": "SlackSendMessageTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/SmsSendTool",
-                        "title": "SmsSendTool"
-                      },
-                      {
-                        "$ref": "#/components/schemas/McpTool",
-                        "title": "McpTool"
-                      }
-                    ],
-                    "discriminator": {
-                      "propertyName": "type",
-                      "mapping": {
-                        "dtmf": "#/components/schemas/DtmfTool",
-                        "endCall": "#/components/schemas/EndCallTool",
-                        "function": "#/components/schemas/FunctionTool",
-                        "ghl": "#/components/schemas/GhlTool",
-                        "make": "#/components/schemas/MakeTool",
-                        "transferCall": "#/components/schemas/TransferCallTool",
-                        "output": "#/components/schemas/OutputTool",
-                        "bash": "#/components/schemas/BashTool",
-                        "computer": "#/components/schemas/ComputerTool",
-                        "textEditor": "#/components/schemas/TextEditorTool",
-                        "query": "#/components/schemas/QueryTool",
-                        "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool",
-                        "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool",
-                        "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
-                        "slack.message.send": "#/components/schemas/SlackSendMessageTool",
-                        "sms": "#/components/schemas/SmsSendTool",
-                        "mcp": "#/components/schemas/McpTool"
-                      }
-                    }
-                  }
+                  "$ref": "#/components/schemas/SessionPaginatedResponse"
                 }
               }
             }
           }
         },
         "tags": [
-          "Tools"
+          "Sessions"
         ],
         "security": [
           {
@@ -1500,10 +1177,10 @@
         ]
       }
     },
-    "/tool/{id}": {
+    "/session/{id}": {
       "get": {
-        "operationId": "ToolController_findOne",
-        "summary": "Get Tool",
+        "operationId": "SessionController_findOne",
+        "summary": "Get Session",
         "parameters": [
           {
             "name": "id",
@@ -1520,105 +1197,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "oneOf": [
-                    {
-                      "$ref": "#/components/schemas/DtmfTool",
-                      "title": "DtmfTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/EndCallTool",
-                      "title": "EndCallTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/FunctionTool",
-                      "title": "FunctionTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GhlTool",
-                      "title": "GhlTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/MakeTool",
-                      "title": "MakeTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TransferCallTool",
-                      "title": "TransferCallTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/OutputTool",
-                      "title": "OutputTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/BashTool",
-                      "title": "BashTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/ComputerTool",
-                      "title": "ComputerTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TextEditorTool",
-                      "title": "TextEditorTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/QueryTool",
-                      "title": "QueryTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleCalendarCreateEventTool",
-                      "title": "GoogleCalendarCreateEventTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleSheetsRowAppendTool",
-                      "title": "GoogleSheetsRowAppendTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
-                      "title": "GoogleCalendarCheckAvailabilityTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/SlackSendMessageTool",
-                      "title": "SlackSendMessageTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/SmsSendTool",
-                      "title": "SmsSendTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/McpTool",
-                      "title": "McpTool"
-                    }
-                  ],
-                  "discriminator": {
-                    "propertyName": "type",
-                    "mapping": {
-                      "dtmf": "#/components/schemas/DtmfTool",
-                      "endCall": "#/components/schemas/EndCallTool",
-                      "function": "#/components/schemas/FunctionTool",
-                      "ghl": "#/components/schemas/GhlTool",
-                      "make": "#/components/schemas/MakeTool",
-                      "transferCall": "#/components/schemas/TransferCallTool",
-                      "output": "#/components/schemas/OutputTool",
-                      "bash": "#/components/schemas/BashTool",
-                      "computer": "#/components/schemas/ComputerTool",
-                      "textEditor": "#/components/schemas/TextEditorTool",
-                      "query": "#/components/schemas/QueryTool",
-                      "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool",
-                      "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool",
-                      "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
-                      "slack.message.send": "#/components/schemas/SlackSendMessageTool",
-                      "sms": "#/components/schemas/SmsSendTool",
-                      "mcp": "#/components/schemas/McpTool"
-                    }
-                  }
+                  "$ref": "#/components/schemas/Session"
                 }
               }
             }
           }
         },
         "tags": [
-          "Tools"
+          "Sessions"
         ],
         "security": [
           {
@@ -1627,8 +1213,8 @@
         ]
       },
       "patch": {
-        "operationId": "ToolController_update",
-        "summary": "Update Tool",
+        "operationId": "SessionController_update",
+        "summary": "Update Session",
         "parameters": [
           {
             "name": "id",
@@ -1644,98 +1230,7 @@
           "content": {
             "application/json": {
               "schema": {
-                "oneOf": [
-                  {
-                    "$ref": "#/components/schemas/UpdateDtmfToolDTO",
-                    "title": "DtmfTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateEndCallToolDTO",
-                    "title": "EndCallTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateFunctionToolDTO",
-                    "title": "FunctionTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateGhlToolDTO",
-                    "title": "GhlTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateMakeToolDTO",
-                    "title": "MakeTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateTransferCallToolDTO",
-                    "title": "TransferCallTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateOutputToolDTO",
-                    "title": "OutputTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateBashToolDTO",
-                    "title": "BashTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateComputerToolDTO",
-                    "title": "ComputerTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateTextEditorToolDTO",
-                    "title": "TextEditorTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateQueryToolDTO",
-                    "title": "QueryTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateGoogleCalendarCreateEventToolDTO",
-                    "title": "GoogleCalendarCreateEventTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateGoogleSheetsRowAppendToolDTO",
-                    "title": "GoogleSheetsRowAppendTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateGoogleCalendarCheckAvailabilityToolDTO",
-                    "title": "GoogleCalendarCheckAvailabilityTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateSlackSendMessageToolDTO",
-                    "title": "SlackSendMessageTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateSmsSendToolDTO",
-                    "title": "SmsSendTool"
-                  },
-                  {
-                    "$ref": "#/components/schemas/UpdateMcpToolDTO",
-                    "title": "McpTool"
-                  }
-                ],
-                "discriminator": {
-                  "propertyName": "type",
-                  "mapping": {
-                    "dtmf": "#/components/schemas/UpdateDtmfToolDTO",
-                    "endCall": "#/components/schemas/UpdateEndCallToolDTO",
-                    "function": "#/components/schemas/UpdateFunctionToolDTO",
-                    "ghl": "#/components/schemas/UpdateGhlToolDTO",
-                    "make": "#/components/schemas/UpdateMakeToolDTO",
-                    "transferCall": "#/components/schemas/UpdateTransferCallToolDTO",
-                    "output": "#/components/schemas/UpdateOutputToolDTO",
-                    "bash": "#/components/schemas/UpdateBashToolDTO",
-                    "computer": "#/components/schemas/UpdateComputerToolDTO",
-                    "textEditor": "#/components/schemas/UpdateTextEditorToolDTO",
-                    "query": "#/components/schemas/UpdateQueryToolDTO",
-                    "google.calendar.event.create": "#/components/schemas/UpdateGoogleCalendarCreateEventToolDTO",
-                    "google.sheets.row.append": "#/components/schemas/UpdateGoogleSheetsRowAppendToolDTO",
-                    "google.calendar.availability.check": "#/components/schemas/UpdateGoogleCalendarCheckAvailabilityToolDTO",
-                    "slack.message.send": "#/components/schemas/UpdateSlackSendMessageToolDTO",
-                    "sms": "#/components/schemas/UpdateSmsSendToolDTO",
-                    "mcp": "#/components/schemas/UpdateMcpToolDTO"
-                  }
-                }
+                "$ref": "#/components/schemas/UpdateSessionDTO"
               }
             }
           }
@@ -1746,105 +1241,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "oneOf": [
-                    {
-                      "$ref": "#/components/schemas/DtmfTool",
-                      "title": "DtmfTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/EndCallTool",
-                      "title": "EndCallTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/FunctionTool",
-                      "title": "FunctionTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GhlTool",
-                      "title": "GhlTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/MakeTool",
-                      "title": "MakeTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TransferCallTool",
-                      "title": "TransferCallTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/OutputTool",
-                      "title": "OutputTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/BashTool",
-                      "title": "BashTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/ComputerTool",
-                      "title": "ComputerTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TextEditorTool",
-                      "title": "TextEditorTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/QueryTool",
-                      "title": "QueryTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleCalendarCreateEventTool",
-                      "title": "GoogleCalendarCreateEventTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleSheetsRowAppendTool",
-                      "title": "GoogleSheetsRowAppendTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
-                      "title": "GoogleCalendarCheckAvailabilityTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/SlackSendMessageTool",
-                      "title": "SlackSendMessageTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/SmsSendTool",
-                      "title": "SmsSendTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/McpTool",
-                      "title": "McpTool"
-                    }
-                  ],
-                  "discriminator": {
-                    "propertyName": "type",
-                    "mapping": {
-                      "dtmf": "#/components/schemas/DtmfTool",
-                      "endCall": "#/components/schemas/EndCallTool",
-                      "function": "#/components/schemas/FunctionTool",
-                      "ghl": "#/components/schemas/GhlTool",
-                      "make": "#/components/schemas/MakeTool",
-                      "transferCall": "#/components/schemas/TransferCallTool",
-                      "output": "#/components/schemas/OutputTool",
-                      "bash": "#/components/schemas/BashTool",
-                      "computer": "#/components/schemas/ComputerTool",
-                      "textEditor": "#/components/schemas/TextEditorTool",
-                      "query": "#/components/schemas/QueryTool",
-                      "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool",
-                      "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool",
-                      "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
-                      "slack.message.send": "#/components/schemas/SlackSendMessageTool",
-                      "sms": "#/components/schemas/SmsSendTool",
-                      "mcp": "#/components/schemas/McpTool"
-                    }
-                  }
+                  "$ref": "#/components/schemas/Session"
                 }
               }
             }
           }
         },
         "tags": [
-          "Tools"
+          "Sessions"
         ],
         "security": [
           {
@@ -1853,8 +1257,8 @@
         ]
       },
       "delete": {
-        "operationId": "ToolController_remove",
-        "summary": "Delete Tool",
+        "operationId": "SessionController_remove",
+        "summary": "Delete Session",
         "parameters": [
           {
             "name": "id",
@@ -1871,105 +1275,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "oneOf": [
-                    {
-                      "$ref": "#/components/schemas/DtmfTool",
-                      "title": "DtmfTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/EndCallTool",
-                      "title": "EndCallTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/FunctionTool",
-                      "title": "FunctionTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GhlTool",
-                      "title": "GhlTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/MakeTool",
-                      "title": "MakeTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TransferCallTool",
-                      "title": "TransferCallTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/OutputTool",
-                      "title": "OutputTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/BashTool",
-                      "title": "BashTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/ComputerTool",
-                      "title": "ComputerTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TextEditorTool",
-                      "title": "TextEditorTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/QueryTool",
-                      "title": "QueryTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleCalendarCreateEventTool",
-                      "title": "GoogleCalendarCreateEventTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleSheetsRowAppendTool",
-                      "title": "GoogleSheetsRowAppendTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
-                      "title": "GoogleCalendarCheckAvailabilityTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/SlackSendMessageTool",
-                      "title": "SlackSendMessageTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/SmsSendTool",
-                      "title": "SmsSendTool"
-                    },
-                    {
-                      "$ref": "#/components/schemas/McpTool",
-                      "title": "McpTool"
-                    }
-                  ],
-                  "discriminator": {
-                    "propertyName": "type",
-                    "mapping": {
-                      "dtmf": "#/components/schemas/DtmfTool",
-                      "endCall": "#/components/schemas/EndCallTool",
-                      "function": "#/components/schemas/FunctionTool",
-                      "ghl": "#/components/schemas/GhlTool",
-                      "make": "#/components/schemas/MakeTool",
-                      "transferCall": "#/components/schemas/TransferCallTool",
-                      "output": "#/components/schemas/OutputTool",
-                      "bash": "#/components/schemas/BashTool",
-                      "computer": "#/components/schemas/ComputerTool",
-                      "textEditor": "#/components/schemas/TextEditorTool",
-                      "query": "#/components/schemas/QueryTool",
-                      "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool",
-                      "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool",
-                      "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
-                      "slack.message.send": "#/components/schemas/SlackSendMessageTool",
-                      "sms": "#/components/schemas/SmsSendTool",
-                      "mcp": "#/components/schemas/McpTool"
-                    }
-                  }
+                  "$ref": "#/components/schemas/Session"
                 }
               }
             }
           }
         },
         "tags": [
-          "Tools"
+          "Sessions"
         ],
         "security": [
           {
@@ -1978,38 +1291,35 @@
         ]
       }
     },
-    "/file": {
+    "/assistant": {
       "post": {
-        "operationId": "FileController_create",
-        "summary": "Upload File",
+        "operationId": "AssistantController_create",
+        "summary": "Create Assistant",
         "parameters": [],
         "requestBody": {
           "required": true,
           "content": {
-            "multipart/form-data": {
+            "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/CreateFileDTO"
+                "$ref": "#/components/schemas/CreateAssistantDTO"
               }
             }
           }
         },
         "responses": {
           "201": {
-            "description": "File uploaded successfully",
+            "description": "",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/File"
+                  "$ref": "#/components/schemas/Assistant"
                 }
               }
             }
-          },
-          "400": {
-            "description": "Invalid file"
           }
         },
         "tags": [
-          "Files"
+          "Assistants"
         ],
         "security": [
           {
@@ -2018,9 +1328,101 @@
         ]
       },
       "get": {
-        "operationId": "FileController_findAll",
-        "summary": "List Files",
-        "parameters": [],
+        "operationId": "AssistantController_findAll",
+        "summary": "List Assistants",
+        "parameters": [
+          {
+            "name": "limit",
+            "required": false,
+            "in": "query",
+            "description": "This is the maximum number of items to return. Defaults to 100.",
+            "schema": {
+              "minimum": 0,
+              "maximum": 1000,
+              "type": "number"
+            }
+          },
+          {
+            "name": "createdAtGt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is greater than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "createdAtLt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is less than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "createdAtGe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is greater than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "createdAtLe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is less than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtGt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is greater than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtLt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtGe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is greater than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtLe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          }
+        ],
         "responses": {
           "200": {
             "description": "",
@@ -2029,7 +1431,7 @@
                 "schema": {
                   "type": "array",
                   "items": {
-                    "$ref": "#/components/schemas/File"
+                    "$ref": "#/components/schemas/Assistant"
                   }
                 }
               }
@@ -2037,7 +1439,7 @@
           }
         },
         "tags": [
-          "Files"
+          "Assistants"
         ],
         "security": [
           {
@@ -2046,10 +1448,10 @@
         ]
       }
     },
-    "/file/{id}": {
+    "/assistant/{id}": {
       "get": {
-        "operationId": "FileController_findOne",
-        "summary": "Get File",
+        "operationId": "AssistantController_findOne",
+        "summary": "Get Assistant",
         "parameters": [
           {
             "name": "id",
@@ -2066,14 +1468,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/File"
+                  "$ref": "#/components/schemas/Assistant"
                 }
               }
             }
           }
         },
         "tags": [
-          "Files"
+          "Assistants"
         ],
         "security": [
           {
@@ -2082,8 +1484,8 @@
         ]
       },
       "patch": {
-        "operationId": "FileController_update",
-        "summary": "Update File",
+        "operationId": "AssistantController_update",
+        "summary": "Update Assistant",
         "parameters": [
           {
             "name": "id",
@@ -2099,7 +1501,7 @@
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/UpdateFileDTO"
+                "$ref": "#/components/schemas/UpdateAssistantDTO"
               }
             }
           }
@@ -2110,14 +1512,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/File"
+                  "$ref": "#/components/schemas/Assistant"
                 }
               }
             }
           }
         },
         "tags": [
-          "Files"
+          "Assistants"
         ],
         "security": [
           {
@@ -2126,8 +1528,8 @@
         ]
       },
       "delete": {
-        "operationId": "FileController_remove",
-        "summary": "Delete File",
+        "operationId": "AssistantController_remove",
+        "summary": "Delete Assistant",
         "parameters": [
           {
             "name": "id",
@@ -2144,14 +1546,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/File"
+                  "$ref": "#/components/schemas/Assistant"
                 }
               }
             }
           }
         },
         "tags": [
-          "Files"
+          "Assistants"
         ],
         "security": [
           {
@@ -2160,10 +1562,10 @@
         ]
       }
     },
-    "/knowledge-base": {
+    "/phone-number": {
       "post": {
-        "operationId": "KnowledgeBaseController_create",
-        "summary": "Create Knowledge Base",
+        "operationId": "PhoneNumberController_create",
+        "summary": "Create Phone Number",
         "parameters": [],
         "requestBody": {
           "required": true,
@@ -2172,19 +1574,34 @@
               "schema": {
                 "oneOf": [
                   {
-                    "$ref": "#/components/schemas/CreateTrieveKnowledgeBaseDTO",
-                    "title": "TrieveKnowledgeBaseDTO"
+                    "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                    "title": "ByoPhoneNumber"
                   },
                   {
-                    "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                    "title": "CustomKnowledgeBaseDTO"
+                    "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                    "title": "TwilioPhoneNumber"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                    "title": "VonagePhoneNumber"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                    "title": "VapiPhoneNumber"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                    "title": "TelnyxPhoneNumber"
                   }
                 ],
                 "discriminator": {
                   "propertyName": "provider",
                   "mapping": {
-                    "trieve": "#/components/schemas/CreateTrieveKnowledgeBaseDTO",
-                    "custom-knowledge-base": "#/components/schemas/CreateCustomKnowledgeBaseDTO"
+                    "byo-phone-number": "#/components/schemas/CreateByoPhoneNumberDTO",
+                    "twilio": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                    "vonage": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                    "vapi": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                    "telnyx": "#/components/schemas/CreateTelnyxPhoneNumberDTO"
                   }
                 }
               }
@@ -2197,21 +1614,37 @@
             "content": {
               "application/json": {
                 "schema": {
+                  "title": "PhoneNumber",
                   "oneOf": [
                     {
-                      "$ref": "#/components/schemas/TrieveKnowledgeBase",
-                      "title": "TrieveKnowledgeBase"
+                      "$ref": "#/components/schemas/ByoPhoneNumber",
+                      "title": "ByoPhoneNumber"
                     },
                     {
-                      "$ref": "#/components/schemas/CustomKnowledgeBase",
-                      "title": "CustomKnowledgeBase"
+                      "$ref": "#/components/schemas/TwilioPhoneNumber",
+                      "title": "TwilioPhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/VonagePhoneNumber",
+                      "title": "VonagePhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/VapiPhoneNumber",
+                      "title": "VapiPhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TelnyxPhoneNumber",
+                      "title": "TelnyxPhoneNumber"
                     }
                   ],
                   "discriminator": {
                     "propertyName": "provider",
                     "mapping": {
-                      "trieve": "#/components/schemas/TrieveKnowledgeBase",
-                      "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase"
+                      "byo-phone-number": "#/components/schemas/ByoPhoneNumber",
+                      "twilio": "#/components/schemas/TwilioPhoneNumber",
+                      "vonage": "#/components/schemas/VonagePhoneNumber",
+                      "vapi": "#/components/schemas/VapiPhoneNumber",
+                      "telnyx": "#/components/schemas/TelnyxPhoneNumber"
                     }
                   }
                 }
@@ -2220,7 +1653,7 @@
           }
         },
         "tags": [
-          "Knowledge Base"
+          "Phone Numbers"
         ],
         "security": [
           {
@@ -2229,8 +1662,8 @@
         ]
       },
       "get": {
-        "operationId": "KnowledgeBaseController_findAll",
-        "summary": "List Knowledge Bases",
+        "operationId": "PhoneNumberController_findAll",
+        "summary": "List Phone Numbers",
         "parameters": [
           {
             "name": "limit",
@@ -2332,21 +1765,37 @@
                 "schema": {
                   "type": "array",
                   "items": {
+                    "title": "PhoneNumber",
                     "oneOf": [
                       {
-                        "$ref": "#/components/schemas/TrieveKnowledgeBase",
-                        "title": "TrieveKnowledgeBase"
+                        "$ref": "#/components/schemas/ByoPhoneNumber",
+                        "title": "ByoPhoneNumber"
                       },
                       {
-                        "$ref": "#/components/schemas/CustomKnowledgeBase",
-                        "title": "CustomKnowledgeBase"
+                        "$ref": "#/components/schemas/TwilioPhoneNumber",
+                        "title": "TwilioPhoneNumber"
+                      },
+                      {
+                        "$ref": "#/components/schemas/VonagePhoneNumber",
+                        "title": "VonagePhoneNumber"
+                      },
+                      {
+                        "$ref": "#/components/schemas/VapiPhoneNumber",
+                        "title": "VapiPhoneNumber"
+                      },
+                      {
+                        "$ref": "#/components/schemas/TelnyxPhoneNumber",
+                        "title": "TelnyxPhoneNumber"
                       }
                     ],
                     "discriminator": {
                       "propertyName": "provider",
                       "mapping": {
-                        "trieve": "#/components/schemas/TrieveKnowledgeBase",
-                        "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase"
+                        "byo-phone-number": "#/components/schemas/ByoPhoneNumber",
+                        "twilio": "#/components/schemas/TwilioPhoneNumber",
+                        "vonage": "#/components/schemas/VonagePhoneNumber",
+                        "vapi": "#/components/schemas/VapiPhoneNumber",
+                        "telnyx": "#/components/schemas/TelnyxPhoneNumber"
                       }
                     }
                   }
@@ -2356,7 +1805,7 @@
           }
         },
         "tags": [
-          "Knowledge Base"
+          "Phone Numbers"
         ],
         "security": [
           {
@@ -2365,10 +1814,10 @@
         ]
       }
     },
-    "/knowledge-base/{id}": {
+    "/phone-number/{id}": {
       "get": {
-        "operationId": "KnowledgeBaseController_findOne",
-        "summary": "Get Knowledge Base",
+        "operationId": "PhoneNumberController_findOne",
+        "summary": "Get Phone Number",
         "parameters": [
           {
             "name": "id",
@@ -2385,21 +1834,37 @@
             "content": {
               "application/json": {
                 "schema": {
+                  "title": "PhoneNumber",
                   "oneOf": [
                     {
-                      "$ref": "#/components/schemas/TrieveKnowledgeBase",
-                      "title": "TrieveKnowledgeBase"
+                      "$ref": "#/components/schemas/ByoPhoneNumber",
+                      "title": "ByoPhoneNumber"
                     },
                     {
-                      "$ref": "#/components/schemas/CustomKnowledgeBase",
-                      "title": "CustomKnowledgeBase"
+                      "$ref": "#/components/schemas/TwilioPhoneNumber",
+                      "title": "TwilioPhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/VonagePhoneNumber",
+                      "title": "VonagePhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/VapiPhoneNumber",
+                      "title": "VapiPhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TelnyxPhoneNumber",
+                      "title": "TelnyxPhoneNumber"
                     }
                   ],
                   "discriminator": {
                     "propertyName": "provider",
                     "mapping": {
-                      "trieve": "#/components/schemas/TrieveKnowledgeBase",
-                      "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase"
+                      "byo-phone-number": "#/components/schemas/ByoPhoneNumber",
+                      "twilio": "#/components/schemas/TwilioPhoneNumber",
+                      "vonage": "#/components/schemas/VonagePhoneNumber",
+                      "vapi": "#/components/schemas/VapiPhoneNumber",
+                      "telnyx": "#/components/schemas/TelnyxPhoneNumber"
                     }
                   }
                 }
@@ -2408,7 +1873,7 @@
           }
         },
         "tags": [
-          "Knowledge Base"
+          "Phone Numbers"
         ],
         "security": [
           {
@@ -2417,8 +1882,8 @@
         ]
       },
       "patch": {
-        "operationId": "KnowledgeBaseController_update",
-        "summary": "Update Knowledge Base",
+        "operationId": "PhoneNumberController_update",
+        "summary": "Update Phone Number",
         "parameters": [
           {
             "name": "id",
@@ -2436,19 +1901,34 @@
               "schema": {
                 "oneOf": [
                   {
-                    "$ref": "#/components/schemas/UpdateTrieveKnowledgeBaseDTO",
-                    "title": "UpdateTrieveKnowledgeBaseDTO"
+                    "$ref": "#/components/schemas/UpdateByoPhoneNumberDTO",
+                    "title": "ByoPhoneNumber"
                   },
                   {
-                    "$ref": "#/components/schemas/UpdateCustomKnowledgeBaseDTO",
-                    "title": "UpdateCustomKnowledgeBaseDTO"
+                    "$ref": "#/components/schemas/UpdateTwilioPhoneNumberDTO",
+                    "title": "TwilioPhoneNumber"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateVonagePhoneNumberDTO",
+                    "title": "VonagePhoneNumber"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateVapiPhoneNumberDTO",
+                    "title": "VapiPhoneNumber"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateTelnyxPhoneNumberDTO",
+                    "title": "TelnyxPhoneNumber"
                   }
                 ],
                 "discriminator": {
                   "propertyName": "provider",
                   "mapping": {
-                    "trieve": "#/components/schemas/UpdateTrieveKnowledgeBaseDTO",
-                    "custom-knowledge-base": "#/components/schemas/UpdateCustomKnowledgeBaseDTO"
+                    "byo-phone-number": "#/components/schemas/UpdateByoPhoneNumberDTO",
+                    "twilio": "#/components/schemas/UpdateTwilioPhoneNumberDTO",
+                    "vonage": "#/components/schemas/UpdateVonagePhoneNumberDTO",
+                    "vapi": "#/components/schemas/UpdateVapiPhoneNumberDTO",
+                    "telnyx": "#/components/schemas/UpdateTelnyxPhoneNumberDTO"
                   }
                 }
               }
@@ -2461,21 +1941,37 @@
             "content": {
               "application/json": {
                 "schema": {
+                  "title": "PhoneNumber",
                   "oneOf": [
                     {
-                      "$ref": "#/components/schemas/TrieveKnowledgeBase",
-                      "title": "TrieveKnowledgeBase"
+                      "$ref": "#/components/schemas/ByoPhoneNumber",
+                      "title": "ByoPhoneNumber"
                     },
                     {
-                      "$ref": "#/components/schemas/CustomKnowledgeBase",
-                      "title": "CustomKnowledgeBase"
+                      "$ref": "#/components/schemas/TwilioPhoneNumber",
+                      "title": "TwilioPhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/VonagePhoneNumber",
+                      "title": "VonagePhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/VapiPhoneNumber",
+                      "title": "VapiPhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TelnyxPhoneNumber",
+                      "title": "TelnyxPhoneNumber"
                     }
                   ],
                   "discriminator": {
                     "propertyName": "provider",
                     "mapping": {
-                      "trieve": "#/components/schemas/TrieveKnowledgeBase",
-                      "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase"
+                      "byo-phone-number": "#/components/schemas/ByoPhoneNumber",
+                      "twilio": "#/components/schemas/TwilioPhoneNumber",
+                      "vonage": "#/components/schemas/VonagePhoneNumber",
+                      "vapi": "#/components/schemas/VapiPhoneNumber",
+                      "telnyx": "#/components/schemas/TelnyxPhoneNumber"
                     }
                   }
                 }
@@ -2484,7 +1980,7 @@
           }
         },
         "tags": [
-          "Knowledge Base"
+          "Phone Numbers"
         ],
         "security": [
           {
@@ -2493,8 +1989,8 @@
         ]
       },
       "delete": {
-        "operationId": "KnowledgeBaseController_remove",
-        "summary": "Delete Knowledge Base",
+        "operationId": "PhoneNumberController_remove",
+        "summary": "Delete Phone Number",
         "parameters": [
           {
             "name": "id",
@@ -2511,21 +2007,37 @@
             "content": {
               "application/json": {
                 "schema": {
+                  "title": "PhoneNumber",
                   "oneOf": [
                     {
-                      "$ref": "#/components/schemas/TrieveKnowledgeBase",
-                      "title": "TrieveKnowledgeBase"
+                      "$ref": "#/components/schemas/ByoPhoneNumber",
+                      "title": "ByoPhoneNumber"
                     },
                     {
-                      "$ref": "#/components/schemas/CustomKnowledgeBase",
-                      "title": "CustomKnowledgeBase"
+                      "$ref": "#/components/schemas/TwilioPhoneNumber",
+                      "title": "TwilioPhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/VonagePhoneNumber",
+                      "title": "VonagePhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/VapiPhoneNumber",
+                      "title": "VapiPhoneNumber"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TelnyxPhoneNumber",
+                      "title": "TelnyxPhoneNumber"
                     }
                   ],
                   "discriminator": {
                     "propertyName": "provider",
                     "mapping": {
-                      "trieve": "#/components/schemas/TrieveKnowledgeBase",
-                      "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase"
+                      "byo-phone-number": "#/components/schemas/ByoPhoneNumber",
+                      "twilio": "#/components/schemas/TwilioPhoneNumber",
+                      "vonage": "#/components/schemas/VonagePhoneNumber",
+                      "vapi": "#/components/schemas/VapiPhoneNumber",
+                      "telnyx": "#/components/schemas/TelnyxPhoneNumber"
                     }
                   }
                 }
@@ -2534,7 +2046,7 @@
           }
         },
         "tags": [
-          "Knowledge Base"
+          "Phone Numbers"
         ],
         "security": [
           {
@@ -2543,214 +2055,241 @@
         ]
       }
     },
-    "/workflow": {
-      "get": {
-        "operationId": "WorkflowController_findAll",
-        "summary": "Get Workflows",
-        "parameters": [],
-        "responses": {
-          "200": {
-            "description": "",
-            "content": {
-              "application/json": {
-                "schema": {
-                  "type": "array",
-                  "items": {
-                    "$ref": "#/components/schemas/Workflow"
-                  }
-                }
-              }
-            }
-          }
-        },
-        "tags": [
-          "Workflow"
-        ],
-        "security": [
-          {
-            "bearer": []
-          }
-        ]
-      },
+    "/tool": {
       "post": {
-        "operationId": "WorkflowController_create",
-        "summary": "Create Workflow",
+        "operationId": "ToolController_create",
+        "summary": "Create Tool",
         "parameters": [],
         "requestBody": {
           "required": true,
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/CreateWorkflowDTO"
-              }
-            }
-          }
-        },
-        "responses": {
-          "201": {
-            "description": "",
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Workflow"
-                }
-              }
-            }
-          }
-        },
-        "tags": [
-          "Workflow"
-        ],
-        "security": [
-          {
-            "bearer": []
-          }
-        ]
-      }
-    },
-    "/workflow/{id}": {
-      "get": {
-        "operationId": "WorkflowController_findOne",
-        "summary": "Get Workflow",
-        "parameters": [
-          {
-            "name": "id",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "",
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Workflow"
-                }
-              }
-            }
-          }
-        },
-        "tags": [
-          "Workflow"
-        ],
-        "security": [
-          {
-            "bearer": []
-          }
-        ]
-      },
-      "delete": {
-        "operationId": "WorkflowController_delete",
-        "summary": "Delete Workflow",
-        "parameters": [
-          {
-            "name": "id",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
-        "responses": {
-          "200": {
-            "description": "",
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Workflow"
-                }
-              }
-            }
-          }
-        },
-        "tags": [
-          "Workflow"
-        ],
-        "security": [
-          {
-            "bearer": []
-          }
-        ]
-      },
-      "patch": {
-        "operationId": "WorkflowController_update",
-        "summary": "Update Workflow",
-        "parameters": [
-          {
-            "name": "id",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
-        "requestBody": {
-          "required": true,
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/UpdateWorkflowDTO"
-              }
-            }
-          }
-        },
-        "responses": {
-          "200": {
-            "description": "",
-            "content": {
-              "application/json": {
-                "schema": {
-                  "$ref": "#/components/schemas/Workflow"
+                "oneOf": [
+                  {
+                    "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                    "title": "ApiRequestTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                    "title": "DtmfTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                    "title": "EndCallTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                    "title": "FunctionTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                    "title": "TransferCallTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateBashToolDTO",
+                    "title": "BashTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateComputerToolDTO",
+                    "title": "ComputerTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                    "title": "TextEditorTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateQueryToolDTO",
+                    "title": "QueryTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                    "title": "GoogleCalendarCreateEventTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                    "title": "GoogleSheetsRowAppendTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                    "title": "GoogleCalendarCheckAvailabilityTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                    "title": "SlackSendMessageTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateSmsToolDTO",
+                    "title": "SmsSendTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateMcpToolDTO",
+                    "title": "McpTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                    "title": "GoHighLevelCalendarAvailabilityTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                    "title": "GoHighLevelCalendarEventCreateTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                    "title": "GoHighLevelContactCreateTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                    "title": "GoHighLevelContactGetTool"
+                  }
+                ],
+                "discriminator": {
+                  "propertyName": "type",
+                  "mapping": {
+                    "apiRequest": "#/components/schemas/CreateApiRequestToolDTO",
+                    "dtmf": "#/components/schemas/CreateDtmfToolDTO",
+                    "endCall": "#/components/schemas/CreateEndCallToolDTO",
+                    "function": "#/components/schemas/CreateFunctionToolDTO",
+                    "transferCall": "#/components/schemas/CreateTransferCallToolDTO",
+                    "bash": "#/components/schemas/CreateBashToolDTO",
+                    "computer": "#/components/schemas/CreateComputerToolDTO",
+                    "textEditor": "#/components/schemas/CreateTextEditorToolDTO",
+                    "query": "#/components/schemas/CreateQueryToolDTO",
+                    "google.calendar.event.create": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                    "google.sheets.row.append": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                    "google.calendar.availability.check": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                    "slack.message.send": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                    "sms": "#/components/schemas/CreateSmsToolDTO",
+                    "mcp": "#/components/schemas/CreateMcpToolDTO",
+                    "gohighlevel.calendar.availability.check": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                    "gohighlevel.calendar.event.create": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                    "gohighlevel.contact.create": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                    "gohighlevel.contact.get": "#/components/schemas/CreateGoHighLevelContactGetToolDTO"
+                  }
                 }
               }
             }
           }
         },
-        "tags": [
-          "Workflow"
-        ],
-        "security": [
-          {
-            "bearer": []
-          }
-        ]
-      }
-    },
-    "/squad": {
-      "post": {
-        "operationId": "SquadController_create",
-        "summary": "Create Squad",
-        "parameters": [],
-        "requestBody": {
-          "required": true,
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/CreateSquadDTO"
-              }
-            }
-          }
-        },
         "responses": {
           "201": {
             "description": "",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/Squad"
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/ApiRequestTool",
+                      "title": "ApiRequestTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/DtmfTool",
+                      "title": "DtmfTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/EndCallTool",
+                      "title": "EndCallTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/FunctionTool",
+                      "title": "FunctionTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GhlTool",
+                      "title": "GhlTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TransferCallTool",
+                      "title": "TransferCallTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/BashTool",
+                      "title": "BashTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/ComputerTool",
+                      "title": "ComputerTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TextEditorTool",
+                      "title": "TextEditorTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/QueryTool",
+                      "title": "QueryTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleCalendarCreateEventTool",
+                      "title": "GoogleCalendarCreateEventTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleSheetsRowAppendTool",
+                      "title": "GoogleSheetsRowAppendTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
+                      "title": "GoogleCalendarCheckAvailabilityTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/SlackSendMessageTool",
+                      "title": "SlackSendMessageTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/SmsTool",
+                      "title": "SmsSendTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/McpTool",
+                      "title": "McpTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelCalendarAvailabilityTool",
+                      "title": "GoHighLevelCalendarAvailabilityTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelCalendarEventCreateTool",
+                      "title": "GoHighLevelCalendarEventCreateTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelContactCreateTool",
+                      "title": "GoHighLevelContactCreateTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelContactGetTool",
+                      "title": "GoHighLevelContactGetTool"
+                    }
+                  ],
+                  "discriminator": {
+                    "propertyName": "type",
+                    "mapping": {
+                      "apiRequest": "#/components/schemas/ApiRequestTool",
+                      "dtmf": "#/components/schemas/DtmfTool",
+                      "endCall": "#/components/schemas/EndCallTool",
+                      "function": "#/components/schemas/FunctionTool",
+                      "transferCall": "#/components/schemas/TransferCallTool",
+                      "bash": "#/components/schemas/BashTool",
+                      "computer": "#/components/schemas/ComputerTool",
+                      "textEditor": "#/components/schemas/TextEditorTool",
+                      "query": "#/components/schemas/QueryTool",
+                      "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool",
+                      "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool",
+                      "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
+                      "slack.message.send": "#/components/schemas/SlackSendMessageTool",
+                      "sms": "#/components/schemas/SmsTool",
+                      "mcp": "#/components/schemas/McpTool",
+                      "gohighlevel.calendar.availability.check": "#/components/schemas/GoHighLevelCalendarAvailabilityTool",
+                      "gohighlevel.calendar.event.create": "#/components/schemas/GoHighLevelCalendarEventCreateTool",
+                      "gohighlevel.contact.create": "#/components/schemas/GoHighLevelContactCreateTool",
+                      "gohighlevel.contact.get": "#/components/schemas/GoHighLevelContactGetTool"
+                    }
+                  }
                 }
               }
             }
           }
         },
         "tags": [
-          "Squads"
+          "Tools"
         ],
         "security": [
           {
@@ -2759,8 +2298,8 @@
         ]
       },
       "get": {
-        "operationId": "SquadController_findAll",
-        "summary": "List Squads",
+        "operationId": "ToolController_findAll",
+        "summary": "List Tools",
         "parameters": [
           {
             "name": "limit",
@@ -2862,7 +2401,112 @@
                 "schema": {
                   "type": "array",
                   "items": {
-                    "$ref": "#/components/schemas/Squad"
+                    "oneOf": [
+                      {
+                        "$ref": "#/components/schemas/ApiRequestTool",
+                        "title": "ApiRequestTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/DtmfTool",
+                        "title": "DtmfTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/EndCallTool",
+                        "title": "EndCallTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/FunctionTool",
+                        "title": "FunctionTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/GhlTool",
+                        "title": "GhlTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/TransferCallTool",
+                        "title": "TransferCallTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/BashTool",
+                        "title": "BashTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/ComputerTool",
+                        "title": "ComputerTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/TextEditorTool",
+                        "title": "TextEditorTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/QueryTool",
+                        "title": "QueryTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/GoogleCalendarCreateEventTool",
+                        "title": "GoogleCalendarCreateEventTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/GoogleSheetsRowAppendTool",
+                        "title": "GoogleSheetsRowAppendTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
+                        "title": "GoogleCalendarCheckAvailabilityTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/SlackSendMessageTool",
+                        "title": "SlackSendMessageTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/SmsTool",
+                        "title": "SmsSendTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/McpTool",
+                        "title": "McpTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/GoHighLevelCalendarAvailabilityTool",
+                        "title": "GoHighLevelCalendarAvailabilityTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/GoHighLevelCalendarEventCreateTool",
+                        "title": "GoHighLevelCalendarEventCreateTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/GoHighLevelContactCreateTool",
+                        "title": "GoHighLevelContactCreateTool"
+                      },
+                      {
+                        "$ref": "#/components/schemas/GoHighLevelContactGetTool",
+                        "title": "GoHighLevelContactGetTool"
+                      }
+                    ],
+                    "discriminator": {
+                      "propertyName": "type",
+                      "mapping": {
+                        "apiRequest": "#/components/schemas/ApiRequestTool",
+                        "dtmf": "#/components/schemas/DtmfTool",
+                        "endCall": "#/components/schemas/EndCallTool",
+                        "function": "#/components/schemas/FunctionTool",
+                        "transferCall": "#/components/schemas/TransferCallTool",
+                        "bash": "#/components/schemas/BashTool",
+                        "computer": "#/components/schemas/ComputerTool",
+                        "textEditor": "#/components/schemas/TextEditorTool",
+                        "query": "#/components/schemas/QueryTool",
+                        "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool",
+                        "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool",
+                        "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
+                        "slack.message.send": "#/components/schemas/SlackSendMessageTool",
+                        "sms": "#/components/schemas/SmsTool",
+                        "mcp": "#/components/schemas/McpTool",
+                        "gohighlevel.calendar.availability.check": "#/components/schemas/GoHighLevelCalendarAvailabilityTool",
+                        "gohighlevel.calendar.event.create": "#/components/schemas/GoHighLevelCalendarEventCreateTool",
+                        "gohighlevel.contact.create": "#/components/schemas/GoHighLevelContactCreateTool",
+                        "gohighlevel.contact.get": "#/components/schemas/GoHighLevelContactGetTool"
+                      }
+                    }
                   }
                 }
               }
@@ -2870,7 +2514,7 @@
           }
         },
         "tags": [
-          "Squads"
+          "Tools"
         ],
         "security": [
           {
@@ -2879,10 +2523,10 @@
         ]
       }
     },
-    "/squad/{id}": {
+    "/tool/{id}": {
       "get": {
-        "operationId": "SquadController_findOne",
-        "summary": "Get Squad",
+        "operationId": "ToolController_findOne",
+        "summary": "Get Tool",
         "parameters": [
           {
             "name": "id",
@@ -2899,14 +2543,119 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/Squad"
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/ApiRequestTool",
+                      "title": "ApiRequestTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/DtmfTool",
+                      "title": "DtmfTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/EndCallTool",
+                      "title": "EndCallTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/FunctionTool",
+                      "title": "FunctionTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GhlTool",
+                      "title": "GhlTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TransferCallTool",
+                      "title": "TransferCallTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/BashTool",
+                      "title": "BashTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/ComputerTool",
+                      "title": "ComputerTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TextEditorTool",
+                      "title": "TextEditorTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/QueryTool",
+                      "title": "QueryTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleCalendarCreateEventTool",
+                      "title": "GoogleCalendarCreateEventTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleSheetsRowAppendTool",
+                      "title": "GoogleSheetsRowAppendTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
+                      "title": "GoogleCalendarCheckAvailabilityTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/SlackSendMessageTool",
+                      "title": "SlackSendMessageTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/SmsTool",
+                      "title": "SmsSendTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/McpTool",
+                      "title": "McpTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelCalendarAvailabilityTool",
+                      "title": "GoHighLevelCalendarAvailabilityTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelCalendarEventCreateTool",
+                      "title": "GoHighLevelCalendarEventCreateTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelContactCreateTool",
+                      "title": "GoHighLevelContactCreateTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelContactGetTool",
+                      "title": "GoHighLevelContactGetTool"
+                    }
+                  ],
+                  "discriminator": {
+                    "propertyName": "type",
+                    "mapping": {
+                      "apiRequest": "#/components/schemas/ApiRequestTool",
+                      "dtmf": "#/components/schemas/DtmfTool",
+                      "endCall": "#/components/schemas/EndCallTool",
+                      "function": "#/components/schemas/FunctionTool",
+                      "transferCall": "#/components/schemas/TransferCallTool",
+                      "bash": "#/components/schemas/BashTool",
+                      "computer": "#/components/schemas/ComputerTool",
+                      "textEditor": "#/components/schemas/TextEditorTool",
+                      "query": "#/components/schemas/QueryTool",
+                      "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool",
+                      "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool",
+                      "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
+                      "slack.message.send": "#/components/schemas/SlackSendMessageTool",
+                      "sms": "#/components/schemas/SmsTool",
+                      "mcp": "#/components/schemas/McpTool",
+                      "gohighlevel.calendar.availability.check": "#/components/schemas/GoHighLevelCalendarAvailabilityTool",
+                      "gohighlevel.calendar.event.create": "#/components/schemas/GoHighLevelCalendarEventCreateTool",
+                      "gohighlevel.contact.create": "#/components/schemas/GoHighLevelContactCreateTool",
+                      "gohighlevel.contact.get": "#/components/schemas/GoHighLevelContactGetTool"
+                    }
+                  }
                 }
               }
             }
           }
         },
         "tags": [
-          "Squads"
+          "Tools"
         ],
         "security": [
           {
@@ -2915,8 +2664,8 @@
         ]
       },
       "patch": {
-        "operationId": "SquadController_update",
-        "summary": "Update Squad",
+        "operationId": "ToolController_update",
+        "summary": "Update Tool",
         "parameters": [
           {
             "name": "id",
@@ -2932,25 +2681,231 @@
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/UpdateSquadDTO"
-              }
-            }
-          }
-        },
-        "responses": {
-          "200": {
-            "description": "",
-            "content": {
-              "application/json": {
+                "oneOf": [
+                  {
+                    "$ref": "#/components/schemas/UpdateApiRequestToolDTO",
+                    "title": "ApiRequestTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateDtmfToolDTO",
+                    "title": "DtmfTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateEndCallToolDTO",
+                    "title": "EndCallTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateFunctionToolDTO",
+                    "title": "FunctionTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateTransferCallToolDTO",
+                    "title": "TransferCallTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateBashToolDTO",
+                    "title": "BashTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateComputerToolDTO",
+                    "title": "ComputerTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateTextEditorToolDTO",
+                    "title": "TextEditorTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateQueryToolDTO",
+                    "title": "QueryTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateGoogleCalendarCreateEventToolDTO",
+                    "title": "GoogleCalendarCreateEventTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateGoogleSheetsRowAppendToolDTO",
+                    "title": "GoogleSheetsRowAppendTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateGoogleCalendarCheckAvailabilityToolDTO",
+                    "title": "GoogleCalendarCheckAvailabilityTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateSlackSendMessageToolDTO",
+                    "title": "SlackSendMessageTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateSmsToolDTO",
+                    "title": "SmsSendTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateMcpToolDTO",
+                    "title": "McpTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateGoHighLevelCalendarAvailabilityToolDTO",
+                    "title": "GoHighLevelCalendarAvailabilityTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateGoHighLevelCalendarEventCreateToolDTO",
+                    "title": "GoHighLevelCalendarEventCreateTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateGoHighLevelContactCreateToolDTO",
+                    "title": "GoHighLevelContactCreateTool"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateGoHighLevelContactGetToolDTO",
+                    "title": "GoHighLevelContactGetTool"
+                  }
+                ],
+                "discriminator": {
+                  "propertyName": "type",
+                  "mapping": {
+                    "apiRequest": "#/components/schemas/UpdateApiRequestToolDTO",
+                    "dtmf": "#/components/schemas/UpdateDtmfToolDTO",
+                    "endCall": "#/components/schemas/UpdateEndCallToolDTO",
+                    "function": "#/components/schemas/UpdateFunctionToolDTO",
+                    "transferCall": "#/components/schemas/UpdateTransferCallToolDTO",
+                    "bash": "#/components/schemas/UpdateBashToolDTO",
+                    "computer": "#/components/schemas/UpdateComputerToolDTO",
+                    "textEditor": "#/components/schemas/UpdateTextEditorToolDTO",
+                    "query": "#/components/schemas/UpdateQueryToolDTO",
+                    "google.calendar.event.create": "#/components/schemas/UpdateGoogleCalendarCreateEventToolDTO",
+                    "google.sheets.row.append": "#/components/schemas/UpdateGoogleSheetsRowAppendToolDTO",
+                    "google.calendar.availability.check": "#/components/schemas/UpdateGoogleCalendarCheckAvailabilityToolDTO",
+                    "slack.message.send": "#/components/schemas/UpdateSlackSendMessageToolDTO",
+                    "sms": "#/components/schemas/UpdateSmsToolDTO",
+                    "mcp": "#/components/schemas/UpdateMcpToolDTO",
+                    "gohighlevel.calendar.availability.check": "#/components/schemas/UpdateGoHighLevelCalendarAvailabilityToolDTO",
+                    "gohighlevel.calendar.event.create": "#/components/schemas/UpdateGoHighLevelCalendarEventCreateToolDTO",
+                    "gohighlevel.contact.create": "#/components/schemas/UpdateGoHighLevelContactCreateToolDTO",
+                    "gohighlevel.contact.get": "#/components/schemas/UpdateGoHighLevelContactGetToolDTO"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/Squad"
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/ApiRequestTool",
+                      "title": "ApiRequestTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/DtmfTool",
+                      "title": "DtmfTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/EndCallTool",
+                      "title": "EndCallTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/FunctionTool",
+                      "title": "FunctionTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GhlTool",
+                      "title": "GhlTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TransferCallTool",
+                      "title": "TransferCallTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/BashTool",
+                      "title": "BashTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/ComputerTool",
+                      "title": "ComputerTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TextEditorTool",
+                      "title": "TextEditorTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/QueryTool",
+                      "title": "QueryTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleCalendarCreateEventTool",
+                      "title": "GoogleCalendarCreateEventTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleSheetsRowAppendTool",
+                      "title": "GoogleSheetsRowAppendTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
+                      "title": "GoogleCalendarCheckAvailabilityTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/SlackSendMessageTool",
+                      "title": "SlackSendMessageTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/SmsTool",
+                      "title": "SmsSendTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/McpTool",
+                      "title": "McpTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelCalendarAvailabilityTool",
+                      "title": "GoHighLevelCalendarAvailabilityTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelCalendarEventCreateTool",
+                      "title": "GoHighLevelCalendarEventCreateTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelContactCreateTool",
+                      "title": "GoHighLevelContactCreateTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelContactGetTool",
+                      "title": "GoHighLevelContactGetTool"
+                    }
+                  ],
+                  "discriminator": {
+                    "propertyName": "type",
+                    "mapping": {
+                      "apiRequest": "#/components/schemas/ApiRequestTool",
+                      "dtmf": "#/components/schemas/DtmfTool",
+                      "endCall": "#/components/schemas/EndCallTool",
+                      "function": "#/components/schemas/FunctionTool",
+                      "transferCall": "#/components/schemas/TransferCallTool",
+                      "bash": "#/components/schemas/BashTool",
+                      "computer": "#/components/schemas/ComputerTool",
+                      "textEditor": "#/components/schemas/TextEditorTool",
+                      "query": "#/components/schemas/QueryTool",
+                      "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool",
+                      "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool",
+                      "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
+                      "slack.message.send": "#/components/schemas/SlackSendMessageTool",
+                      "sms": "#/components/schemas/SmsTool",
+                      "mcp": "#/components/schemas/McpTool",
+                      "gohighlevel.calendar.availability.check": "#/components/schemas/GoHighLevelCalendarAvailabilityTool",
+                      "gohighlevel.calendar.event.create": "#/components/schemas/GoHighLevelCalendarEventCreateTool",
+                      "gohighlevel.contact.create": "#/components/schemas/GoHighLevelContactCreateTool",
+                      "gohighlevel.contact.get": "#/components/schemas/GoHighLevelContactGetTool"
+                    }
+                  }
                 }
               }
             }
           }
         },
         "tags": [
-          "Squads"
+          "Tools"
         ],
         "security": [
           {
@@ -2959,8 +2914,8 @@
         ]
       },
       "delete": {
-        "operationId": "SquadController_remove",
-        "summary": "Delete Squad",
+        "operationId": "ToolController_remove",
+        "summary": "Delete Tool",
         "parameters": [
           {
             "name": "id",
@@ -2977,14 +2932,119 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/Squad"
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/ApiRequestTool",
+                      "title": "ApiRequestTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/DtmfTool",
+                      "title": "DtmfTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/EndCallTool",
+                      "title": "EndCallTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/FunctionTool",
+                      "title": "FunctionTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GhlTool",
+                      "title": "GhlTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TransferCallTool",
+                      "title": "TransferCallTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/BashTool",
+                      "title": "BashTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/ComputerTool",
+                      "title": "ComputerTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TextEditorTool",
+                      "title": "TextEditorTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/QueryTool",
+                      "title": "QueryTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleCalendarCreateEventTool",
+                      "title": "GoogleCalendarCreateEventTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleSheetsRowAppendTool",
+                      "title": "GoogleSheetsRowAppendTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
+                      "title": "GoogleCalendarCheckAvailabilityTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/SlackSendMessageTool",
+                      "title": "SlackSendMessageTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/SmsTool",
+                      "title": "SmsSendTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/McpTool",
+                      "title": "McpTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelCalendarAvailabilityTool",
+                      "title": "GoHighLevelCalendarAvailabilityTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelCalendarEventCreateTool",
+                      "title": "GoHighLevelCalendarEventCreateTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelContactCreateTool",
+                      "title": "GoHighLevelContactCreateTool"
+                    },
+                    {
+                      "$ref": "#/components/schemas/GoHighLevelContactGetTool",
+                      "title": "GoHighLevelContactGetTool"
+                    }
+                  ],
+                  "discriminator": {
+                    "propertyName": "type",
+                    "mapping": {
+                      "apiRequest": "#/components/schemas/ApiRequestTool",
+                      "dtmf": "#/components/schemas/DtmfTool",
+                      "endCall": "#/components/schemas/EndCallTool",
+                      "function": "#/components/schemas/FunctionTool",
+                      "transferCall": "#/components/schemas/TransferCallTool",
+                      "bash": "#/components/schemas/BashTool",
+                      "computer": "#/components/schemas/ComputerTool",
+                      "textEditor": "#/components/schemas/TextEditorTool",
+                      "query": "#/components/schemas/QueryTool",
+                      "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool",
+                      "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool",
+                      "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool",
+                      "slack.message.send": "#/components/schemas/SlackSendMessageTool",
+                      "sms": "#/components/schemas/SmsTool",
+                      "mcp": "#/components/schemas/McpTool",
+                      "gohighlevel.calendar.availability.check": "#/components/schemas/GoHighLevelCalendarAvailabilityTool",
+                      "gohighlevel.calendar.event.create": "#/components/schemas/GoHighLevelCalendarEventCreateTool",
+                      "gohighlevel.contact.create": "#/components/schemas/GoHighLevelContactCreateTool",
+                      "gohighlevel.contact.get": "#/components/schemas/GoHighLevelContactGetTool"
+                    }
+                  }
                 }
               }
             }
           }
         },
         "tags": [
-          "Squads"
+          "Tools"
         ],
         "security": [
           {
@@ -2993,140 +3053,38 @@
         ]
       }
     },
-    "/test-suite": {
-      "get": {
-        "operationId": "TestSuiteController_findAllPaginated",
-        "summary": "List Test Suites",
-        "parameters": [
-          {
-            "name": "page",
-            "required": false,
-            "in": "query",
-            "description": "This is the page number to return. Defaults to 1.",
-            "schema": {
-              "minimum": 1,
-              "type": "number"
-            }
-          },
-          {
-            "name": "sortOrder",
-            "required": false,
-            "in": "query",
-            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
-            "schema": {
-              "enum": [
-                "ASC",
-                "DESC"
-              ],
-              "type": "string"
-            }
-          },
-          {
-            "name": "limit",
-            "required": false,
-            "in": "query",
-            "description": "This is the maximum number of items to return. Defaults to 100.",
-            "schema": {
-              "minimum": 0,
-              "maximum": 1000,
-              "type": "number"
-            }
-          },
-          {
-            "name": "createdAtGt",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the createdAt is greater than the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "createdAtLt",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the createdAt is less than the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "createdAtGe",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the createdAt is greater than or equal to the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "createdAtLe",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the createdAt is less than or equal to the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "updatedAtGt",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the updatedAt is greater than the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "updatedAtLt",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the updatedAt is less than the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "updatedAtGe",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the updatedAt is greater than or equal to the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "updatedAtLe",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the updatedAt is less than or equal to the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
+    "/file": {
+      "post": {
+        "operationId": "FileController_create",
+        "summary": "Upload File",
+        "parameters": [],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "multipart/form-data": {
+              "schema": {
+                "$ref": "#/components/schemas/CreateFileDTO"
+              }
             }
           }
-        ],
+        },
         "responses": {
-          "200": {
-            "description": "",
+          "201": {
+            "description": "File uploaded successfully",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuitesPaginatedResponse"
+                  "$ref": "#/components/schemas/File"
                 }
               }
             }
+          },
+          "400": {
+            "description": "Invalid file"
           }
         },
         "tags": [
-          "Test Suites"
+          "Files"
         ],
         "security": [
           {
@@ -3134,34 +3092,27 @@
           }
         ]
       },
-      "post": {
-        "operationId": "TestSuiteController_create",
-        "summary": "Create Test Suite",
+      "get": {
+        "operationId": "FileController_findAll",
+        "summary": "List Files",
         "parameters": [],
-        "requestBody": {
-          "required": true,
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/CreateTestSuiteDto"
-              }
-            }
-          }
-        },
         "responses": {
-          "201": {
+          "200": {
             "description": "",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuite"
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/File"
+                  }
                 }
               }
             }
           }
         },
         "tags": [
-          "Test Suites"
+          "Files"
         ],
         "security": [
           {
@@ -3170,10 +3121,10 @@
         ]
       }
     },
-    "/test-suite/{id}": {
+    "/file/{id}": {
       "get": {
-        "operationId": "TestSuiteController_findOne",
-        "summary": "Get Test Suite",
+        "operationId": "FileController_findOne",
+        "summary": "Get File",
         "parameters": [
           {
             "name": "id",
@@ -3190,14 +3141,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuite"
+                  "$ref": "#/components/schemas/File"
                 }
               }
             }
           }
         },
         "tags": [
-          "Test Suites"
+          "Files"
         ],
         "security": [
           {
@@ -3206,8 +3157,8 @@
         ]
       },
       "patch": {
-        "operationId": "TestSuiteController_update",
-        "summary": "Update Test Suite",
+        "operationId": "FileController_update",
+        "summary": "Update File",
         "parameters": [
           {
             "name": "id",
@@ -3223,7 +3174,7 @@
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/UpdateTestSuiteDto"
+                "$ref": "#/components/schemas/UpdateFileDTO"
               }
             }
           }
@@ -3234,14 +3185,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuite"
+                  "$ref": "#/components/schemas/File"
                 }
               }
             }
           }
         },
         "tags": [
-          "Test Suites"
+          "Files"
         ],
         "security": [
           {
@@ -3250,8 +3201,8 @@
         ]
       },
       "delete": {
-        "operationId": "TestSuiteController_remove",
-        "summary": "Delete Test Suite",
+        "operationId": "FileController_remove",
+        "summary": "Delete File",
         "parameters": [
           {
             "name": "id",
@@ -3268,14 +3219,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuite"
+                  "$ref": "#/components/schemas/File"
                 }
               }
             }
           }
         },
         "tags": [
-          "Test Suites"
+          "Files"
         ],
         "security": [
           {
@@ -3284,44 +3235,80 @@
         ]
       }
     },
-    "/test-suite/{testSuiteId}/test": {
-      "get": {
-        "operationId": "TestSuiteTestController_findAllPaginated",
-        "summary": "List Tests",
-        "parameters": [
-          {
-            "name": "testSuiteId",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          },
-          {
-            "name": "page",
-            "required": false,
-            "in": "query",
-            "description": "This is the page number to return. Defaults to 1.",
-            "schema": {
-              "minimum": 1,
-              "type": "number"
-            }
-          },
-          {
-            "name": "sortOrder",
-            "required": false,
-            "in": "query",
-            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
-            "schema": {
-              "enum": [
-                "ASC",
-                "DESC"
-              ],
-              "type": "string"
-            }
-          },
-          {
-            "name": "limit",
+    "/knowledge-base": {
+      "post": {
+        "operationId": "KnowledgeBaseController_create",
+        "summary": "Create Knowledge Base",
+        "parameters": [],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "oneOf": [
+                  {
+                    "$ref": "#/components/schemas/CreateTrieveKnowledgeBaseDTO",
+                    "title": "TrieveKnowledgeBaseDTO"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                    "title": "CustomKnowledgeBaseDTO"
+                  }
+                ],
+                "discriminator": {
+                  "propertyName": "provider",
+                  "mapping": {
+                    "trieve": "#/components/schemas/CreateTrieveKnowledgeBaseDTO",
+                    "custom-knowledge-base": "#/components/schemas/CreateCustomKnowledgeBaseDTO"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "responses": {
+          "201": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/TrieveKnowledgeBase",
+                      "title": "TrieveKnowledgeBase"
+                    },
+                    {
+                      "$ref": "#/components/schemas/CustomKnowledgeBase",
+                      "title": "CustomKnowledgeBase"
+                    }
+                  ],
+                  "discriminator": {
+                    "propertyName": "provider",
+                    "mapping": {
+                      "trieve": "#/components/schemas/TrieveKnowledgeBase",
+                      "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase"
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Knowledge Base"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      },
+      "get": {
+        "operationId": "KnowledgeBaseController_findAll",
+        "summary": "List Knowledge Bases",
+        "parameters": [
+          {
+            "name": "limit",
             "required": false,
             "in": "query",
             "description": "This is the maximum number of items to return. Defaults to 100.",
@@ -3418,81 +3405,24 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuiteTestsPaginatedResponse"
-                }
-              }
-            }
-          }
-        },
-        "tags": [
-          "Test Suite Tests"
-        ],
-        "security": [
-          {
-            "bearer": []
-          }
-        ]
-      },
-      "post": {
-        "operationId": "TestSuiteTestController_create",
-        "summary": "Create Test",
-        "parameters": [
-          {
-            "name": "testSuiteId",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
-        "requestBody": {
-          "required": true,
-          "content": {
-            "application/json": {
-              "schema": {
-                "oneOf": [
-                  {
-                    "$ref": "#/components/schemas/CreateTestSuiteTestVoiceDto",
-                    "title": "TestSuiteTestVoice"
-                  },
-                  {
-                    "$ref": "#/components/schemas/CreateTestSuiteTestChatDto",
-                    "title": "TestSuiteTestChat"
-                  }
-                ],
-                "discriminator": {
-                  "propertyName": "type",
-                  "mapping": {
-                    "voice": "#/components/schemas/CreateTestSuiteTestVoiceDto",
-                    "chat": "#/components/schemas/CreateTestSuiteTestChatDto"
-                  }
-                }
-              }
-            }
-          }
-        },
-        "responses": {
-          "201": {
-            "description": "",
-            "content": {
-              "application/json": {
-                "schema": {
-                  "oneOf": [
-                    {
-                      "$ref": "#/components/schemas/TestSuiteTestVoice",
-                      "title": "Voice"
-                    },
-                    {
-                      "$ref": "#/components/schemas/TestSuiteTestChat",
-                      "title": "Chat"
-                    }
-                  ],
-                  "discriminator": {
-                    "propertyName": "type",
-                    "mapping": {
-                      "voice": "#/components/schemas/TestSuiteTestVoice",
-                      "chat": "#/components/schemas/TestSuiteTestChat"
+                  "type": "array",
+                  "items": {
+                    "oneOf": [
+                      {
+                        "$ref": "#/components/schemas/TrieveKnowledgeBase",
+                        "title": "TrieveKnowledgeBase"
+                      },
+                      {
+                        "$ref": "#/components/schemas/CustomKnowledgeBase",
+                        "title": "CustomKnowledgeBase"
+                      }
+                    ],
+                    "discriminator": {
+                      "propertyName": "provider",
+                      "mapping": {
+                        "trieve": "#/components/schemas/TrieveKnowledgeBase",
+                        "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase"
+                      }
                     }
                   }
                 }
@@ -3501,7 +3431,7 @@
           }
         },
         "tags": [
-          "Test Suite Tests"
+          "Knowledge Base"
         ],
         "security": [
           {
@@ -3510,19 +3440,11 @@
         ]
       }
     },
-    "/test-suite/{testSuiteId}/test/{id}": {
+    "/knowledge-base/{id}": {
       "get": {
-        "operationId": "TestSuiteTestController_findOne",
-        "summary": "Get Test",
+        "operationId": "KnowledgeBaseController_findOne",
+        "summary": "Get Knowledge Base",
         "parameters": [
-          {
-            "name": "testSuiteId",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          },
           {
             "name": "id",
             "required": true,
@@ -3540,19 +3462,19 @@
                 "schema": {
                   "oneOf": [
                     {
-                      "$ref": "#/components/schemas/TestSuiteTestVoice",
-                      "title": "Voice"
+                      "$ref": "#/components/schemas/TrieveKnowledgeBase",
+                      "title": "TrieveKnowledgeBase"
                     },
                     {
-                      "$ref": "#/components/schemas/TestSuiteTestChat",
-                      "title": "Chat"
+                      "$ref": "#/components/schemas/CustomKnowledgeBase",
+                      "title": "CustomKnowledgeBase"
                     }
                   ],
                   "discriminator": {
-                    "propertyName": "type",
+                    "propertyName": "provider",
                     "mapping": {
-                      "voice": "#/components/schemas/TestSuiteTestVoice",
-                      "chat": "#/components/schemas/TestSuiteTestChat"
+                      "trieve": "#/components/schemas/TrieveKnowledgeBase",
+                      "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase"
                     }
                   }
                 }
@@ -3561,7 +3483,7 @@
           }
         },
         "tags": [
-          "Test Suite Tests"
+          "Knowledge Base"
         ],
         "security": [
           {
@@ -3570,17 +3492,9 @@
         ]
       },
       "patch": {
-        "operationId": "TestSuiteTestController_update",
-        "summary": "Update Test",
+        "operationId": "KnowledgeBaseController_update",
+        "summary": "Update Knowledge Base",
         "parameters": [
-          {
-            "name": "testSuiteId",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          },
           {
             "name": "id",
             "required": true,
@@ -3597,19 +3511,19 @@
               "schema": {
                 "oneOf": [
                   {
-                    "$ref": "#/components/schemas/UpdateTestSuiteTestVoiceDto",
-                    "title": "TestSuiteTestVoice"
+                    "$ref": "#/components/schemas/UpdateTrieveKnowledgeBaseDTO",
+                    "title": "UpdateTrieveKnowledgeBaseDTO"
                   },
                   {
-                    "$ref": "#/components/schemas/UpdateTestSuiteTestChatDto",
-                    "title": "TestSuiteTestChat"
+                    "$ref": "#/components/schemas/UpdateCustomKnowledgeBaseDTO",
+                    "title": "UpdateCustomKnowledgeBaseDTO"
                   }
                 ],
                 "discriminator": {
-                  "propertyName": "type",
+                  "propertyName": "provider",
                   "mapping": {
-                    "voice": "#/components/schemas/UpdateTestSuiteTestVoiceDto",
-                    "chat": "#/components/schemas/UpdateTestSuiteTestChatDto"
+                    "trieve": "#/components/schemas/UpdateTrieveKnowledgeBaseDTO",
+                    "custom-knowledge-base": "#/components/schemas/UpdateCustomKnowledgeBaseDTO"
                   }
                 }
               }
@@ -3624,19 +3538,19 @@
                 "schema": {
                   "oneOf": [
                     {
-                      "$ref": "#/components/schemas/TestSuiteTestVoice",
-                      "title": "Voice"
+                      "$ref": "#/components/schemas/TrieveKnowledgeBase",
+                      "title": "TrieveKnowledgeBase"
                     },
                     {
-                      "$ref": "#/components/schemas/TestSuiteTestChat",
-                      "title": "Chat"
+                      "$ref": "#/components/schemas/CustomKnowledgeBase",
+                      "title": "CustomKnowledgeBase"
                     }
                   ],
                   "discriminator": {
-                    "propertyName": "type",
+                    "propertyName": "provider",
                     "mapping": {
-                      "voice": "#/components/schemas/TestSuiteTestVoice",
-                      "chat": "#/components/schemas/TestSuiteTestChat"
+                      "trieve": "#/components/schemas/TrieveKnowledgeBase",
+                      "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase"
                     }
                   }
                 }
@@ -3645,7 +3559,7 @@
           }
         },
         "tags": [
-          "Test Suite Tests"
+          "Knowledge Base"
         ],
         "security": [
           {
@@ -3654,17 +3568,9 @@
         ]
       },
       "delete": {
-        "operationId": "TestSuiteTestController_remove",
-        "summary": "Delete Test",
+        "operationId": "KnowledgeBaseController_remove",
+        "summary": "Delete Knowledge Base",
         "parameters": [
-          {
-            "name": "testSuiteId",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          },
           {
             "name": "id",
             "required": true,
@@ -3682,19 +3588,19 @@
                 "schema": {
                   "oneOf": [
                     {
-                      "$ref": "#/components/schemas/TestSuiteTestVoice",
-                      "title": "Voice"
+                      "$ref": "#/components/schemas/TrieveKnowledgeBase",
+                      "title": "TrieveKnowledgeBase"
                     },
                     {
-                      "$ref": "#/components/schemas/TestSuiteTestChat",
-                      "title": "Chat"
+                      "$ref": "#/components/schemas/CustomKnowledgeBase",
+                      "title": "CustomKnowledgeBase"
                     }
                   ],
                   "discriminator": {
-                    "propertyName": "type",
+                    "propertyName": "provider",
                     "mapping": {
-                      "voice": "#/components/schemas/TestSuiteTestVoice",
-                      "chat": "#/components/schemas/TestSuiteTestChat"
+                      "trieve": "#/components/schemas/TrieveKnowledgeBase",
+                      "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase"
                     }
                   }
                 }
@@ -3703,7 +3609,7 @@
           }
         },
         "tags": [
-          "Test Suite Tests"
+          "Knowledge Base"
         ],
         "security": [
           {
@@ -3712,148 +3618,28 @@
         ]
       }
     },
-    "/test-suite/{testSuiteId}/run": {
+    "/workflow": {
       "get": {
-        "operationId": "TestSuiteRunController_findAllPaginated",
-        "summary": "List Test Suite Runs",
-        "parameters": [
-          {
-            "name": "testSuiteId",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          },
-          {
-            "name": "page",
-            "required": false,
-            "in": "query",
-            "description": "This is the page number to return. Defaults to 1.",
-            "schema": {
-              "minimum": 1,
-              "type": "number"
-            }
-          },
-          {
-            "name": "sortOrder",
-            "required": false,
-            "in": "query",
-            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
-            "schema": {
-              "enum": [
-                "ASC",
-                "DESC"
-              ],
-              "type": "string"
-            }
-          },
-          {
-            "name": "limit",
-            "required": false,
-            "in": "query",
-            "description": "This is the maximum number of items to return. Defaults to 100.",
-            "schema": {
-              "minimum": 0,
-              "maximum": 1000,
-              "type": "number"
-            }
-          },
-          {
-            "name": "createdAtGt",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the createdAt is greater than the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "createdAtLt",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the createdAt is less than the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "createdAtGe",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the createdAt is greater than or equal to the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "createdAtLe",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the createdAt is less than or equal to the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "updatedAtGt",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the updatedAt is greater than the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "updatedAtLt",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the updatedAt is less than the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "updatedAtGe",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the updatedAt is greater than or equal to the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          },
-          {
-            "name": "updatedAtLe",
-            "required": false,
-            "in": "query",
-            "description": "This will return items where the updatedAt is less than or equal to the specified value.",
-            "schema": {
-              "format": "date-time",
-              "type": "string"
-            }
-          }
-        ],
+        "operationId": "WorkflowController_findAll",
+        "summary": "Get Workflows",
+        "parameters": [],
         "responses": {
           "200": {
             "description": "",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuiteRunsPaginatedResponse"
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/Workflow"
+                  }
                 }
               }
             }
           }
         },
         "tags": [
-          "Test Suite Runs"
+          "Workflow"
         ],
         "security": [
           {
@@ -3862,24 +3648,15 @@
         ]
       },
       "post": {
-        "operationId": "TestSuiteRunController_create",
-        "summary": "Create Test Suite Run",
-        "parameters": [
-          {
-            "name": "testSuiteId",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          }
-        ],
+        "operationId": "WorkflowController_create",
+        "summary": "Create Workflow",
+        "parameters": [],
         "requestBody": {
           "required": true,
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/CreateTestSuiteRunDto"
+                "$ref": "#/components/schemas/CreateWorkflowDTO"
               }
             }
           }
@@ -3890,14 +3667,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuiteRun"
+                  "$ref": "#/components/schemas/Workflow"
                 }
               }
             }
           }
         },
         "tags": [
-          "Test Suite Runs"
+          "Workflow"
         ],
         "security": [
           {
@@ -3906,19 +3683,11 @@
         ]
       }
     },
-    "/test-suite/{testSuiteId}/run/{id}": {
+    "/workflow/{id}": {
       "get": {
-        "operationId": "TestSuiteRunController_findOne",
-        "summary": "Get Test Suite Run",
+        "operationId": "WorkflowController_findOne",
+        "summary": "Get Workflow",
         "parameters": [
-          {
-            "name": "testSuiteId",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          },
           {
             "name": "id",
             "required": true,
@@ -3934,14 +3703,14 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuiteRun"
+                  "$ref": "#/components/schemas/Workflow"
                 }
               }
             }
           }
         },
         "tags": [
-          "Test Suite Runs"
+          "Workflow"
         ],
         "security": [
           {
@@ -3949,18 +3718,10 @@
           }
         ]
       },
-      "patch": {
-        "operationId": "TestSuiteRunController_update",
-        "summary": "Update Test Suite Run",
+      "delete": {
+        "operationId": "WorkflowController_delete",
+        "summary": "Delete Workflow",
         "parameters": [
-          {
-            "name": "testSuiteId",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          },
           {
             "name": "id",
             "required": true,
@@ -3970,30 +3731,20 @@
             }
           }
         ],
-        "requestBody": {
-          "required": true,
-          "content": {
-            "application/json": {
-              "schema": {
-                "$ref": "#/components/schemas/UpdateTestSuiteRunDto"
-              }
-            }
-          }
-        },
         "responses": {
           "200": {
             "description": "",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuiteRun"
+                  "$ref": "#/components/schemas/Workflow"
                 }
               }
             }
           }
         },
         "tags": [
-          "Test Suite Runs"
+          "Workflow"
         ],
         "security": [
           {
@@ -4001,18 +3752,10 @@
           }
         ]
       },
-      "delete": {
-        "operationId": "TestSuiteRunController_remove",
-        "summary": "Delete Test Suite Run",
+      "patch": {
+        "operationId": "WorkflowController_update",
+        "summary": "Update Workflow",
         "parameters": [
-          {
-            "name": "testSuiteId",
-            "required": true,
-            "in": "path",
-            "schema": {
-              "type": "string"
-            }
-          },
           {
             "name": "id",
             "required": true,
@@ -4022,20 +3765,30 @@
             }
           }
         ],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/UpdateWorkflowDTO"
+              }
+            }
+          }
+        },
         "responses": {
           "200": {
             "description": "",
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/TestSuiteRun"
+                  "$ref": "#/components/schemas/Workflow"
                 }
               }
             }
           }
         },
         "tags": [
-          "Test Suite Runs"
+          "Workflow"
         ],
         "security": [
           {
@@ -4044,124 +3797,282 @@
         ]
       }
     },
-    "/analytics": {
+    "/squad": {
       "post": {
-        "operationId": "AnalyticsController_query",
-        "summary": "Create Analytics Queries",
+        "operationId": "SquadController_create",
+        "summary": "Create Squad",
         "parameters": [],
         "requestBody": {
           "required": true,
           "content": {
             "application/json": {
               "schema": {
-                "$ref": "#/components/schemas/AnalyticsQueryDTO"
+                "$ref": "#/components/schemas/CreateSquadDTO"
               }
             }
           }
         },
         "responses": {
-          "200": {
+          "201": {
             "description": "",
             "content": {
               "application/json": {
                 "schema": {
-                  "type": "array",
-                  "items": {
-                    "$ref": "#/components/schemas/AnalyticsQueryResult"
-                  }
+                  "$ref": "#/components/schemas/Squad"
                 }
               }
             }
-          },
-          "201": {
-            "description": ""
           }
         },
         "tags": [
-          "Analytics"
+          "Squads"
         ],
         "security": [
           {
             "bearer": []
           }
         ]
-      }
-    },
-    "/logs": {
+      },
       "get": {
-        "operationId": "LoggingController_logsQuery",
-        "summary": "Get Logs",
-        "deprecated": true,
+        "operationId": "SquadController_findAll",
+        "summary": "List Squads",
         "parameters": [
           {
-            "name": "type",
+            "name": "limit",
             "required": false,
             "in": "query",
-            "description": "This is the type of the log.",
+            "description": "This is the maximum number of items to return. Defaults to 100.",
             "schema": {
-              "enum": [
-                "API",
-                "Webhook",
-                "Call",
-                "Provider"
-              ],
+              "minimum": 0,
+              "maximum": 1000,
+              "type": "number"
+            }
+          },
+          {
+            "name": "createdAtGt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is greater than the specified value.",
+            "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
           {
-            "name": "webhookType",
+            "name": "createdAtLt",
             "required": false,
             "in": "query",
-            "description": "This is the type of the webhook, given the log is from a webhook.",
+            "description": "This will return items where the createdAt is less than the specified value.",
             "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
           {
-            "name": "assistantId",
+            "name": "createdAtGe",
             "required": false,
             "in": "query",
-            "description": "This is the ID of the assistant.",
+            "description": "This will return items where the createdAt is greater than or equal to the specified value.",
             "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
           {
-            "name": "phoneNumberId",
+            "name": "createdAtLe",
             "required": false,
             "in": "query",
-            "description": "This is the ID of the phone number.",
+            "description": "This will return items where the createdAt is less than or equal to the specified value.",
             "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
           {
-            "name": "customerId",
+            "name": "updatedAtGt",
             "required": false,
             "in": "query",
-            "description": "This is the ID of the customer.",
+            "description": "This will return items where the updatedAt is greater than the specified value.",
             "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
           {
-            "name": "squadId",
+            "name": "updatedAtLt",
             "required": false,
             "in": "query",
-            "description": "This is the ID of the squad.",
+            "description": "This will return items where the updatedAt is less than the specified value.",
             "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
           {
-            "name": "callId",
+            "name": "updatedAtGe",
             "required": false,
             "in": "query",
-            "description": "This is the ID of the call.",
+            "description": "This will return items where the updatedAt is greater than or equal to the specified value.",
             "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
+          {
+            "name": "updatedAtLe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/Squad"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Squads"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      }
+    },
+    "/squad/{id}": {
+      "get": {
+        "operationId": "SquadController_findOne",
+        "summary": "Get Squad",
+        "parameters": [
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Squad"
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Squads"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      },
+      "patch": {
+        "operationId": "SquadController_update",
+        "summary": "Update Squad",
+        "parameters": [
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/UpdateSquadDTO"
+              }
+            }
+          }
+        },
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Squad"
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Squads"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      },
+      "delete": {
+        "operationId": "SquadController_remove",
+        "summary": "Delete Squad",
+        "parameters": [
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/Squad"
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Squads"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      }
+    },
+    "/test-suite": {
+      "get": {
+        "operationId": "TestSuiteController_findAllPaginated",
+        "summary": "List Test Suites",
+        "parameters": [
           {
             "name": "page",
             "required": false,
@@ -4283,14 +4194,129 @@
             "content": {
               "application/json": {
                 "schema": {
-                  "$ref": "#/components/schemas/LogsPaginatedResponse"
+                  "$ref": "#/components/schemas/TestSuitesPaginatedResponse"
                 }
               }
             }
           }
         },
         "tags": [
-          "Logs"
+          "Test Suites"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      },
+      "post": {
+        "operationId": "TestSuiteController_create",
+        "summary": "Create Test Suite",
+        "parameters": [],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/CreateTestSuiteDto"
+              }
+            }
+          }
+        },
+        "responses": {
+          "201": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/TestSuite"
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Test Suites"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      }
+    },
+    "/test-suite/{id}": {
+      "get": {
+        "operationId": "TestSuiteController_findOne",
+        "summary": "Get Test Suite",
+        "parameters": [
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/TestSuite"
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Test Suites"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      },
+      "patch": {
+        "operationId": "TestSuiteController_update",
+        "summary": "Update Test Suite",
+        "parameters": [
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/UpdateTestSuiteDto"
+              }
+            }
+          }
+        },
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/TestSuite"
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Test Suites"
         ],
         "security": [
           {
@@ -4299,2126 +4325,2052 @@
         ]
       },
       "delete": {
-        "operationId": "LoggingController_logsDeleteQuery",
-        "summary": "Delete Logs",
-        "deprecated": true,
+        "operationId": "TestSuiteController_remove",
+        "summary": "Delete Test Suite",
         "parameters": [
           {
-            "name": "type",
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/TestSuite"
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Test Suites"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      }
+    },
+    "/test-suite/{testSuiteId}/test": {
+      "get": {
+        "operationId": "TestSuiteTestController_findAllPaginated",
+        "summary": "List Tests",
+        "parameters": [
+          {
+            "name": "testSuiteId",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          },
+          {
+            "name": "page",
             "required": false,
             "in": "query",
-            "description": "This is the type of the log.",
+            "description": "This is the page number to return. Defaults to 1.",
+            "schema": {
+              "minimum": 1,
+              "type": "number"
+            }
+          },
+          {
+            "name": "sortOrder",
+            "required": false,
+            "in": "query",
+            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
             "schema": {
               "enum": [
-                "API",
-                "Webhook",
-                "Call",
-                "Provider"
+                "ASC",
+                "DESC"
               ],
               "type": "string"
             }
           },
           {
-            "name": "assistantId",
+            "name": "limit",
             "required": false,
             "in": "query",
+            "description": "This is the maximum number of items to return. Defaults to 100.",
+            "schema": {
+              "minimum": 0,
+              "maximum": 1000,
+              "type": "number"
+            }
+          },
+          {
+            "name": "createdAtGt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is greater than the specified value.",
             "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
           {
-            "name": "phoneNumberId",
+            "name": "createdAtLt",
             "required": false,
             "in": "query",
-            "description": "This is the ID of the phone number.",
+            "description": "This will return items where the createdAt is less than the specified value.",
             "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
           {
-            "name": "customerId",
+            "name": "createdAtGe",
             "required": false,
             "in": "query",
-            "description": "This is the ID of the customer.",
+            "description": "This will return items where the createdAt is greater than or equal to the specified value.",
             "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
           {
-            "name": "squadId",
+            "name": "createdAtLe",
             "required": false,
             "in": "query",
-            "description": "This is the ID of the squad.",
+            "description": "This will return items where the createdAt is less than or equal to the specified value.",
             "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
           {
-            "name": "callId",
+            "name": "updatedAtGt",
             "required": false,
             "in": "query",
-            "description": "This is the ID of the call.",
+            "description": "This will return items where the updatedAt is greater than the specified value.",
             "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtLt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtGe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is greater than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtLe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
               "type": "string"
             }
           }
         ],
         "responses": {
           "200": {
-            "description": ""
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/TestSuiteTestsPaginatedResponse"
+                }
+              }
+            }
           }
         },
         "tags": [
-          "Logs"
+          "Test Suite Tests"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      },
+      "post": {
+        "operationId": "TestSuiteTestController_create",
+        "summary": "Create Test",
+        "parameters": [
+          {
+            "name": "testSuiteId",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "oneOf": [
+                  {
+                    "$ref": "#/components/schemas/CreateTestSuiteTestVoiceDto",
+                    "title": "TestSuiteTestVoice"
+                  },
+                  {
+                    "$ref": "#/components/schemas/CreateTestSuiteTestChatDto",
+                    "title": "TestSuiteTestChat"
+                  }
+                ],
+                "discriminator": {
+                  "propertyName": "type",
+                  "mapping": {
+                    "voice": "#/components/schemas/CreateTestSuiteTestVoiceDto",
+                    "chat": "#/components/schemas/CreateTestSuiteTestChatDto"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "responses": {
+          "201": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/TestSuiteTestVoice",
+                      "title": "Voice"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TestSuiteTestChat",
+                      "title": "Chat"
+                    }
+                  ],
+                  "discriminator": {
+                    "propertyName": "type",
+                    "mapping": {
+                      "voice": "#/components/schemas/TestSuiteTestVoice",
+                      "chat": "#/components/schemas/TestSuiteTestChat"
+                    }
+                  }
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Test Suite Tests"
         ],
         "security": [
           {
             "bearer": []
           }
         ]
-      }
-    }
-  },
-  "info": {
-    "title": "Vapi API",
-    "description": "Voice AI for developers.",
-    "version": "1.0",
-    "contact": {}
-  },
-  "tags": [],
-  "servers": [
-    {
-      "url": "https://api.vapi.ai"
-    }
-  ],
-  "components": {
-    "securitySchemes": {
-      "bearer": {
-        "scheme": "bearer",
-        "bearerFormat": "Bearer",
-        "type": "http",
-        "description": "Retrieve your API Key from [Dashboard](dashboard.vapi.ai)."
       }
     },
-    "schemas": {
-      "AnalysisCostBreakdown": {
-        "type": "object",
-        "properties": {
-          "summary": {
-            "type": "number",
-            "description": "This is the cost to summarize the call."
-          },
-          "summaryPromptTokens": {
-            "type": "number",
-            "description": "This is the number of prompt tokens used to summarize the call."
-          },
-          "summaryCompletionTokens": {
-            "type": "number",
-            "description": "This is the number of completion tokens used to summarize the call."
-          },
-          "structuredData": {
-            "type": "number",
-            "description": "This is the cost to extract structured data from the call."
-          },
-          "structuredDataPromptTokens": {
-            "type": "number",
-            "description": "This is the number of prompt tokens used to extract structured data from the call."
-          },
-          "structuredDataCompletionTokens": {
-            "type": "number",
-            "description": "This is the number of completion tokens used to extract structured data from the call."
-          },
-          "successEvaluation": {
-            "type": "number",
-            "description": "This is the cost to evaluate if the call was successful."
-          },
-          "successEvaluationPromptTokens": {
-            "type": "number",
-            "description": "This is the number of prompt tokens used to evaluate if the call was successful."
+    "/test-suite/{testSuiteId}/test/{id}": {
+      "get": {
+        "operationId": "TestSuiteTestController_findOne",
+        "summary": "Get Test",
+        "parameters": [
+          {
+            "name": "testSuiteId",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
           },
-          "successEvaluationCompletionTokens": {
-            "type": "number",
-            "description": "This is the number of completion tokens used to evaluate if the call was successful."
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
           }
-        }
-      },
-      "CostBreakdown": {
-        "type": "object",
-        "properties": {
-          "transport": {
-            "type": "number",
-            "description": "This is the cost of the transport provider, like Twilio or Vonage."
-          },
-          "stt": {
-            "type": "number",
-            "description": "This is the cost of the speech-to-text service."
-          },
-          "llm": {
-            "type": "number",
-            "description": "This is the cost of the language model."
-          },
-          "tts": {
-            "type": "number",
-            "description": "This is the cost of the text-to-speech service."
-          },
-          "vapi": {
-            "type": "number",
-            "description": "This is the cost of Vapi."
-          },
-          "total": {
-            "type": "number",
-            "description": "This is the total cost of the call."
-          },
-          "llmPromptTokens": {
-            "type": "number",
-            "description": "This is the LLM prompt tokens used for the call."
-          },
-          "llmCompletionTokens": {
-            "type": "number",
-            "description": "This is the LLM completion tokens used for the call."
-          },
-          "ttsCharacters": {
-            "type": "number",
-            "description": "This is the TTS characters used for the call."
-          },
-          "analysisCostBreakdown": {
-            "description": "This is the cost of the analysis.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AnalysisCostBreakdown"
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/TestSuiteTestVoice",
+                      "title": "Voice"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TestSuiteTestChat",
+                      "title": "Chat"
+                    }
+                  ],
+                  "discriminator": {
+                    "propertyName": "type",
+                    "mapping": {
+                      "voice": "#/components/schemas/TestSuiteTestVoice",
+                      "chat": "#/components/schemas/TestSuiteTestChat"
+                    }
+                  }
+                }
               }
-            ]
+            }
           }
-        }
-      },
-      "TranscriptPlan": {
-        "type": "object",
-        "properties": {
-          "enabled": {
-            "type": "boolean",
-            "description": "This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true.\n\n@default true",
-            "example": true
-          },
-          "assistantName": {
-            "type": "string",
-            "description": "This is the name of the assistant in the transcript. Defaults to 'AI'.\n\nUsage:\n- If you want to change the name of the assistant in the transcript, set this. Example, here is what the transcript would look like with `assistantName` set to 'Buyer':\n```\nUser: Hello, how are you?\nBuyer: I'm fine.\nUser: Do you want to buy a car?\nBuyer: No.\n```\n\n@default 'AI'"
-          },
-          "userName": {
-            "type": "string",
-            "description": "This is the name of the user in the transcript. Defaults to 'User'.\n\nUsage:\n- If you want to change the name of the user in the transcript, set this. Example, here is what the transcript would look like with `userName` set to 'Seller':\n```\nSeller: Hello, how are you?\nAI: I'm fine.\nSeller: Do you want to buy a car?\nAI: No.\n```\n\n@default 'User'"
+        },
+        "tags": [
+          "Test Suite Tests"
+        ],
+        "security": [
+          {
+            "bearer": []
           }
-        }
+        ]
       },
-      "ArtifactPlan": {
-        "type": "object",
-        "properties": {
-          "recordingEnabled": {
-            "type": "boolean",
-            "description": "This determines whether assistant's calls are recorded. Defaults to true.\n\nUsage:\n- If you don't want to record the calls, set this to false.\n- If you want to record the calls when `assistant.hipaaEnabled` (deprecated) or `assistant.compliancePlan.hipaaEnabled` explicity set this to true and make sure to provide S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nYou can find the recording at `call.artifact.recordingUrl` and `call.artifact.stereoRecordingUrl` after the call is ended.\n\n@default true",
-            "example": true
-          },
-          "recordingFormat": {
-            "type": "string",
-            "description": "This determines the format of the recording. Defaults to `wav;l16`.\n\n@default 'wav;l16'",
-            "enum": [
-              "wav;l16",
-              "mp3"
-            ]
-          },
-          "videoRecordingEnabled": {
-            "type": "boolean",
-            "description": "This determines whether the video is recorded during the call. Defaults to false. Only relevant for `webCall` type.\n\nYou can find the video recording at `call.artifact.videoRecordingUrl` after the call is ended.\n\n@default false",
-            "example": false
-          },
-          "pcapEnabled": {
-            "type": "boolean",
-            "description": "This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`.\n\nYou can find the packet capture at `call.artifact.pcapUrl` after the call is ended.\n\n@default true",
-            "example": true
-          },
-          "pcapS3PathPrefix": {
-            "type": "string",
-            "description": "This is the path where the SIP packet capture will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nIf credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it.\n\nUsage:\n- If you want to upload the packet capture to a specific path, set this to the path. Example: `/my-assistant-captures`.\n- If you want to upload the packet capture to the root of the bucket, set this to `/`.\n\n@default '/'",
-            "example": "/pcaps"
+      "patch": {
+        "operationId": "TestSuiteTestController_update",
+        "summary": "Update Test",
+        "parameters": [
+          {
+            "name": "testSuiteId",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
           },
-          "transcriptPlan": {
-            "description": "This is the plan for `call.artifact.transcript`. To disable, set `transcriptPlan.enabled` to false.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/TranscriptPlan"
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "oneOf": [
+                  {
+                    "$ref": "#/components/schemas/UpdateTestSuiteTestVoiceDto",
+                    "title": "TestSuiteTestVoice"
+                  },
+                  {
+                    "$ref": "#/components/schemas/UpdateTestSuiteTestChatDto",
+                    "title": "TestSuiteTestChat"
+                  }
+                ],
+                "discriminator": {
+                  "propertyName": "type",
+                  "mapping": {
+                    "voice": "#/components/schemas/UpdateTestSuiteTestVoiceDto",
+                    "chat": "#/components/schemas/UpdateTestSuiteTestChatDto"
+                  }
+                }
               }
-            ]
-          },
-          "recordingPath": {
-            "type": "string",
-            "description": "This is the path where the recording will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nIf credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it.\n\nUsage:\n- If you want to upload the recording to a specific path, set this to the path. Example: `/my-assistant-recordings`.\n- If you want to upload the recording to the root of the bucket, set this to `/`.\n\n@default '/'"
+            }
           }
-        }
-      },
-      "Analysis": {
-        "type": "object",
-        "properties": {
-          "summary": {
-            "type": "string",
-            "description": "This is the summary of the call. Customize by setting `assistant.analysisPlan.summaryPrompt`."
-          },
-          "structuredData": {
-            "type": "object",
-            "description": "This is the structured data extracted from the call. Customize by setting `assistant.analysisPlan.structuredDataPrompt` and/or `assistant.analysisPlan.structuredDataSchema`."
-          },
-          "structuredDataMulti": {
-            "description": "This is the structured data catalog of the call. Customize by setting `assistant.analysisPlan.structuredDataMultiPlan`.",
-            "type": "array",
-            "items": {
-              "type": "object"
+        },
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/TestSuiteTestVoice",
+                      "title": "Voice"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TestSuiteTestChat",
+                      "title": "Chat"
+                    }
+                  ],
+                  "discriminator": {
+                    "propertyName": "type",
+                    "mapping": {
+                      "voice": "#/components/schemas/TestSuiteTestVoice",
+                      "chat": "#/components/schemas/TestSuiteTestChat"
+                    }
+                  }
+                }
+              }
             }
-          },
-          "successEvaluation": {
-            "type": "string",
-            "description": "This is the evaluation of the call. Customize by setting `assistant.analysisPlan.successEvaluationPrompt` and/or `assistant.analysisPlan.successEvaluationRubric`."
           }
-        }
-      },
-      "Monitor": {
-        "type": "object",
-        "properties": {
-          "listenUrl": {
-            "type": "string",
-            "description": "This is the URL where the assistant's calls can be listened to in real-time. To enable, set `assistant.monitorPlan.listenEnabled` to `true`."
-          },
-          "controlUrl": {
-            "type": "string",
-            "description": "This is the URL where the assistant's calls can be controlled in real-time. To enable, set `assistant.monitorPlan.controlEnabled` to `true`."
+        },
+        "tags": [
+          "Test Suite Tests"
+        ],
+        "security": [
+          {
+            "bearer": []
           }
-        }
+        ]
       },
-      "OpenAIMessage": {
-        "type": "object",
-        "properties": {
-          "content": {
-            "type": "string",
-            "nullable": true,
-            "maxLength": 100000000
+      "delete": {
+        "operationId": "TestSuiteTestController_remove",
+        "summary": "Delete Test",
+        "parameters": [
+          {
+            "name": "testSuiteId",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
           },
-          "role": {
-            "type": "string",
-            "enum": [
-              "assistant",
-              "function",
-              "user",
-              "system",
-              "tool"
-            ]
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/TestSuiteTestVoice",
+                      "title": "Voice"
+                    },
+                    {
+                      "$ref": "#/components/schemas/TestSuiteTestChat",
+                      "title": "Chat"
+                    }
+                  ],
+                  "discriminator": {
+                    "propertyName": "type",
+                    "mapping": {
+                      "voice": "#/components/schemas/TestSuiteTestVoice",
+                      "chat": "#/components/schemas/TestSuiteTestChat"
+                    }
+                  }
+                }
+              }
+            }
           }
         },
-        "required": [
-          "content",
-          "role"
+        "tags": [
+          "Test Suite Tests"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
         ]
-      },
-      "Artifact": {
-        "type": "object",
-        "properties": {
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that were spoken during the call.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/UserMessage",
-                  "title": "UserMessage"
-                },
-                {
-                  "$ref": "#/components/schemas/SystemMessage",
-                  "title": "SystemMessage"
-                },
-                {
-                  "$ref": "#/components/schemas/BotMessage",
-                  "title": "BotMessage"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolCallMessage",
-                  "title": "ToolCallMessage"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolCallResultMessage",
-                  "title": "ToolCallResultMessage"
-                }
-              ]
+      }
+    },
+    "/test-suite/{testSuiteId}/run": {
+      "get": {
+        "operationId": "TestSuiteRunController_findAllPaginated",
+        "summary": "List Test Suite Runs",
+        "parameters": [
+          {
+            "name": "testSuiteId",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
             }
           },
-          "messagesOpenAIFormatted": {
-            "description": "These are the messages that were spoken during the call, formatted for OpenAI.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
+          {
+            "name": "page",
+            "required": false,
+            "in": "query",
+            "description": "This is the page number to return. Defaults to 1.",
+            "schema": {
+              "minimum": 1,
+              "type": "number"
             }
           },
-          "recordingUrl": {
-            "type": "string",
-            "description": "This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`."
-          },
-          "stereoRecordingUrl": {
-            "type": "string",
-            "description": "This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`."
-          },
-          "videoRecordingUrl": {
-            "type": "string",
-            "description": "This is video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`."
-          },
-          "videoRecordingStartDelaySeconds": {
-            "type": "number",
-            "description": "This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps."
+          {
+            "name": "sortOrder",
+            "required": false,
+            "in": "query",
+            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
+            "schema": {
+              "enum": [
+                "ASC",
+                "DESC"
+              ],
+              "type": "string"
+            }
           },
-          "transcript": {
-            "type": "string",
-            "description": "This is the transcript of the call. This is derived from `artifact.messages` but provided for convenience."
+          {
+            "name": "limit",
+            "required": false,
+            "in": "query",
+            "description": "This is the maximum number of items to return. Defaults to 100.",
+            "schema": {
+              "minimum": 0,
+              "maximum": 1000,
+              "type": "number"
+            }
           },
-          "pcapUrl": {
-            "type": "string",
-            "description": "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`."
-          }
-        }
-      },
-      "FallbackTranscriberPlan": {
-        "type": "object",
-        "properties": {
-          "transcribers": {
-            "type": "array",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/FallbackAssemblyAITranscriber",
-                  "title": "AssemblyAI"
-                },
-                {
-                  "$ref": "#/components/schemas/FallbackAzureSpeechTranscriber",
-                  "title": "Azure"
-                },
-                {
-                  "$ref": "#/components/schemas/FallbackCustomTranscriber",
-                  "title": "Custom"
-                },
-                {
-                  "$ref": "#/components/schemas/FallbackDeepgramTranscriber",
-                  "title": "Deepgram"
-                },
-                {
-                  "$ref": "#/components/schemas/FallbackElevenLabsTranscriber",
-                  "title": "ElevenLabs"
-                },
-                {
-                  "$ref": "#/components/schemas/FallbackGladiaTranscriber",
-                  "title": "Gladia"
-                },
-                {
-                  "$ref": "#/components/schemas/FallbackGoogleTranscriber",
-                  "title": "Google"
-                },
-                {
-                  "$ref": "#/components/schemas/FallbackTalkscriberTranscriber",
-                  "title": "Talkscriber"
-                },
-                {
-                  "$ref": "#/components/schemas/FallbackSpeechmaticsTranscriber",
-                  "title": "Speechmatics"
-                },
-                {
-                  "$ref": "#/components/schemas/FallbackOpenAITranscriber",
-                  "title": "OpenAI"
-                }
-              ]
+          {
+            "name": "createdAtGt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is greater than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
             }
-          }
-        },
-        "required": [
-          "transcribers"
-        ]
-      },
-      "AssemblyAITranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "assembly-ai"
-            ]
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be set for the transcription.",
-            "enum": [
-              "en"
-            ]
+          {
+            "name": "createdAtLt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is less than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
           },
-          "confidenceThreshold": {
-            "type": "number",
-            "description": "Transcripts below this confidence threshold will be discarded.\n\n@default 0.4",
-            "minimum": 0,
-            "maximum": 1,
-            "example": 0.4
+          {
+            "name": "createdAtGe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is greater than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
           },
-          "realtimeUrl": {
-            "type": "string",
-            "description": "The WebSocket URL that the transcriber connects to."
+          {
+            "name": "createdAtLe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is less than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
           },
-          "wordBoost": {
-            "description": "Add up to 2500 characters of custom vocabulary.",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "maxLength": 2500
+          {
+            "name": "updatedAtGt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is greater than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
             }
           },
-          "endUtteranceSilenceThreshold": {
-            "type": "number",
-            "description": "The duration of the end utterance silence threshold in milliseconds."
+          {
+            "name": "updatedAtLt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
           },
-          "disablePartialTranscripts": {
-            "type": "boolean",
-            "description": "Disable partial transcripts.\nSet to `true` to not receive partial transcripts. Defaults to `false`."
+          {
+            "name": "updatedAtGe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is greater than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+          {
+            "name": "updatedAtLe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/TestSuiteRunsPaginatedResponse"
+                }
               }
-            ]
+            }
           }
         },
-        "required": [
-          "provider"
+        "tags": [
+          "Test Suite Runs"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
         ]
       },
-      "AzureSpeechTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "azure"
-            ]
-          },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be set for the transcription. The list of languages Azure supports can be found here: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt",
-            "enum": [
-              "af-ZA",
-              "am-ET",
-              "ar-AE",
-              "ar-BH",
-              "ar-DZ",
-              "ar-EG",
-              "ar-IL",
-              "ar-IQ",
-              "ar-JO",
-              "ar-KW",
-              "ar-LB",
-              "ar-LY",
-              "ar-MA",
-              "ar-OM",
-              "ar-PS",
-              "ar-QA",
-              "ar-SA",
-              "ar-SY",
-              "ar-TN",
-              "ar-YE",
-              "az-AZ",
-              "bg-BG",
-              "bn-IN",
-              "bs-BA",
-              "ca-ES",
-              "cs-CZ",
-              "cy-GB",
-              "da-DK",
-              "de-AT",
-              "de-CH",
-              "de-DE",
-              "el-GR",
-              "en-AU",
-              "en-CA",
-              "en-GB",
-              "en-GH",
-              "en-HK",
-              "en-IE",
-              "en-IN",
-              "en-KE",
-              "en-NG",
-              "en-NZ",
-              "en-PH",
-              "en-SG",
-              "en-TZ",
-              "en-US",
-              "en-ZA",
-              "es-AR",
-              "es-BO",
-              "es-CL",
-              "es-CO",
-              "es-CR",
-              "es-CU",
-              "es-DO",
-              "es-EC",
-              "es-ES",
-              "es-GQ",
-              "es-GT",
-              "es-HN",
-              "es-MX",
-              "es-NI",
-              "es-PA",
-              "es-PE",
-              "es-PR",
-              "es-PY",
-              "es-SV",
-              "es-US",
-              "es-UY",
-              "es-VE",
-              "et-EE",
-              "eu-ES",
-              "fa-IR",
-              "fi-FI",
-              "fil-PH",
-              "fr-BE",
-              "fr-CA",
-              "fr-CH",
-              "fr-FR",
-              "ga-IE",
-              "gl-ES",
-              "gu-IN",
-              "he-IL",
-              "hi-IN",
-              "hr-HR",
-              "hu-HU",
-              "hy-AM",
-              "id-ID",
-              "is-IS",
-              "it-CH",
-              "it-IT",
-              "ja-JP",
-              "jv-ID",
-              "ka-GE",
-              "kk-KZ",
-              "km-KH",
-              "kn-IN",
-              "ko-KR",
-              "lo-LA",
-              "lt-LT",
-              "lv-LV",
-              "mk-MK",
-              "ml-IN",
-              "mn-MN",
-              "mr-IN",
-              "ms-MY",
-              "mt-MT",
-              "my-MM",
-              "nb-NO",
-              "ne-NP",
-              "nl-BE",
-              "nl-NL",
-              "pa-IN",
-              "pl-PL",
-              "ps-AF",
-              "pt-BR",
-              "pt-PT",
-              "ro-RO",
-              "ru-RU",
-              "si-LK",
-              "sk-SK",
-              "sl-SI",
-              "so-SO",
-              "sq-AL",
-              "sr-RS",
-              "sv-SE",
-              "sw-KE",
-              "sw-TZ",
-              "ta-IN",
-              "te-IN",
-              "th-TH",
-              "tr-TR",
-              "uk-UA",
-              "ur-IN",
-              "uz-UZ",
-              "vi-VN",
-              "wuu-CN",
-              "yue-CN",
-              "zh-CN",
-              "zh-CN-shandong",
-              "zh-CN-sichuan",
-              "zh-HK",
-              "zh-TW",
-              "zu-ZA"
-            ]
-          },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+      "post": {
+        "operationId": "TestSuiteRunController_create",
+        "summary": "Create Test Suite Run",
+        "parameters": [
+          {
+            "name": "testSuiteId",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/CreateTestSuiteRunDto"
               }
-            ]
+            }
           }
         },
-        "required": [
-          "provider"
+        "responses": {
+          "201": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/TestSuiteRun"
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Test Suite Runs"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
         ]
-      },
-      "BackoffPlan": {
-        "type": "object",
-        "properties": {
-          "maxRetries": {
-            "type": "number",
-            "description": "This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries).\n\n@default 0",
-            "minimum": 0,
-            "maximum": 10,
-            "example": 0
-          },
-          "type": {
-            "type": "object",
-            "description": "This is the type of backoff plan to use. Defaults to fixed.\n\n@default fixed",
-            "enum": [
-              "fixed",
-              "exponential"
-            ],
-            "example": "fixed"
+      }
+    },
+    "/test-suite/{testSuiteId}/run/{id}": {
+      "get": {
+        "operationId": "TestSuiteRunController_findOne",
+        "summary": "Get Test Suite Run",
+        "parameters": [
+          {
+            "name": "testSuiteId",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
           },
-          "baseDelaySeconds": {
-            "type": "number",
-            "description": "This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.",
-            "minimum": 0,
-            "maximum": 10,
-            "example": 1
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/TestSuiteRun"
+                }
+              }
+            }
           }
         },
-        "required": [
-          "maxRetries",
-          "type",
-          "baseDelaySeconds"
+        "tags": [
+          "Test Suite Runs"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
         ]
       },
-      "Server": {
-        "type": "object",
-        "properties": {
-          "timeoutSeconds": {
-            "type": "number",
-            "description": "This is the timeout in seconds for the request to your server. Defaults to 20 seconds.\n\n@default 20",
-            "minimum": 1,
-            "maximum": 120,
-            "example": 20
-          },
-          "url": {
-            "type": "string",
-            "description": "API endpoint to send requests to."
-          },
-          "secret": {
-            "type": "string",
-            "description": "This is the secret you can set that Vapi will send with every request to your server. Will be sent as a header called x-vapi-secret.\n\nSame precedence logic as server."
-          },
-          "headers": {
-            "type": "object",
-            "description": "These are the custom headers to include in the request sent to your server.\n\nEach key-value pair represents a header name and its value."
+      "patch": {
+        "operationId": "TestSuiteRunController_update",
+        "summary": "Update Test Suite Run",
+        "parameters": [
+          {
+            "name": "testSuiteId",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
           },
-          "backoffPlan": {
-            "description": "This is the backoff plan to use if the request fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/BackoffPlan"
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/UpdateTestSuiteRunDto"
               }
-            ]
+            }
           }
         },
-        "required": [
-          "url"
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/TestSuiteRun"
+                }
+              }
+            }
+          }
+        },
+        "tags": [
+          "Test Suite Runs"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
         ]
       },
-      "CustomTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.",
-            "enum": [
-              "custom-transcriber"
-            ]
+      "delete": {
+        "operationId": "TestSuiteRunController_remove",
+        "summary": "Delete Test Suite Run",
+        "parameters": [
+          {
+            "name": "testSuiteId",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
           },
-          "server": {
-            "description": "This is where the transcription request will be sent.\n\nUsage:\n1. Vapi will initiate a websocket connection with `server.url`.\n\n2. Vapi will send an initial text frame with the sample rate. Format:\n```\n    {\n      \"type\": \"start\",\n      \"encoding\": \"linear16\", // 16-bit raw PCM format\n      \"container\": \"raw\",\n      \"sampleRate\": {{sampleRate}},\n      \"channels\": 2 // customer is channel 0, assistant is channel 1\n    }\n```\n\n3. Vapi will send the audio data in 16-bit raw PCM format as binary frames.\n\n4. You can read the messages something like this:\n```\nws.on('message', (data, isBinary) => {\n  if (isBinary) {\n    pcmBuffer = Buffer.concat([pcmBuffer, data]);\n    console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);\n  } else {\n    console.log('Received message:', JSON.parse(data.toString()));\n  }\n});\n```\n\n5. You will respond with transcriptions as you have them. Format:\n```\n {\n    \"type\": \"transcriber-response\",\n    \"transcription\": \"Hello, world!\",\n    \"channel\": \"customer\" | \"assistant\"\n }\n```",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/TestSuiteRun"
+                }
               }
-            ]
-          },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+            }
+          }
+        },
+        "tags": [
+          "Test Suite Runs"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      }
+    },
+    "/analytics": {
+      "post": {
+        "operationId": "AnalyticsController_query",
+        "summary": "Create Analytics Queries",
+        "parameters": [],
+        "requestBody": {
+          "required": true,
+          "content": {
+            "application/json": {
+              "schema": {
+                "$ref": "#/components/schemas/AnalyticsQueryDTO"
               }
-            ]
+            }
           }
         },
-        "required": [
-          "provider",
-          "server"
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "type": "array",
+                  "items": {
+                    "$ref": "#/components/schemas/AnalyticsQueryResult"
+                  }
+                }
+              }
+            }
+          },
+          "201": {
+            "description": ""
+          }
+        },
+        "tags": [
+          "Analytics"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
         ]
-      },
-      "DeepgramTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "deepgram"
-            ]
+      }
+    },
+    "/logs": {
+      "get": {
+        "operationId": "LoggingController_logsQuery",
+        "summary": "Get Logs",
+        "deprecated": true,
+        "parameters": [
+          {
+            "name": "type",
+            "required": false,
+            "in": "query",
+            "description": "This is the type of the log.",
+            "schema": {
+              "enum": [
+                "API",
+                "Webhook",
+                "Call",
+                "Provider"
+              ],
+              "type": "string"
+            }
           },
-          "model": {
-            "description": "This is the Deepgram model that will be used. A list of models can be found here: https://developers.deepgram.com/docs/models-languages-overview",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "nova-3",
-                  "nova-3-general",
-                  "nova-3-medical",
-                  "nova-2",
-                  "nova-2-general",
-                  "nova-2-meeting",
-                  "nova-2-phonecall",
-                  "nova-2-finance",
-                  "nova-2-conversationalai",
-                  "nova-2-voicemail",
-                  "nova-2-video",
-                  "nova-2-medical",
-                  "nova-2-drivethru",
-                  "nova-2-automotive",
-                  "nova",
-                  "nova-general",
-                  "nova-phonecall",
-                  "nova-medical",
-                  "enhanced",
-                  "enhanced-general",
-                  "enhanced-meeting",
-                  "enhanced-phonecall",
-                  "enhanced-finance",
-                  "base",
-                  "base-general",
-                  "base-meeting",
-                  "base-phonecall",
-                  "base-finance",
-                  "base-conversationalai",
-                  "base-voicemail",
-                  "base-video"
-                ]
-              },
-              {
-                "type": "string"
-              }
-            ]
+          {
+            "name": "webhookType",
+            "required": false,
+            "in": "query",
+            "description": "This is the type of the webhook, given the log is from a webhook.",
+            "schema": {
+              "type": "string"
+            }
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview",
-            "enum": [
-              "bg",
-              "ca",
-              "cs",
-              "da",
-              "da-DK",
-              "de",
-              "de-CH",
-              "el",
-              "en",
-              "en-AU",
-              "en-GB",
-              "en-IN",
-              "en-NZ",
-              "en-US",
-              "es",
-              "es-419",
-              "es-LATAM",
-              "et",
-              "fi",
-              "fr",
-              "fr-CA",
-              "hi",
-              "hi-Latn",
-              "hu",
-              "id",
-              "it",
-              "ja",
-              "ko",
-              "ko-KR",
-              "lt",
-              "lv",
-              "ms",
-              "multi",
-              "nl",
-              "nl-BE",
-              "no",
-              "pl",
-              "pt",
-              "pt-BR",
-              "ro",
-              "ru",
-              "sk",
-              "sv",
-              "sv-SE",
-              "ta",
-              "taq",
-              "th",
-              "th-TH",
-              "tr",
-              "uk",
-              "vi",
-              "zh",
-              "zh-CN",
-              "zh-HK",
-              "zh-Hans",
-              "zh-Hant",
-              "zh-TW"
-            ]
+          {
+            "name": "assistantId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the assistant.",
+            "schema": {
+              "type": "string"
+            }
           },
-          "smartFormat": {
-            "type": "boolean",
-            "description": "This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes format numbers as times but it's getting better.",
-            "example": false
+          {
+            "name": "phoneNumberId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the phone number.",
+            "schema": {
+              "type": "string"
+            }
           },
-          "codeSwitchingEnabled": {
-            "type": "boolean",
-            "description": "This automatically switches the transcriber's language when the customer's language changes. Defaults to false.\n\nUsage:\n- If your customers switch languages mid-call, you can set this to true.\n\nNote:\n- To detect language changes, Vapi uses a custom trained model. Languages supported (X = limited support):\n  1. Arabic\n  2. Bengali\n  3. Cantonese\n  4. Chinese\n  5. Chinese Simplified (X)\n  6. Chinese Traditional (X)\n  7. English\n  8. Farsi (X)\n  9. French\n  10. German\n  11. Haitian Creole (X)\n  12. Hindi\n  13. Italian\n  14. Japanese\n  15. Korean\n  16. Portuguese\n  17. Russian\n  18. Spanish\n  19. Thai\n  20. Urdu\n  21. Vietnamese\n- To receive `language-change-detected` webhook events, add it to `assistant.serverMessages`.\n\n@default false",
-            "example": false
+          {
+            "name": "customerId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the customer.",
+            "schema": {
+              "type": "string"
+            }
           },
-          "mipOptOut": {
-            "type": "boolean",
-            "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false",
-            "example": false,
-            "default": false
+          {
+            "name": "squadId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the squad.",
+            "schema": {
+              "type": "string"
+            }
           },
-          "numerals": {
-            "type": "boolean",
-            "description": "If set to true, this will cause deepgram to convert spoken numbers to literal numerals. For example, \"my phone number is nine-seven-two...\" would become \"my phone number is 972...\"\n\n@default false",
-            "example": false
+          {
+            "name": "callId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the call.",
+            "schema": {
+              "type": "string"
+            }
           },
-          "confidenceThreshold": {
-            "type": "number",
-            "description": "Transcripts below this confidence threshold will be discarded.\n\n@default 0.4",
-            "minimum": 0,
-            "maximum": 1,
-            "example": 0.4
+          {
+            "name": "page",
+            "required": false,
+            "in": "query",
+            "description": "This is the page number to return. Defaults to 1.",
+            "schema": {
+              "minimum": 1,
+              "type": "number"
+            }
           },
-          "keywords": {
-            "description": "These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here.",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "pattern": "/^\\p{L}[\\p{L}\\d]*(?::[+-]?\\d+)?$/u"
+          {
+            "name": "sortOrder",
+            "required": false,
+            "in": "query",
+            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
+            "schema": {
+              "enum": [
+                "ASC",
+                "DESC"
+              ],
+              "type": "string"
             }
           },
-          "keyterm": {
-            "description": "Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.",
-            "type": "array",
-            "items": {
+          {
+            "name": "limit",
+            "required": false,
+            "in": "query",
+            "description": "This is the maximum number of items to return. Defaults to 100.",
+            "schema": {
+              "minimum": 0,
+              "maximum": 1000,
+              "type": "number"
+            }
+          },
+          {
+            "name": "createdAtGt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is greater than the specified value.",
+            "schema": {
+              "format": "date-time",
               "type": "string"
             }
           },
-          "endpointing": {
-            "type": "number",
-            "description": "This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth documentation here: https://developers.deepgram.com/docs/endpointing.\n\nHere are the most important bits:\n- Defaults to 10. This is recommended for most use cases to optimize for latency.\n- 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word utterances. For those uses cases, it's recommended to try 300. It will add a bit of latency but the quality and reliability of the experience will be better.\n- If neither 10 nor 300 work, contact support@vapi.ai and we'll find another solution.\n\n@default 10",
-            "minimum": 10,
-            "maximum": 500
+          {
+            "name": "createdAtLt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is less than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+          {
+            "name": "createdAtGe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is greater than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "createdAtLe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is less than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtGt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is greater than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtLt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtGe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is greater than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtLe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/LogsPaginatedResponse"
+                }
               }
-            ]
+            }
           }
         },
-        "required": [
-          "provider"
-        ]
-      },
-      "ElevenLabsTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "11labs"
-            ]
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for the transcription.",
-            "enum": [
-              "scribe_v1"
-            ]
-          },
-          "language": {
-            "type": "string",
-            "enum": [
-              "aa",
-              "ab",
-              "ae",
-              "af",
-              "ak",
-              "am",
-              "an",
-              "ar",
-              "as",
-              "av",
-              "ay",
-              "az",
-              "ba",
-              "be",
-              "bg",
-              "bh",
-              "bi",
-              "bm",
-              "bn",
-              "bo",
-              "br",
-              "bs",
-              "ca",
-              "ce",
-              "ch",
-              "co",
-              "cr",
-              "cs",
-              "cu",
-              "cv",
-              "cy",
-              "da",
-              "de",
-              "dv",
-              "dz",
-              "ee",
-              "el",
-              "en",
-              "eo",
-              "es",
-              "et",
-              "eu",
-              "fa",
-              "ff",
-              "fi",
-              "fj",
-              "fo",
-              "fr",
-              "fy",
-              "ga",
-              "gd",
-              "gl",
-              "gn",
-              "gu",
-              "gv",
-              "ha",
-              "he",
-              "hi",
-              "ho",
-              "hr",
-              "ht",
-              "hu",
-              "hy",
-              "hz",
-              "ia",
-              "id",
-              "ie",
-              "ig",
-              "ii",
-              "ik",
-              "io",
-              "is",
-              "it",
-              "iu",
-              "ja",
-              "jv",
-              "ka",
-              "kg",
-              "ki",
-              "kj",
-              "kk",
-              "kl",
-              "km",
-              "kn",
-              "ko",
-              "kr",
-              "ks",
-              "ku",
-              "kv",
-              "kw",
-              "ky",
-              "la",
-              "lb",
-              "lg",
-              "li",
-              "ln",
-              "lo",
-              "lt",
-              "lu",
-              "lv",
-              "mg",
-              "mh",
-              "mi",
-              "mk",
-              "ml",
-              "mn",
-              "mr",
-              "ms",
-              "mt",
-              "my",
-              "na",
-              "nb",
-              "nd",
-              "ne",
-              "ng",
-              "nl",
-              "nn",
-              "no",
-              "nr",
-              "nv",
-              "ny",
-              "oc",
-              "oj",
-              "om",
-              "or",
-              "os",
-              "pa",
-              "pi",
-              "pl",
-              "ps",
-              "pt",
-              "qu",
-              "rm",
-              "rn",
-              "ro",
-              "ru",
-              "rw",
-              "sa",
-              "sc",
-              "sd",
-              "se",
-              "sg",
-              "si",
-              "sk",
-              "sl",
-              "sm",
-              "sn",
-              "so",
-              "sq",
-              "sr",
-              "ss",
-              "st",
-              "su",
-              "sv",
-              "sw",
-              "ta",
-              "te",
-              "tg",
-              "th",
-              "ti",
-              "tk",
-              "tl",
-              "tn",
-              "to",
-              "tr",
-              "ts",
-              "tt",
-              "tw",
-              "ty",
-              "ug",
-              "uk",
-              "ur",
-              "uz",
-              "ve",
-              "vi",
-              "vo",
-              "wa",
-              "wo",
-              "xh",
-              "yi",
-              "yue",
-              "yo",
-              "za",
-              "zh",
-              "zu"
-            ]
-          },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackTranscriberPlan"
-              }
-            ]
+        "tags": [
+          "Logs"
+        ],
+        "security": [
+          {
+            "bearer": []
           }
-        },
-        "required": [
-          "provider"
         ]
       },
-      "GladiaTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "gladia"
-            ]
-          },
-          "model": {
-            "description": "This is the Gladia model that will be used. Default is 'fast'",
-            "oneOf": [
-              {
-                "enum": [
-                  "fast",
-                  "accurate"
-                ]
-              }
-            ]
+      "delete": {
+        "operationId": "LoggingController_logsDeleteQuery",
+        "summary": "Delete Logs",
+        "deprecated": true,
+        "parameters": [
+          {
+            "name": "type",
+            "required": false,
+            "in": "query",
+            "description": "This is the type of the log.",
+            "schema": {
+              "enum": [
+                "API",
+                "Webhook",
+                "Call",
+                "Provider"
+              ],
+              "type": "string"
+            }
           },
-          "languageBehaviour": {
-            "description": "Defines how the transcription model detects the audio language. Default value is 'automatic single language'.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "manual",
-                  "automatic single language",
-                  "automatic multiple languages"
-                ]
-              }
-            ]
+          {
+            "name": "assistantId",
+            "required": false,
+            "in": "query",
+            "schema": {
+              "type": "string"
+            }
           },
-          "language": {
-            "type": "string",
-            "description": "Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.",
-            "enum": [
-              "af",
-              "sq",
-              "am",
-              "ar",
-              "hy",
-              "as",
-              "az",
-              "ba",
-              "eu",
-              "be",
-              "bn",
-              "bs",
-              "br",
-              "bg",
-              "ca",
-              "zh",
-              "hr",
-              "cs",
-              "da",
-              "nl",
-              "en",
-              "et",
-              "fo",
-              "fi",
-              "fr",
-              "gl",
-              "ka",
-              "de",
-              "el",
-              "gu",
-              "ht",
-              "ha",
-              "haw",
-              "he",
-              "hi",
-              "hu",
-              "is",
-              "id",
-              "it",
-              "ja",
-              "jv",
-              "kn",
-              "kk",
-              "km",
-              "ko",
-              "lo",
-              "la",
-              "lv",
-              "ln",
-              "lt",
-              "lb",
-              "mk",
-              "mg",
-              "ms",
-              "ml",
-              "mt",
-              "mi",
-              "mr",
-              "mn",
-              "my",
-              "ne",
-              "no",
-              "nn",
-              "oc",
-              "ps",
-              "fa",
-              "pl",
-              "pt",
-              "pa",
-              "ro",
-              "ru",
-              "sa",
-              "sr",
-              "sn",
-              "sd",
-              "si",
-              "sk",
-              "sl",
-              "so",
-              "es",
-              "su",
-              "sw",
-              "sv",
-              "tl",
-              "tg",
-              "ta",
-              "tt",
-              "te",
-              "th",
-              "bo",
-              "tr",
-              "tk",
-              "uk",
-              "ur",
-              "uz",
-              "vi",
-              "cy",
-              "yi",
-              "yo"
-            ]
+          {
+            "name": "phoneNumberId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the phone number.",
+            "schema": {
+              "type": "string"
+            }
           },
-          "transcriptionHint": {
-            "type": "string",
-            "description": "Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored.\n⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.",
-            "maxLength": 600,
-            "example": "custom vocabulary"
+          {
+            "name": "customerId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the customer.",
+            "schema": {
+              "type": "string"
+            }
           },
-          "prosody": {
-            "type": "boolean",
-            "description": "If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)… Default value is false.",
-            "example": false
+          {
+            "name": "squadId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the squad.",
+            "schema": {
+              "type": "string"
+            }
           },
-          "audioEnhancer": {
-            "type": "boolean",
-            "description": "If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.",
-            "example": false
+          {
+            "name": "callId",
+            "required": false,
+            "in": "query",
+            "description": "This is the ID of the call.",
+            "schema": {
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": ""
+          }
+        },
+        "tags": [
+          "Logs"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      }
+    },
+    "/provider/{provider}/{resourceName}": {
+      "post": {
+        "operationId": "ProviderResourceController_createProviderResource",
+        "summary": "Create Provider Resource",
+        "parameters": [
+          {
+            "name": "content-type",
+            "required": true,
+            "in": "header",
+            "schema": {
+              "type": "string"
+            }
           },
-          "confidenceThreshold": {
-            "type": "number",
-            "description": "Transcripts below this confidence threshold will be discarded.\n\n@default 0.4",
-            "minimum": 0,
-            "maximum": 1,
-            "example": 0.4
+          {
+            "name": "provider",
+            "required": true,
+            "in": "path",
+            "description": "The provider (e.g., 11labs)",
+            "schema": {
+              "enum": [
+                "11labs"
+              ],
+              "type": "string"
+            }
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+          {
+            "name": "resourceName",
+            "required": true,
+            "in": "path",
+            "description": "The resource name (e.g., pronunciation-dictionary)",
+            "schema": {
+              "enum": [
+                "pronunciation-dictionary"
+              ],
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "201": {
+            "description": "Successfully created provider resource",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/ProviderResource"
+                }
               }
-            ]
+            }
           }
         },
-        "required": [
-          "provider"
+        "tags": [
+          "Provider Resources"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
         ]
       },
-      "SpeechmaticsTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "speechmatics"
-            ]
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for the transcription.",
-            "enum": [
-              "default"
-            ]
+      "get": {
+        "operationId": "ProviderResourceController_getProviderResourcesPaginated",
+        "summary": "List Provider Resources",
+        "parameters": [
+          {
+            "name": "provider",
+            "required": true,
+            "in": "path",
+            "description": "The provider (e.g., 11labs)",
+            "schema": {
+              "enum": [
+                "11labs"
+              ],
+              "type": "string"
+            }
           },
-          "language": {
-            "type": "string",
-            "enum": [
-              "auto",
-              "ar",
-              "ba",
-              "eu",
-              "be",
-              "bn",
-              "bg",
-              "yue",
-              "ca",
-              "hr",
-              "cs",
-              "da",
-              "nl",
-              "en",
-              "eo",
-              "et",
-              "fi",
-              "fr",
-              "gl",
-              "de",
-              "el",
-              "he",
-              "hi",
-              "hu",
-              "id",
-              "ia",
-              "ga",
-              "it",
-              "ja",
-              "ko",
-              "lv",
-              "lt",
-              "ms",
-              "mt",
-              "cmn",
-              "mr",
-              "mn",
-              "no",
-              "fa",
-              "pl",
-              "pt",
-              "ro",
-              "ru",
-              "sk",
-              "sl",
-              "es",
-              "sw",
-              "sv",
-              "ta",
-              "th",
-              "tr",
-              "uk",
-              "ur",
-              "ug",
-              "vi",
-              "cy"
-            ]
+          {
+            "name": "resourceName",
+            "required": true,
+            "in": "path",
+            "description": "The resource name (e.g., pronunciation-dictionary)",
+            "schema": {
+              "enum": [
+                "pronunciation-dictionary"
+              ],
+              "type": "string"
+            }
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackTranscriberPlan"
-              }
-            ]
-          }
-        },
-        "required": [
-          "provider"
-        ]
-      },
-      "TalkscriberTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "talkscriber"
-            ]
+          {
+            "name": "id",
+            "required": false,
+            "in": "query",
+            "schema": {
+              "type": "string"
+            }
           },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for the transcription.",
-            "enum": [
-              "whisper"
-            ]
+          {
+            "name": "resourceId",
+            "required": false,
+            "in": "query",
+            "schema": {
+              "type": "string"
+            }
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be set for the transcription. The list of languages Whisper supports can be found here: https://github.com/openai/whisper/blob/main/whisper/tokenizer.py",
-            "enum": [
-              "en",
-              "zh",
-              "de",
-              "es",
-              "ru",
-              "ko",
-              "fr",
-              "ja",
-              "pt",
-              "tr",
-              "pl",
-              "ca",
-              "nl",
-              "ar",
-              "sv",
-              "it",
-              "id",
-              "hi",
-              "fi",
-              "vi",
-              "he",
-              "uk",
-              "el",
-              "ms",
-              "cs",
-              "ro",
-              "da",
-              "hu",
-              "ta",
-              "no",
-              "th",
-              "ur",
-              "hr",
-              "bg",
-              "lt",
-              "la",
-              "mi",
-              "ml",
-              "cy",
-              "sk",
-              "te",
-              "fa",
-              "lv",
-              "bn",
-              "sr",
-              "az",
-              "sl",
-              "kn",
-              "et",
-              "mk",
-              "br",
-              "eu",
-              "is",
-              "hy",
-              "ne",
-              "mn",
-              "bs",
-              "kk",
-              "sq",
-              "sw",
-              "gl",
-              "mr",
-              "pa",
-              "si",
-              "km",
-              "sn",
-              "yo",
-              "so",
-              "af",
-              "oc",
-              "ka",
-              "be",
-              "tg",
-              "sd",
-              "gu",
-              "am",
-              "yi",
-              "lo",
-              "uz",
-              "fo",
-              "ht",
-              "ps",
-              "tk",
-              "nn",
-              "mt",
-              "sa",
-              "lb",
-              "my",
-              "bo",
-              "tl",
-              "mg",
-              "as",
-              "tt",
-              "haw",
-              "ln",
-              "ha",
-              "ba",
-              "jw",
-              "su",
-              "yue"
-            ]
+          {
+            "name": "page",
+            "required": false,
+            "in": "query",
+            "description": "This is the page number to return. Defaults to 1.",
+            "schema": {
+              "minimum": 1,
+              "type": "number"
+            }
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+          {
+            "name": "sortOrder",
+            "required": false,
+            "in": "query",
+            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
+            "schema": {
+              "enum": [
+                "ASC",
+                "DESC"
+              ],
+              "type": "string"
+            }
+          },
+          {
+            "name": "limit",
+            "required": false,
+            "in": "query",
+            "description": "This is the maximum number of items to return. Defaults to 100.",
+            "schema": {
+              "minimum": 0,
+              "maximum": 1000,
+              "type": "number"
+            }
+          },
+          {
+            "name": "createdAtGt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is greater than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "createdAtLt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is less than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "createdAtGe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is greater than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "createdAtLe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the createdAt is less than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtGt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is greater than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtLt",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtGe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is greater than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          },
+          {
+            "name": "updatedAtLe",
+            "required": false,
+            "in": "query",
+            "description": "This will return items where the updatedAt is less than or equal to the specified value.",
+            "schema": {
+              "format": "date-time",
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "List of provider resources",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/ProviderResourcePaginatedResponse"
+                }
               }
-            ]
+            }
           }
         },
-        "required": [
-          "provider"
+        "tags": [
+          "Provider Resources"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
         ]
-      },
-      "GoogleTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "google"
-            ]
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for the transcription.",
-            "enum": [
-              "gemini-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"
-            ]
+      }
+    },
+    "/provider/{provider}/{resourceName}/{id}": {
+      "get": {
+        "operationId": "ProviderResourceController_getProviderResource",
+        "summary": "Get Provider Resource",
+        "parameters": [
+          {
+            "name": "provider",
+            "required": true,
+            "in": "path",
+            "description": "The provider (e.g., 11labs)",
+            "schema": {
+              "enum": [
+                "11labs"
+              ],
+              "type": "string"
+            }
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be set for the transcription.",
-            "enum": [
-              "Multilingual",
-              "Arabic",
-              "Bengali",
-              "Bulgarian",
-              "Chinese",
-              "Croatian",
-              "Czech",
-              "Danish",
-              "Dutch",
-              "English",
-              "Estonian",
-              "Finnish",
-              "French",
-              "German",
-              "Greek",
-              "Hebrew",
-              "Hindi",
-              "Hungarian",
-              "Indonesian",
-              "Italian",
-              "Japanese",
-              "Korean",
-              "Latvian",
-              "Lithuanian",
-              "Norwegian",
-              "Polish",
-              "Portuguese",
-              "Romanian",
-              "Russian",
-              "Serbian",
-              "Slovak",
-              "Slovenian",
-              "Spanish",
-              "Swahili",
-              "Swedish",
-              "Thai",
-              "Turkish",
-              "Ukrainian",
-              "Vietnamese"
-            ]
+          {
+            "name": "resourceName",
+            "required": true,
+            "in": "path",
+            "description": "The resource name (e.g., pronunciation-dictionary)",
+            "schema": {
+              "enum": [
+                "pronunciation-dictionary"
+              ],
+              "type": "string"
+            }
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "format": "uuid",
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "Successfully retrieved provider resource",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/ProviderResource"
+                }
               }
-            ]
+            }
+          },
+          "404": {
+            "description": "Provider resource not found"
           }
         },
-        "required": [
-          "provider"
+        "tags": [
+          "Provider Resources"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
         ]
       },
-      "OpenAITranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "openai"
-            ]
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for the transcription.",
-            "enum": [
-              "gpt-4o-transcribe",
-              "gpt-4o-mini-transcribe"
-            ]
+      "delete": {
+        "operationId": "ProviderResourceController_deleteProviderResource",
+        "summary": "Delete Provider Resource",
+        "parameters": [
+          {
+            "name": "provider",
+            "required": true,
+            "in": "path",
+            "description": "The provider (e.g., 11labs)",
+            "schema": {
+              "enum": [
+                "11labs"
+              ],
+              "type": "string"
+            }
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be set for the transcription.",
-            "enum": [
-              "af",
-              "ar",
-              "hy",
-              "az",
-              "be",
-              "bs",
-              "bg",
-              "ca",
-              "zh",
-              "hr",
-              "cs",
-              "da",
-              "nl",
-              "en",
-              "et",
-              "fi",
-              "fr",
-              "gl",
-              "de",
-              "el",
-              "he",
-              "hi",
-              "hu",
-              "is",
-              "id",
-              "it",
-              "ja",
-              "kn",
-              "kk",
-              "ko",
-              "lv",
-              "lt",
-              "mk",
-              "ms",
-              "mr",
-              "mi",
-              "ne",
-              "no",
-              "fa",
-              "pl",
-              "pt",
-              "ro",
-              "ru",
-              "sr",
-              "sk",
-              "sl",
-              "es",
-              "sw",
-              "sv",
-              "tl",
-              "ta",
-              "th",
-              "tr",
-              "uk",
-              "ur",
-              "vi",
-              "cy"
-            ]
+          {
+            "name": "resourceName",
+            "required": true,
+            "in": "path",
+            "description": "The resource name (e.g., pronunciation-dictionary)",
+            "schema": {
+              "enum": [
+                "pronunciation-dictionary"
+              ],
+              "type": "string"
+            }
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "format": "uuid",
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/ProviderResource"
+                }
               }
-            ]
+            }
+          },
+          "404": {
+            "description": "Provider resource not found"
           }
         },
-        "required": [
-          "provider",
-          "model"
+        "tags": [
+          "Provider Resources"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
         ]
       },
-      "FallbackAssemblyAITranscriber": {
+      "patch": {
+        "operationId": "ProviderResourceController_updateProviderResource",
+        "summary": "Update Provider Resource",
+        "parameters": [
+          {
+            "name": "provider",
+            "required": true,
+            "in": "path",
+            "description": "The provider (e.g., 11labs)",
+            "schema": {
+              "enum": [
+                "11labs"
+              ],
+              "type": "string"
+            }
+          },
+          {
+            "name": "resourceName",
+            "required": true,
+            "in": "path",
+            "description": "The resource name (e.g., pronunciation-dictionary)",
+            "schema": {
+              "enum": [
+                "pronunciation-dictionary"
+              ],
+              "type": "string"
+            }
+          },
+          {
+            "name": "id",
+            "required": true,
+            "in": "path",
+            "schema": {
+              "format": "uuid",
+              "type": "string"
+            }
+          }
+        ],
+        "responses": {
+          "200": {
+            "description": "",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "#/components/schemas/ProviderResource"
+                }
+              }
+            }
+          },
+          "404": {
+            "description": "Provider resource not found"
+          }
+        },
+        "tags": [
+          "Provider Resources"
+        ],
+        "security": [
+          {
+            "bearer": []
+          }
+        ]
+      }
+    }
+  },
+  "info": {
+    "title": "Vapi API",
+    "description": "Voice AI for developers.",
+    "version": "1.0",
+    "contact": {}
+  },
+  "tags": [],
+  "servers": [
+    {
+      "url": "https://api.vapi.ai"
+    }
+  ],
+  "components": {
+    "securitySchemes": {
+      "bearer": {
+        "scheme": "bearer",
+        "bearerFormat": "Bearer",
+        "type": "http",
+        "description": "Retrieve your API Key from [Dashboard](dashboard.vapi.ai)."
+      }
+    },
+    "schemas": {
+      "AnalysisCostBreakdown": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "assembly-ai"
-            ]
+          "summary": {
+            "type": "number",
+            "description": "This is the cost to summarize the call."
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be set for the transcription.",
-            "enum": [
-              "en"
-            ]
+          "summaryPromptTokens": {
+            "type": "number",
+            "description": "This is the number of prompt tokens used to summarize the call."
           },
-          "confidenceThreshold": {
+          "summaryCompletionTokens": {
             "type": "number",
-            "description": "Transcripts below this confidence threshold will be discarded.\n\n@default 0.4",
-            "minimum": 0,
-            "maximum": 1,
-            "example": 0.4
+            "description": "This is the number of completion tokens used to summarize the call."
           },
-          "realtimeUrl": {
-            "type": "string",
-            "description": "The WebSocket URL that the transcriber connects to."
+          "structuredData": {
+            "type": "number",
+            "description": "This is the cost to extract structured data from the call."
           },
-          "wordBoost": {
-            "description": "Add up to 2500 characters of custom vocabulary.",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "maxLength": 2500
-            }
+          "structuredDataPromptTokens": {
+            "type": "number",
+            "description": "This is the number of prompt tokens used to extract structured data from the call."
           },
-          "endUtteranceSilenceThreshold": {
+          "structuredDataCompletionTokens": {
             "type": "number",
-            "description": "The duration of the end utterance silence threshold in milliseconds."
+            "description": "This is the number of completion tokens used to extract structured data from the call."
           },
-          "disablePartialTranscripts": {
-            "type": "boolean",
-            "description": "Disable partial transcripts.\nSet to `true` to not receive partial transcripts. Defaults to `false`."
+          "successEvaluation": {
+            "type": "number",
+            "description": "This is the cost to evaluate if the call was successful."
+          },
+          "successEvaluationPromptTokens": {
+            "type": "number",
+            "description": "This is the number of prompt tokens used to evaluate if the call was successful."
+          },
+          "successEvaluationCompletionTokens": {
+            "type": "number",
+            "description": "This is the number of completion tokens used to evaluate if the call was successful."
           }
-        },
-        "required": [
-          "provider"
-        ]
+        }
       },
-      "FallbackAzureSpeechTranscriber": {
+      "CostBreakdown": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "azure"
+          "transport": {
+            "type": "number",
+            "description": "This is the cost of the transport provider, like Twilio or Vonage."
+          },
+          "stt": {
+            "type": "number",
+            "description": "This is the cost of the speech-to-text service."
+          },
+          "llm": {
+            "type": "number",
+            "description": "This is the cost of the language model."
+          },
+          "tts": {
+            "type": "number",
+            "description": "This is the cost of the text-to-speech service."
+          },
+          "vapi": {
+            "type": "number",
+            "description": "This is the cost of Vapi."
+          },
+          "chat": {
+            "type": "number",
+            "description": "This is the cost of chat interactions."
+          },
+          "total": {
+            "type": "number",
+            "description": "This is the total cost of the call."
+          },
+          "llmPromptTokens": {
+            "type": "number",
+            "description": "This is the LLM prompt tokens used for the call."
+          },
+          "llmCompletionTokens": {
+            "type": "number",
+            "description": "This is the LLM completion tokens used for the call."
+          },
+          "ttsCharacters": {
+            "type": "number",
+            "description": "This is the TTS characters used for the call."
+          },
+          "analysisCostBreakdown": {
+            "description": "This is the cost of the analysis.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AnalysisCostBreakdown"
+              }
             ]
+          }
+        }
+      },
+      "TranscriptPlan": {
+        "type": "object",
+        "properties": {
+          "enabled": {
+            "type": "boolean",
+            "description": "This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true.\n\n@default true",
+            "example": true
           },
-          "language": {
+          "assistantName": {
             "type": "string",
-            "description": "This is the language that will be set for the transcription. The list of languages Azure supports can be found here: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt",
-            "enum": [
-              "af-ZA",
-              "am-ET",
-              "ar-AE",
-              "ar-BH",
-              "ar-DZ",
-              "ar-EG",
-              "ar-IL",
-              "ar-IQ",
-              "ar-JO",
-              "ar-KW",
-              "ar-LB",
-              "ar-LY",
-              "ar-MA",
-              "ar-OM",
-              "ar-PS",
-              "ar-QA",
-              "ar-SA",
-              "ar-SY",
-              "ar-TN",
-              "ar-YE",
-              "az-AZ",
-              "bg-BG",
-              "bn-IN",
-              "bs-BA",
-              "ca-ES",
-              "cs-CZ",
-              "cy-GB",
-              "da-DK",
-              "de-AT",
-              "de-CH",
-              "de-DE",
-              "el-GR",
-              "en-AU",
-              "en-CA",
-              "en-GB",
-              "en-GH",
-              "en-HK",
-              "en-IE",
-              "en-IN",
-              "en-KE",
-              "en-NG",
-              "en-NZ",
-              "en-PH",
-              "en-SG",
-              "en-TZ",
-              "en-US",
-              "en-ZA",
-              "es-AR",
-              "es-BO",
-              "es-CL",
-              "es-CO",
-              "es-CR",
-              "es-CU",
-              "es-DO",
-              "es-EC",
-              "es-ES",
-              "es-GQ",
-              "es-GT",
-              "es-HN",
-              "es-MX",
-              "es-NI",
-              "es-PA",
-              "es-PE",
-              "es-PR",
-              "es-PY",
-              "es-SV",
-              "es-US",
-              "es-UY",
-              "es-VE",
-              "et-EE",
-              "eu-ES",
-              "fa-IR",
-              "fi-FI",
-              "fil-PH",
-              "fr-BE",
-              "fr-CA",
-              "fr-CH",
-              "fr-FR",
-              "ga-IE",
-              "gl-ES",
-              "gu-IN",
-              "he-IL",
-              "hi-IN",
-              "hr-HR",
-              "hu-HU",
-              "hy-AM",
-              "id-ID",
-              "is-IS",
-              "it-CH",
-              "it-IT",
-              "ja-JP",
-              "jv-ID",
-              "ka-GE",
-              "kk-KZ",
-              "km-KH",
-              "kn-IN",
-              "ko-KR",
-              "lo-LA",
-              "lt-LT",
-              "lv-LV",
-              "mk-MK",
-              "ml-IN",
-              "mn-MN",
-              "mr-IN",
-              "ms-MY",
-              "mt-MT",
-              "my-MM",
-              "nb-NO",
-              "ne-NP",
-              "nl-BE",
-              "nl-NL",
-              "pa-IN",
-              "pl-PL",
-              "ps-AF",
-              "pt-BR",
-              "pt-PT",
-              "ro-RO",
-              "ru-RU",
-              "si-LK",
-              "sk-SK",
-              "sl-SI",
-              "so-SO",
-              "sq-AL",
-              "sr-RS",
-              "sv-SE",
-              "sw-KE",
-              "sw-TZ",
-              "ta-IN",
-              "te-IN",
-              "th-TH",
-              "tr-TR",
-              "uk-UA",
-              "ur-IN",
-              "uz-UZ",
-              "vi-VN",
-              "wuu-CN",
-              "yue-CN",
-              "zh-CN",
-              "zh-CN-shandong",
-              "zh-CN-sichuan",
-              "zh-HK",
-              "zh-TW",
-              "zu-ZA"
-            ]
+            "description": "This is the name of the assistant in the transcript. Defaults to 'AI'.\n\nUsage:\n- If you want to change the name of the assistant in the transcript, set this. Example, here is what the transcript would look like with `assistantName` set to 'Buyer':\n```\nUser: Hello, how are you?\nBuyer: I'm fine.\nUser: Do you want to buy a car?\nBuyer: No.\n```\n\n@default 'AI'"
+          },
+          "userName": {
+            "type": "string",
+            "description": "This is the name of the user in the transcript. Defaults to 'User'.\n\nUsage:\n- If you want to change the name of the user in the transcript, set this. Example, here is what the transcript would look like with `userName` set to 'Seller':\n```\nSeller: Hello, how are you?\nAI: I'm fine.\nSeller: Do you want to buy a car?\nAI: No.\n```\n\n@default 'User'"
           }
-        },
-        "required": [
-          "provider"
-        ]
+        }
       },
-      "FallbackCustomTranscriber": {
+      "ArtifactPlan": {
         "type": "object",
         "properties": {
-          "provider": {
+          "recordingEnabled": {
+            "type": "boolean",
+            "description": "This determines whether assistant's calls are recorded. Defaults to true.\n\nUsage:\n- If you don't want to record the calls, set this to false.\n- If you want to record the calls when `assistant.hipaaEnabled` (deprecated) or `assistant.compliancePlan.hipaaEnabled` explicity set this to true and make sure to provide S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nYou can find the recording at `call.artifact.recordingUrl` and `call.artifact.stereoRecordingUrl` after the call is ended.\n\n@default true",
+            "example": true
+          },
+          "recordingFormat": {
             "type": "string",
-            "description": "This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.",
+            "description": "This determines the format of the recording. Defaults to `wav;l16`.\n\n@default 'wav;l16'",
             "enum": [
-              "custom-transcriber"
+              "wav;l16",
+              "mp3"
             ]
           },
-          "server": {
-            "description": "This is where the transcription request will be sent.\n\nUsage:\n1. Vapi will initiate a websocket connection with `server.url`.\n\n2. Vapi will send an initial text frame with the sample rate. Format:\n```\n    {\n      \"type\": \"start\",\n      \"encoding\": \"linear16\", // 16-bit raw PCM format\n      \"container\": \"raw\",\n      \"sampleRate\": {{sampleRate}},\n      \"channels\": 2 // customer is channel 0, assistant is channel 1\n    }\n```\n\n3. Vapi will send the audio data in 16-bit raw PCM format as binary frames.\n\n4. You can read the messages something like this:\n```\nws.on('message', (data, isBinary) => {\n  if (isBinary) {\n    pcmBuffer = Buffer.concat([pcmBuffer, data]);\n    console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);\n  } else {\n    console.log('Received message:', JSON.parse(data.toString()));\n  }\n});\n```\n\n5. You will respond with transcriptions as you have them. Format:\n```\n {\n    \"type\": \"transcriber-response\",\n    \"transcription\": \"Hello, world!\",\n    \"channel\": \"customer\" | \"assistant\"\n }\n```",
+          "videoRecordingEnabled": {
+            "type": "boolean",
+            "description": "This determines whether the video is recorded during the call. Defaults to false. Only relevant for `webCall` type.\n\nYou can find the video recording at `call.artifact.videoRecordingUrl` after the call is ended.\n\n@default false",
+            "example": false
+          },
+          "pcapEnabled": {
+            "type": "boolean",
+            "description": "This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`.\n\nYou can find the packet capture at `call.artifact.pcapUrl` after the call is ended.\n\n@default true",
+            "example": true
+          },
+          "pcapS3PathPrefix": {
+            "type": "string",
+            "description": "This is the path where the SIP packet capture will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nIf credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it.\n\nUsage:\n- If you want to upload the packet capture to a specific path, set this to the path. Example: `/my-assistant-captures`.\n- If you want to upload the packet capture to the root of the bucket, set this to `/`.\n\n@default '/'",
+            "example": "/pcaps"
+          },
+          "transcriptPlan": {
+            "description": "This is the plan for `call.artifact.transcript`. To disable, set `transcriptPlan.enabled` to false.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/TranscriptPlan"
               }
             ]
+          },
+          "recordingPath": {
+            "type": "string",
+            "description": "This is the path where the recording will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nIf credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it.\n\nUsage:\n- If you want to upload the recording to a specific path, set this to the path. Example: `/my-assistant-recordings`.\n- If you want to upload the recording to the root of the bucket, set this to `/`.\n\n@default '/'"
           }
-        },
-        "required": [
-          "provider",
-          "server"
-        ]
+        }
       },
-      "FallbackDeepgramTranscriber": {
+      "Analysis": {
         "type": "object",
         "properties": {
-          "provider": {
+          "summary": {
             "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "deepgram"
-            ]
+            "description": "This is the summary of the call. Customize by setting `assistant.analysisPlan.summaryPrompt`."
           },
-          "model": {
-            "description": "This is the Deepgram model that will be used. A list of models can be found here: https://developers.deepgram.com/docs/models-languages-overview",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "nova-3",
-                  "nova-3-general",
-                  "nova-3-medical",
-                  "nova-2",
-                  "nova-2-general",
-                  "nova-2-meeting",
-                  "nova-2-phonecall",
-                  "nova-2-finance",
-                  "nova-2-conversationalai",
-                  "nova-2-voicemail",
-                  "nova-2-video",
-                  "nova-2-medical",
-                  "nova-2-drivethru",
-                  "nova-2-automotive",
-                  "nova",
-                  "nova-general",
-                  "nova-phonecall",
-                  "nova-medical",
-                  "enhanced",
-                  "enhanced-general",
-                  "enhanced-meeting",
-                  "enhanced-phonecall",
-                  "enhanced-finance",
-                  "base",
-                  "base-general",
-                  "base-meeting",
-                  "base-phonecall",
-                  "base-finance",
-                  "base-conversationalai",
-                  "base-voicemail",
-                  "base-video"
-                ]
-              },
+          "structuredData": {
+            "type": "object",
+            "description": "This is the structured data extracted from the call. Customize by setting `assistant.analysisPlan.structuredDataPrompt` and/or `assistant.analysisPlan.structuredDataSchema`."
+          },
+          "structuredDataMulti": {
+            "description": "This is the structured data catalog of the call. Customize by setting `assistant.analysisPlan.structuredDataMultiPlan`.",
+            "type": "array",
+            "items": {
+              "type": "object"
+            }
+          },
+          "successEvaluation": {
+            "type": "string",
+            "description": "This is the evaluation of the call. Customize by setting `assistant.analysisPlan.successEvaluationPrompt` and/or `assistant.analysisPlan.successEvaluationRubric`."
+          }
+        }
+      },
+      "Monitor": {
+        "type": "object",
+        "properties": {
+          "listenUrl": {
+            "type": "string",
+            "description": "This is the URL where the assistant's calls can be listened to in real-time. To enable, set `assistant.monitorPlan.listenEnabled` to `true`."
+          },
+          "controlUrl": {
+            "type": "string",
+            "description": "This is the URL where the assistant's calls can be controlled in real-time. To enable, set `assistant.monitorPlan.controlEnabled` to `true`."
+          }
+        }
+      },
+      "OpenAIMessage": {
+        "type": "object",
+        "properties": {
+          "content": {
+            "type": "string",
+            "nullable": true,
+            "maxLength": 100000000
+          },
+          "role": {
+            "type": "string",
+            "enum": [
+              "assistant",
+              "function",
+              "user",
+              "system",
+              "tool"
+            ]
+          }
+        },
+        "required": [
+          "content",
+          "role"
+        ]
+      },
+      "Mono": {
+        "type": "object",
+        "properties": {
+          "combinedUrl": {
+            "type": "string",
+            "description": "This is the combined recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`."
+          },
+          "assistantUrl": {
+            "type": "string",
+            "description": "This is the mono recording url for the assistant. To enable, set `assistant.artifactPlan.recordingEnabled`."
+          },
+          "customerUrl": {
+            "type": "string",
+            "description": "This is the mono recording url for the customer. To enable, set `assistant.artifactPlan.recordingEnabled`."
+          }
+        }
+      },
+      "Recording": {
+        "type": "object",
+        "properties": {
+          "stereoUrl": {
+            "type": "string",
+            "description": "This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`."
+          },
+          "videoUrl": {
+            "type": "string",
+            "description": "This is the video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`."
+          },
+          "videoRecordingStartDelaySeconds": {
+            "type": "number",
+            "description": "This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps."
+          },
+          "mono": {
+            "description": "This is the mono recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.",
+            "allOf": [
               {
-                "type": "string"
+                "$ref": "#/components/schemas/Mono"
               }
             ]
+          }
+        }
+      },
+      "NodeArtifact": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that were spoken during the node.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/BotMessage",
+                  "title": "BotMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallMessage",
+                  "title": "ToolCallMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallResultMessage",
+                  "title": "ToolCallResultMessage"
+                }
+              ]
+            }
           },
-          "language": {
+          "nodeName": {
             "type": "string",
-            "description": "This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview",
-            "enum": [
-              "bg",
-              "ca",
-              "cs",
-              "da",
-              "da-DK",
-              "de",
-              "de-CH",
-              "el",
-              "en",
-              "en-AU",
-              "en-GB",
-              "en-IN",
-              "en-NZ",
-              "en-US",
-              "es",
-              "es-419",
-              "es-LATAM",
-              "et",
-              "fi",
-              "fr",
-              "fr-CA",
-              "hi",
-              "hi-Latn",
-              "hu",
-              "id",
-              "it",
-              "ja",
-              "ko",
-              "ko-KR",
-              "lt",
-              "lv",
-              "ms",
-              "multi",
-              "nl",
-              "nl-BE",
-              "no",
-              "pl",
-              "pt",
-              "pt-BR",
-              "ro",
-              "ru",
-              "sk",
-              "sv",
-              "sv-SE",
-              "ta",
-              "taq",
-              "th",
-              "th-TH",
-              "tr",
-              "uk",
-              "vi",
-              "zh",
-              "zh-CN",
-              "zh-HK",
-              "zh-Hans",
-              "zh-Hant",
-              "zh-TW"
+            "description": "This is the node name."
+          },
+          "variableValues": {
+            "type": "object",
+            "description": "These are the variable values that were extracted from the node."
+          }
+        }
+      },
+      "Artifact": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that were spoken during the call.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/BotMessage",
+                  "title": "BotMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallMessage",
+                  "title": "ToolCallMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallResultMessage",
+                  "title": "ToolCallResultMessage"
+                }
+              ]
+            }
+          },
+          "messagesOpenAIFormatted": {
+            "description": "These are the messages that were spoken during the call, formatted for OpenAI.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
+          },
+          "recordingUrl": {
+            "type": "string",
+            "description": "This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.",
+            "deprecated": true
+          },
+          "stereoRecordingUrl": {
+            "type": "string",
+            "description": "This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.",
+            "deprecated": true
+          },
+          "videoRecordingUrl": {
+            "type": "string",
+            "description": "This is video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`.",
+            "deprecated": true
+          },
+          "videoRecordingStartDelaySeconds": {
+            "type": "number",
+            "description": "This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps.",
+            "deprecated": true
+          },
+          "recording": {
+            "description": "This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Recording"
+              }
             ]
           },
-          "smartFormat": {
-            "type": "boolean",
-            "description": "This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes format numbers as times but it's getting better.",
-            "example": false
+          "transcript": {
+            "type": "string",
+            "description": "This is the transcript of the call. This is derived from `artifact.messages` but provided for convenience."
           },
-          "codeSwitchingEnabled": {
-            "type": "boolean",
-            "description": "This automatically switches the transcriber's language when the customer's language changes. Defaults to false.\n\nUsage:\n- If your customers switch languages mid-call, you can set this to true.\n\nNote:\n- To detect language changes, Vapi uses a custom trained model. Languages supported (X = limited support):\n  1. Arabic\n  2. Bengali\n  3. Cantonese\n  4. Chinese\n  5. Chinese Simplified (X)\n  6. Chinese Traditional (X)\n  7. English\n  8. Farsi (X)\n  9. French\n  10. German\n  11. Haitian Creole (X)\n  12. Hindi\n  13. Italian\n  14. Japanese\n  15. Korean\n  16. Portuguese\n  17. Russian\n  18. Spanish\n  19. Thai\n  20. Urdu\n  21. Vietnamese\n- To receive `language-change-detected` webhook events, add it to `assistant.serverMessages`.\n\n@default false",
-            "example": false
+          "pcapUrl": {
+            "type": "string",
+            "description": "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`."
           },
-          "mipOptOut": {
-            "type": "boolean",
-            "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false",
-            "example": false,
-            "default": false
+          "logUrl": {
+            "type": "string",
+            "description": "This is the url for the call logs. This includes all logging output during the call for debugging purposes."
           },
-          "numerals": {
-            "type": "boolean",
-            "description": "If set to true, this will cause deepgram to convert spoken numbers to literal numerals. For example, \"my phone number is nine-seven-two...\" would become \"my phone number is 972...\"\n\n@default false",
-            "example": false
+          "nodes": {
+            "description": "This is the history of workflow nodes that were executed during the call.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/NodeArtifact"
+            }
+          },
+          "variableValues": {
+            "type": "object",
+            "description": "These are the variable values at the end of the workflow execution."
+          }
+        }
+      },
+      "FallbackTranscriberPlan": {
+        "type": "object",
+        "properties": {
+          "transcribers": {
+            "type": "array",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/FallbackAssemblyAITranscriber",
+                  "title": "AssemblyAI"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackAzureSpeechTranscriber",
+                  "title": "Azure"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackCustomTranscriber",
+                  "title": "Custom"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackDeepgramTranscriber",
+                  "title": "Deepgram"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackElevenLabsTranscriber",
+                  "title": "ElevenLabs"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackGladiaTranscriber",
+                  "title": "Gladia"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackGoogleTranscriber",
+                  "title": "Google"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackTalkscriberTranscriber",
+                  "title": "Talkscriber"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackSpeechmaticsTranscriber",
+                  "title": "Speechmatics"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackOpenAITranscriber",
+                  "title": "OpenAI"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackCartesiaTranscriber",
+                  "title": "Cartesia"
+                }
+              ]
+            }
+          }
+        },
+        "required": [
+          "transcribers"
+        ]
+      },
+      "AssemblyAITranscriber": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "description": "This is the transcription provider that will be used.",
+            "enum": [
+              "assembly-ai"
+            ]
+          },
+          "language": {
+            "type": "string",
+            "description": "This is the language that will be set for the transcription.",
+            "enum": [
+              "en"
+            ]
           },
           "confidenceThreshold": {
             "type": "number",
@@ -6427,125 +6379,353 @@
             "maximum": 1,
             "example": 0.4
           },
-          "keywords": {
-            "description": "These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here.",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "pattern": "/^\\p{L}[\\p{L}\\d]*(?::[+-]?\\d+)?$/u"
-            }
+          "formatTurns": {
+            "type": "boolean",
+            "description": "This enables formatting of transcripts.\n\n@default true",
+            "example": true
           },
-          "keyterm": {
-            "description": "Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.",
+          "endOfTurnConfidenceThreshold": {
+            "type": "number",
+            "description": "This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected.\n\n@min 0\n@max 1\n@default 0.7",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0.7
+          },
+          "minEndOfTurnSilenceWhenConfident": {
+            "type": "number",
+            "description": "This is the minimum end of turn silence when confident in milliseconds.\n\n@default 160",
+            "minimum": 0,
+            "example": 160
+          },
+          "wordFinalizationMaxWaitTime": {
+            "type": "number",
+            "description": "This is the maximum wait time for word finalization in milliseconds.\n\n@default 160",
+            "minimum": 0,
+            "example": 160
+          },
+          "maxTurnSilence": {
+            "type": "number",
+            "description": "This is the maximum turn silence time in milliseconds.\n\n@default 400",
+            "minimum": 0,
+            "example": 400
+          },
+          "realtimeUrl": {
+            "type": "string",
+            "description": "The WebSocket URL that the transcriber connects to."
+          },
+          "wordBoost": {
+            "description": "Add up to 2500 characters of custom vocabulary.",
             "type": "array",
             "items": {
-              "type": "string"
+              "type": "string",
+              "maxLength": 2500
             }
           },
-          "endpointing": {
+          "endUtteranceSilenceThreshold": {
             "type": "number",
-            "description": "This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth documentation here: https://developers.deepgram.com/docs/endpointing.\n\nHere are the most important bits:\n- Defaults to 10. This is recommended for most use cases to optimize for latency.\n- 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word utterances. For those uses cases, it's recommended to try 300. It will add a bit of latency but the quality and reliability of the experience will be better.\n- If neither 10 nor 300 work, contact support@vapi.ai and we'll find another solution.\n\n@default 10",
-            "minimum": 10,
-            "maximum": 500
+            "description": "The duration of the end utterance silence threshold in milliseconds."
+          },
+          "disablePartialTranscripts": {
+            "type": "boolean",
+            "description": "Disable partial transcripts.\nSet to `true` to not receive partial transcripts. Defaults to `false`."
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider"
         ]
       },
-      "FallbackElevenLabsTranscriber": {
+      "AzureSpeechTranscriber": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "description": "This is the transcription provider that will be used.",
             "enum": [
-              "11labs"
-            ]
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for the transcription.",
-            "enum": [
-              "scribe_v1"
+              "azure"
             ]
           },
           "language": {
             "type": "string",
+            "description": "This is the language that will be set for the transcription. The list of languages Azure supports can be found here: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt",
             "enum": [
-              "aa",
-              "ab",
-              "ae",
-              "af",
-              "ak",
-              "am",
-              "an",
-              "ar",
-              "as",
-              "av",
-              "ay",
-              "az",
-              "ba",
-              "be",
-              "bg",
-              "bh",
-              "bi",
-              "bm",
-              "bn",
-              "bo",
-              "br",
-              "bs",
-              "ca",
-              "ce",
-              "ch",
-              "co",
-              "cr",
-              "cs",
-              "cu",
-              "cv",
-              "cy",
-              "da",
-              "de",
-              "dv",
-              "dz",
-              "ee",
-              "el",
-              "en",
-              "eo",
-              "es",
-              "et",
-              "eu",
-              "fa",
-              "ff",
-              "fi",
-              "fj",
-              "fo",
-              "fr",
-              "fy",
-              "ga",
-              "gd",
-              "gl",
-              "gn",
-              "gu",
-              "gv",
-              "ha",
-              "he",
-              "hi",
-              "ho",
-              "hr",
-              "ht",
-              "hu",
-              "hy",
-              "hz",
-              "ia",
-              "id",
-              "ie",
-              "ig",
-              "ii",
-              "ik",
-              "io",
-              "is",
-              "it",
+              "af-ZA",
+              "am-ET",
+              "ar-AE",
+              "ar-BH",
+              "ar-DZ",
+              "ar-EG",
+              "ar-IL",
+              "ar-IQ",
+              "ar-JO",
+              "ar-KW",
+              "ar-LB",
+              "ar-LY",
+              "ar-MA",
+              "ar-OM",
+              "ar-PS",
+              "ar-QA",
+              "ar-SA",
+              "ar-SY",
+              "ar-TN",
+              "ar-YE",
+              "az-AZ",
+              "bg-BG",
+              "bn-IN",
+              "bs-BA",
+              "ca-ES",
+              "cs-CZ",
+              "cy-GB",
+              "da-DK",
+              "de-AT",
+              "de-CH",
+              "de-DE",
+              "el-GR",
+              "en-AU",
+              "en-CA",
+              "en-GB",
+              "en-GH",
+              "en-HK",
+              "en-IE",
+              "en-IN",
+              "en-KE",
+              "en-NG",
+              "en-NZ",
+              "en-PH",
+              "en-SG",
+              "en-TZ",
+              "en-US",
+              "en-ZA",
+              "es-AR",
+              "es-BO",
+              "es-CL",
+              "es-CO",
+              "es-CR",
+              "es-CU",
+              "es-DO",
+              "es-EC",
+              "es-ES",
+              "es-GQ",
+              "es-GT",
+              "es-HN",
+              "es-MX",
+              "es-NI",
+              "es-PA",
+              "es-PE",
+              "es-PR",
+              "es-PY",
+              "es-SV",
+              "es-US",
+              "es-UY",
+              "es-VE",
+              "et-EE",
+              "eu-ES",
+              "fa-IR",
+              "fi-FI",
+              "fil-PH",
+              "fr-BE",
+              "fr-CA",
+              "fr-CH",
+              "fr-FR",
+              "ga-IE",
+              "gl-ES",
+              "gu-IN",
+              "he-IL",
+              "hi-IN",
+              "hr-HR",
+              "hu-HU",
+              "hy-AM",
+              "id-ID",
+              "is-IS",
+              "it-CH",
+              "it-IT",
+              "ja-JP",
+              "jv-ID",
+              "ka-GE",
+              "kk-KZ",
+              "km-KH",
+              "kn-IN",
+              "ko-KR",
+              "lo-LA",
+              "lt-LT",
+              "lv-LV",
+              "mk-MK",
+              "ml-IN",
+              "mn-MN",
+              "mr-IN",
+              "ms-MY",
+              "mt-MT",
+              "my-MM",
+              "nb-NO",
+              "ne-NP",
+              "nl-BE",
+              "nl-NL",
+              "pa-IN",
+              "pl-PL",
+              "ps-AF",
+              "pt-BR",
+              "pt-PT",
+              "ro-RO",
+              "ru-RU",
+              "si-LK",
+              "sk-SK",
+              "sl-SI",
+              "so-SO",
+              "sq-AL",
+              "sr-RS",
+              "sv-SE",
+              "sw-KE",
+              "sw-TZ",
+              "ta-IN",
+              "te-IN",
+              "th-TH",
+              "tr-TR",
+              "uk-UA",
+              "ur-IN",
+              "uz-UZ",
+              "vi-VN",
+              "wuu-CN",
+              "yue-CN",
+              "zh-CN",
+              "zh-CN-shandong",
+              "zh-CN-sichuan",
+              "zh-HK",
+              "zh-TW",
+              "zu-ZA"
+            ]
+          },
+          "segmentationStrategy": {
+            "type": "string",
+            "description": "Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation.",
+            "enum": [
+              "Default",
+              "Time",
+              "Semantic"
+            ]
+          },
+          "segmentationSilenceTimeoutMs": {
+            "type": "number",
+            "description": "Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech.",
+            "minimum": 100,
+            "maximum": 5000
+          },
+          "segmentationMaximumTimeMs": {
+            "type": "number",
+            "description": "Maximum duration a segment can reach before being cut off when using time-based segmentation.",
+            "minimum": 20000,
+            "maximum": 70000
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+              }
+            ]
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "CartesiaTranscriber": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "cartesia"
+            ]
+          },
+          "model": {
+            "type": "string",
+            "enum": [
+              "ink-whisper"
+            ]
+          },
+          "language": {
+            "type": "string",
+            "enum": [
+              "aa",
+              "ab",
+              "ae",
+              "af",
+              "ak",
+              "am",
+              "an",
+              "ar",
+              "as",
+              "av",
+              "ay",
+              "az",
+              "ba",
+              "be",
+              "bg",
+              "bh",
+              "bi",
+              "bm",
+              "bn",
+              "bo",
+              "br",
+              "bs",
+              "ca",
+              "ce",
+              "ch",
+              "co",
+              "cr",
+              "cs",
+              "cu",
+              "cv",
+              "cy",
+              "da",
+              "de",
+              "dv",
+              "dz",
+              "ee",
+              "el",
+              "en",
+              "eo",
+              "es",
+              "et",
+              "eu",
+              "fa",
+              "ff",
+              "fi",
+              "fj",
+              "fo",
+              "fr",
+              "fy",
+              "ga",
+              "gd",
+              "gl",
+              "gn",
+              "gu",
+              "gv",
+              "ha",
+              "he",
+              "hi",
+              "ho",
+              "hr",
+              "ht",
+              "hu",
+              "hy",
+              "hz",
+              "ia",
+              "id",
+              "ie",
+              "ig",
+              "ii",
+              "ik",
+              "io",
+              "is",
+              "it",
               "iu",
               "ja",
               "jv",
@@ -6659,166 +6839,267 @@
               "zh",
               "zu"
             ]
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider"
         ]
       },
-      "FallbackGladiaTranscriber": {
+      "BackoffPlan": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "object",
+            "description": "This is the type of backoff plan to use. Defaults to fixed.\n\n@default fixed",
+            "enum": [
+              "fixed",
+              "exponential"
+            ],
+            "example": "fixed"
+          },
+          "maxRetries": {
+            "type": "number",
+            "description": "This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries).\n\n@default 0",
+            "minimum": 0,
+            "maximum": 10,
+            "example": 0
+          },
+          "baseDelaySeconds": {
+            "type": "number",
+            "description": "This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.",
+            "minimum": 0,
+            "maximum": 10,
+            "example": 1
+          }
+        },
+        "required": [
+          "type",
+          "maxRetries",
+          "baseDelaySeconds"
+        ]
+      },
+      "Server": {
+        "type": "object",
+        "properties": {
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is the timeout in seconds for the request. Defaults to 20 seconds.\n\n@default 20",
+            "minimum": 1,
+            "maximum": 300,
+            "example": 20
+          },
+          "url": {
+            "type": "string",
+            "description": "This is where the request will be sent."
+          },
+          "headers": {
+            "type": "object",
+            "description": "These are the headers to include in the request.\n\nEach key-value pair represents a header name and its value."
+          },
+          "backoffPlan": {
+            "description": "This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried).\n\n@default undefined (the request will not be retried)",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/BackoffPlan"
+              }
+            ]
+          }
+        }
+      },
+      "CustomTranscriber": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
-            "description": "This is the transcription provider that will be used.",
+            "description": "This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.",
             "enum": [
-              "gladia"
+              "custom-transcriber"
             ]
           },
-          "model": {
-            "description": "This is the Gladia model that will be used. Default is 'fast'",
-            "oneOf": [
+          "server": {
+            "description": "This is where the transcription request will be sent.\n\nUsage:\n1. Vapi will initiate a websocket connection with `server.url`.\n\n2. Vapi will send an initial text frame with the sample rate. Format:\n```\n    {\n      \"type\": \"start\",\n      \"encoding\": \"linear16\", // 16-bit raw PCM format\n      \"container\": \"raw\",\n      \"sampleRate\": {{sampleRate}},\n      \"channels\": 2 // customer is channel 0, assistant is channel 1\n    }\n```\n\n3. Vapi will send the audio data in 16-bit raw PCM format as binary frames.\n\n4. You can read the messages something like this:\n```\nws.on('message', (data, isBinary) => {\n  if (isBinary) {\n    pcmBuffer = Buffer.concat([pcmBuffer, data]);\n    console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);\n  } else {\n    console.log('Received message:', JSON.parse(data.toString()));\n  }\n});\n```\n\n5. You will respond with transcriptions as you have them. Format:\n```\n {\n    \"type\": \"transcriber-response\",\n    \"transcription\": \"Hello, world!\",\n    \"channel\": \"customer\" | \"assistant\"\n }\n```",
+            "allOf": [
               {
-                "enum": [
-                  "fast",
-                  "accurate"
-                ]
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "languageBehaviour": {
-            "description": "Defines how the transcription model detects the audio language. Default value is 'automatic single language'.",
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+              }
+            ]
+          }
+        },
+        "required": [
+          "provider",
+          "server"
+        ]
+      },
+      "DeepgramTranscriber": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "description": "This is the transcription provider that will be used.",
+            "enum": [
+              "deepgram"
+            ]
+          },
+          "model": {
+            "description": "This is the Deepgram model that will be used. A list of models can be found here: https://developers.deepgram.com/docs/models-languages-overview",
             "oneOf": [
               {
                 "type": "string",
                 "enum": [
-                  "manual",
-                  "automatic single language",
-                  "automatic multiple languages"
+                  "nova-3",
+                  "nova-3-general",
+                  "nova-3-medical",
+                  "nova-2",
+                  "nova-2-general",
+                  "nova-2-meeting",
+                  "nova-2-phonecall",
+                  "nova-2-finance",
+                  "nova-2-conversationalai",
+                  "nova-2-voicemail",
+                  "nova-2-video",
+                  "nova-2-medical",
+                  "nova-2-drivethru",
+                  "nova-2-automotive",
+                  "nova",
+                  "nova-general",
+                  "nova-phonecall",
+                  "nova-medical",
+                  "enhanced",
+                  "enhanced-general",
+                  "enhanced-meeting",
+                  "enhanced-phonecall",
+                  "enhanced-finance",
+                  "base",
+                  "base-general",
+                  "base-meeting",
+                  "base-phonecall",
+                  "base-finance",
+                  "base-conversationalai",
+                  "base-voicemail",
+                  "base-video",
+                  "whisper"
                 ]
+              },
+              {
+                "type": "string"
               }
             ]
           },
           "language": {
             "type": "string",
-            "description": "Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.",
+            "description": "This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview",
             "enum": [
-              "af",
-              "sq",
-              "am",
               "ar",
-              "hy",
-              "as",
               "az",
               "ba",
-              "eu",
-              "be",
-              "bn",
-              "bs",
-              "br",
               "bg",
+              "br",
               "ca",
-              "zh",
-              "hr",
               "cs",
               "da",
-              "nl",
+              "da-DK",
+              "de",
+              "de-CH",
+              "el",
               "en",
+              "en-AU",
+              "en-GB",
+              "en-IN",
+              "en-NZ",
+              "en-US",
+              "es",
+              "es-419",
+              "es-LATAM",
               "et",
-              "fo",
+              "eu",
               "fi",
               "fr",
-              "gl",
-              "ka",
-              "de",
-              "el",
-              "gu",
-              "ht",
+              "fr-CA",
               "ha",
               "haw",
               "he",
               "hi",
+              "hi-Latn",
               "hu",
-              "is",
               "id",
+              "is",
               "it",
               "ja",
-              "jv",
+              "jw",
               "kn",
-              "kk",
-              "km",
               "ko",
-              "lo",
-              "la",
-              "lv",
+              "ko-KR",
               "ln",
               "lt",
-              "lb",
+              "lv",
               "mk",
-              "mg",
               "ms",
-              "ml",
-              "mt",
-              "mi",
-              "mr",
-              "mn",
-              "my",
-              "ne",
+              "multi",
+              "nl",
+              "nl-BE",
               "no",
-              "nn",
-              "oc",
-              "ps",
-              "fa",
               "pl",
               "pt",
-              "pa",
+              "pt-BR",
               "ro",
               "ru",
-              "sa",
-              "sr",
-              "sn",
-              "sd",
-              "si",
               "sk",
               "sl",
+              "sn",
               "so",
-              "es",
+              "sr",
               "su",
-              "sw",
               "sv",
-              "tl",
-              "tg",
+              "sv-SE",
               "ta",
-              "tt",
-              "te",
+              "taq",
               "th",
-              "bo",
+              "th-TH",
               "tr",
-              "tk",
+              "tt",
               "uk",
               "ur",
-              "uz",
               "vi",
-              "cy",
-              "yi",
-              "yo"
+              "yo",
+              "zh",
+              "zh-CN",
+              "zh-HK",
+              "zh-Hans",
+              "zh-Hant",
+              "zh-TW"
             ]
           },
-          "transcriptionHint": {
-            "type": "string",
-            "description": "Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored.\n⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.",
-            "maxLength": 600,
-            "example": "custom vocabulary"
-          },
-          "prosody": {
+          "smartFormat": {
             "type": "boolean",
-            "description": "If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)… Default value is false.",
+            "description": "This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes format numbers as times but it's getting better.",
             "example": false
           },
-          "audioEnhancer": {
+          "mipOptOut": {
             "type": "boolean",
-            "description": "If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.",
-            "example": false
+            "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false",
+            "example": false,
+            "default": false
+          },
+          "numerals": {
+            "type": "boolean",
+            "description": "If set to true, this will cause deepgram to convert spoken numbers to literal numerals. For example, \"my phone number is nine-seven-two...\" would become \"my phone number is 972...\"\n\n@default false",
+            "example": false
           },
           "confidenceThreshold": {
             "type": "number",
@@ -6826,294 +7107,34 @@
             "minimum": 0,
             "maximum": 1,
             "example": 0.4
-          }
-        },
-        "required": [
-          "provider"
-        ]
-      },
-      "FallbackSpeechmaticsTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "speechmatics"
-            ]
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for the transcription.",
-            "enum": [
-              "default"
-            ]
-          },
-          "language": {
-            "type": "string",
-            "enum": [
-              "auto",
-              "ar",
-              "ba",
-              "eu",
-              "be",
-              "bn",
-              "bg",
-              "yue",
-              "ca",
-              "hr",
-              "cs",
-              "da",
-              "nl",
-              "en",
-              "eo",
-              "et",
-              "fi",
-              "fr",
-              "gl",
-              "de",
-              "el",
-              "he",
-              "hi",
-              "hu",
-              "id",
-              "ia",
-              "ga",
-              "it",
-              "ja",
-              "ko",
-              "lv",
-              "lt",
-              "ms",
-              "mt",
-              "cmn",
-              "mr",
-              "mn",
-              "no",
-              "fa",
-              "pl",
-              "pt",
-              "ro",
-              "ru",
-              "sk",
-              "sl",
-              "es",
-              "sw",
-              "sv",
-              "ta",
-              "th",
-              "tr",
-              "uk",
-              "ur",
-              "ug",
-              "vi",
-              "cy"
-            ]
-          }
-        },
-        "required": [
-          "provider"
-        ]
-      },
-      "FallbackTalkscriberTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "talkscriber"
-            ]
           },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for the transcription.",
-            "enum": [
-              "whisper"
-            ]
+          "keywords": {
+            "description": "These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here.",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "pattern": "/^\\p{L}[\\p{L}\\d]*(?::[+-]?\\d+)?$/u"
+            }
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be set for the transcription. The list of languages Whisper supports can be found here: https://github.com/openai/whisper/blob/main/whisper/tokenizer.py",
-            "enum": [
-              "en",
-              "zh",
-              "de",
-              "es",
-              "ru",
-              "ko",
-              "fr",
-              "ja",
-              "pt",
-              "tr",
-              "pl",
-              "ca",
-              "nl",
-              "ar",
-              "sv",
-              "it",
-              "id",
-              "hi",
-              "fi",
-              "vi",
-              "he",
-              "uk",
-              "el",
-              "ms",
-              "cs",
-              "ro",
-              "da",
-              "hu",
-              "ta",
-              "no",
-              "th",
-              "ur",
-              "hr",
-              "bg",
-              "lt",
-              "la",
-              "mi",
-              "ml",
-              "cy",
-              "sk",
-              "te",
-              "fa",
-              "lv",
-              "bn",
-              "sr",
-              "az",
-              "sl",
-              "kn",
-              "et",
-              "mk",
-              "br",
-              "eu",
-              "is",
-              "hy",
-              "ne",
-              "mn",
-              "bs",
-              "kk",
-              "sq",
-              "sw",
-              "gl",
-              "mr",
-              "pa",
-              "si",
-              "km",
-              "sn",
-              "yo",
-              "so",
-              "af",
-              "oc",
-              "ka",
-              "be",
-              "tg",
-              "sd",
-              "gu",
-              "am",
-              "yi",
-              "lo",
-              "uz",
-              "fo",
-              "ht",
-              "ps",
-              "tk",
-              "nn",
-              "mt",
-              "sa",
-              "lb",
-              "my",
-              "bo",
-              "tl",
-              "mg",
-              "as",
-              "tt",
-              "haw",
-              "ln",
-              "ha",
-              "ba",
-              "jw",
-              "su",
-              "yue"
-            ]
-          }
-        },
-        "required": [
-          "provider"
-        ]
-      },
-      "FallbackGoogleTranscriber": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the transcription provider that will be used.",
-            "enum": [
-              "google"
-            ]
+          "keyterm": {
+            "description": "Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for the transcription.",
-            "enum": [
-              "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"
-            ]
+          "endpointing": {
+            "type": "number",
+            "description": "This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth documentation here: https://developers.deepgram.com/docs/endpointing.\n\nHere are the most important bits:\n- Defaults to 10. This is recommended for most use cases to optimize for latency.\n- 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word utterances. For those uses cases, it's recommended to try 300. It will add a bit of latency but the quality and reliability of the experience will be better.\n- If neither 10 nor 300 work, contact support@vapi.ai and we'll find another solution.\n\n@default 10",
+            "minimum": 10,
+            "maximum": 500
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be set for the transcription.",
-            "enum": [
-              "Multilingual",
-              "Arabic",
-              "Bengali",
-              "Bulgarian",
-              "Chinese",
-              "Croatian",
-              "Czech",
-              "Danish",
-              "Dutch",
-              "English",
-              "Estonian",
-              "Finnish",
-              "French",
-              "German",
-              "Greek",
-              "Hebrew",
-              "Hindi",
-              "Hungarian",
-              "Indonesian",
-              "Italian",
-              "Japanese",
-              "Korean",
-              "Latvian",
-              "Lithuanian",
-              "Norwegian",
-              "Polish",
-              "Portuguese",
-              "Romanian",
-              "Russian",
-              "Serbian",
-              "Slovak",
-              "Slovenian",
-              "Spanish",
-              "Swahili",
-              "Swedish",
-              "Thai",
-              "Turkish",
-              "Ukrainian",
-              "Vietnamese"
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+              }
             ]
           }
         },
@@ -7121,131 +7142,23 @@
           "provider"
         ]
       },
-      "FallbackOpenAITranscriber": {
+      "ElevenLabsTranscriber": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "description": "This is the transcription provider that will be used.",
             "enum": [
-              "openai"
+              "11labs"
             ]
           },
           "model": {
             "type": "string",
             "description": "This is the model that will be used for the transcription.",
             "enum": [
-              "gpt-4o-transcribe",
-              "gpt-4o-mini-transcribe"
-            ]
-          },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be set for the transcription.",
-            "enum": [
-              "af",
-              "ar",
-              "hy",
-              "az",
-              "be",
-              "bs",
-              "bg",
-              "ca",
-              "zh",
-              "hr",
-              "cs",
-              "da",
-              "nl",
-              "en",
-              "et",
-              "fi",
-              "fr",
-              "gl",
-              "de",
-              "el",
-              "he",
-              "hi",
-              "hu",
-              "is",
-              "id",
-              "it",
-              "ja",
-              "kn",
-              "kk",
-              "ko",
-              "lv",
-              "lt",
-              "mk",
-              "ms",
-              "mr",
-              "mi",
-              "ne",
-              "no",
-              "fa",
-              "pl",
-              "pt",
-              "ro",
-              "ru",
-              "sr",
-              "sk",
-              "sl",
-              "es",
-              "sw",
-              "sv",
-              "tl",
-              "ta",
-              "th",
-              "tr",
-              "uk",
-              "ur",
-              "vi",
-              "cy"
-            ]
-          }
-        },
-        "required": [
-          "provider",
-          "model"
-        ]
-      },
-      "LangfuseObservabilityPlan": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "langfuse"
-            ]
-          },
-          "tags": {
-            "description": "This is an array of tags to be added to the Langfuse trace. Tags allow you to categorize and filter traces. https://langfuse.com/docs/tracing-features/tags",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "metadata": {
-            "type": "object",
-            "description": "This is a JSON object that will be added to the Langfuse trace. Traces can be enriched with metadata to better understand your users, application, and experiments. https://langfuse.com/docs/tracing-features/metadata\nBy default it includes the call metadata, assistant metadata, and assistant overrides."
-          }
-        },
-        "required": [
-          "provider",
-          "tags"
-        ]
-      },
-      "TextContent": {
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string",
-            "enum": [
-              "text"
+              "scribe_v1"
             ]
           },
-          "text": {
-            "type": "string"
-          },
           "language": {
             "type": "string",
             "enum": [
@@ -7435,3264 +7348,4001 @@
               "zh",
               "zu"
             ]
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+              }
+            ]
           }
         },
         "required": [
-          "type",
-          "text",
-          "language"
+          "provider"
         ]
       },
-      "Condition": {
+      "GladiaTranscriber": {
         "type": "object",
         "properties": {
-          "operator": {
+          "provider": {
             "type": "string",
-            "description": "This is the operator you want to use to compare the parameter and value.",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "eq",
-              "neq",
-              "gt",
-              "gte",
-              "lt",
-              "lte"
+              "gladia"
             ]
           },
-          "param": {
-            "type": "string",
-            "description": "This is the name of the parameter that you want to check.",
-            "maxLength": 1000
+          "model": {
+            "description": "This is the Gladia model that will be used. Default is 'fast'",
+            "oneOf": [
+              {
+                "enum": [
+                  "fast",
+                  "accurate",
+                  "solaria-1"
+                ]
+              }
+            ]
           },
-          "value": {
-            "type": "object",
-            "description": "This is the value you want to compare against the parameter.",
-            "maxLength": 1000
-          }
-        },
-        "required": [
-          "operator",
-          "param",
-          "value"
-        ]
-      },
-      "ToolMessageStart": {
-        "type": "object",
-        "properties": {
-          "contents": {
-            "type": "array",
-            "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TextContent",
-                  "title": "Text"
-                }
-              ]
-            }
+          "languageBehaviour": {
+            "description": "Defines how the transcription model detects the audio language. Default value is 'automatic single language'.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "manual",
+                  "automatic single language",
+                  "automatic multiple languages"
+                ]
+              }
+            ]
           },
-          "type": {
+          "language": {
             "type": "string",
+            "description": "Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.",
             "enum": [
-              "request-start"
-            ],
-            "description": "This message is triggered when the tool call starts.\n\nThis message is never triggered for async tools.\n\nIf this message is not provided, one of the default filler messages \"Hold on a sec\", \"One moment\", \"Just a sec\", \"Give me a moment\" or \"This'll just take a sec\" will be used."
-          },
-          "blocking": {
-            "type": "boolean",
-            "description": "This is an optional boolean that if true, the tool call will only trigger after the message is spoken. Default is false.\n\n@default false",
-            "example": false,
-            "default": false
-          },
-          "content": {
-            "type": "string",
-            "description": "This is the content that the assistant says when this message is triggered.",
-            "maxLength": 1000
-          },
-          "conditions": {
-            "description": "This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Condition"
-            }
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "ToolMessageComplete": {
-        "type": "object",
-        "properties": {
-          "contents": {
-            "type": "array",
-            "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TextContent",
-                  "title": "Text"
-                }
-              ]
-            }
+              "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"
+            ]
           },
-          "type": {
+          "languages": {
             "type": "string",
-            "description": "This message is triggered when the tool call is complete.\n\nThis message is triggered immediately without waiting for your server to respond for async tool calls.\n\nIf this message is not provided, the model will be requested to respond.\n\nIf this message is provided, only this message will be spoken and the model will not be requested to come up with a response. It's an exclusive OR.",
+            "description": "Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'.",
             "enum": [
-              "request-complete"
+              "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"
             ]
           },
-          "role": {
+          "transcriptionHint": {
             "type": "string",
-            "description": "This is optional and defaults to \"assistant\".\n\nWhen role=assistant, `content` is said out loud.\n\nWhen role=system, `content` is passed to the model in a system message. Example:\n    system: default one\n    assistant:\n    user:\n    assistant:\n    user:\n    assistant:\n    user:\n    assistant: tool called\n    tool: your server response\n    <--- system prompt as hint\n    ---> model generates response which is spoken\nThis is useful when you want to provide a hint to the model about what to say next.",
-            "enum": [
-              "assistant",
-              "system"
-            ]
+            "description": "Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored.\n⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.",
+            "maxLength": 600,
+            "example": "custom vocabulary"
           },
-          "endCallAfterSpokenEnabled": {
+          "prosody": {
             "type": "boolean",
-            "description": "This is an optional boolean that if true, the call will end after the message is spoken. Default is false.\n\nThis is ignored if `role` is set to `system`.\n\n@default false",
+            "description": "If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)… Default value is false.",
             "example": false
           },
-          "content": {
-            "type": "string",
-            "description": "This is the content that the assistant says when this message is triggered.",
-            "maxLength": 1000
-          },
-          "conditions": {
-            "description": "This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Condition"
-            }
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "ToolMessageFailed": {
-        "type": "object",
-        "properties": {
-          "contents": {
-            "type": "array",
-            "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TextContent",
-                  "title": "Text"
-                }
-              ]
-            }
-          },
-          "type": {
-            "type": "string",
-            "description": "This message is triggered when the tool call fails.\n\nThis message is never triggered for async tool calls.\n\nIf this message is not provided, the model will be requested to respond.\n\nIf this message is provided, only this message will be spoken and the model will not be requested to come up with a response. It's an exclusive OR.",
-            "enum": [
-              "request-failed"
-            ]
-          },
-          "endCallAfterSpokenEnabled": {
+          "audioEnhancer": {
             "type": "boolean",
-            "description": "This is an optional boolean that if true, the call will end after the message is spoken. Default is false.\n\n@default false",
+            "description": "If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.",
             "example": false
           },
-          "content": {
-            "type": "string",
-            "description": "This is the content that the assistant says when this message is triggered.",
-            "maxLength": 1000
+          "confidenceThreshold": {
+            "type": "number",
+            "description": "Transcripts below this confidence threshold will be discarded.\n\n@default 0.4",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0.4
           },
-          "conditions": {
-            "description": "This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Condition"
-            }
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+              }
+            ]
           }
         },
         "required": [
-          "type"
+          "provider"
         ]
       },
-      "ToolMessageDelayed": {
+      "SpeechmaticsTranscriber": {
         "type": "object",
         "properties": {
-          "contents": {
-            "type": "array",
-            "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TextContent",
-                  "title": "Text"
-                }
-              ]
-            }
-          },
-          "type": {
+          "provider": {
             "type": "string",
-            "description": "This message is triggered when the tool call is delayed.\n\nThere are the two things that can trigger this message:\n1. The user talks with the assistant while your server is processing the request. Default is \"Sorry, a few more seconds.\"\n2. The server doesn't respond within `timingMilliseconds`.\n\nThis message is never triggered for async tool calls.",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "request-response-delayed"
+              "speechmatics"
             ]
           },
-          "timingMilliseconds": {
-            "type": "number",
-            "minimum": 100,
-            "maximum": 120000,
-            "example": 1000,
-            "description": "The number of milliseconds to wait for the server response before saying this message."
-          },
-          "content": {
-            "type": "string",
-            "description": "This is the content that the assistant says when this message is triggered.",
-            "maxLength": 1000
-          },
-          "conditions": {
-            "description": "This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Condition"
-            }
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "JsonSchema": {
-        "type": "object",
-        "properties": {
-          "type": {
+          "model": {
             "type": "string",
-            "description": "This is the type of output you'd like.\n\n`string`, `number`, `integer`, `boolean` are the primitive types and should be obvious.\n\n`array` and `object` are more interesting and quite powerful. They allow you to define nested structures.\n\nFor `array`, you can define the schema of the items in the array using the `items` property.\n\nFor `object`, you can define the properties of the object using the `properties` property.",
+            "description": "This is the model that will be used for the transcription.",
             "enum": [
-              "string",
-              "number",
-              "integer",
-              "boolean",
-              "array",
-              "object"
+              "default"
             ]
           },
-          "items": {
-            "type": "object",
-            "description": "This is required if the type is \"array\". This is the schema of the items in the array.\n\nThis is of type JsonSchema. However, Swagger doesn't support circular references."
-          },
-          "properties": {
-            "type": "object",
-            "description": "This is required if the type is \"object\". This specifies the properties of the object.\n\nThis is a map of string to JsonSchema. However, Swagger doesn't support circular references."
-          },
-          "description": {
-            "type": "string",
-            "description": "This is the description to help the model understand what it needs to output."
-          },
-          "required": {
-            "description": "This is a list of properties that are required.\n\nThis only makes sense if the type is \"object\".",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "regex": {
-            "type": "string",
-            "description": "This is a regex that will be used to validate data in question."
-          },
-          "value": {
-            "type": "string",
-            "description": "This the value that will be used in filling the property."
-          },
-          "target": {
+          "language": {
             "type": "string",
-            "description": "This the target variable that will be filled with the value of this property."
+            "enum": [
+              "auto",
+              "ar",
+              "ba",
+              "eu",
+              "be",
+              "bn",
+              "bg",
+              "yue",
+              "ca",
+              "hr",
+              "cs",
+              "da",
+              "nl",
+              "en",
+              "eo",
+              "et",
+              "fi",
+              "fr",
+              "gl",
+              "de",
+              "el",
+              "he",
+              "hi",
+              "hu",
+              "id",
+              "ia",
+              "ga",
+              "it",
+              "ja",
+              "ko",
+              "lv",
+              "lt",
+              "ms",
+              "mt",
+              "cmn",
+              "mr",
+              "mn",
+              "no",
+              "fa",
+              "pl",
+              "pt",
+              "ro",
+              "ru",
+              "sk",
+              "sl",
+              "es",
+              "sw",
+              "sv",
+              "ta",
+              "th",
+              "tr",
+              "uk",
+              "ur",
+              "ug",
+              "vi",
+              "cy"
+            ]
           },
-          "enum": {
-            "description": "This array specifies the allowed values that can be used to restrict the output of the model.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
+              }
+            ]
           }
         },
         "required": [
-          "type"
+          "provider"
         ]
       },
-      "OpenAIFunctionParameters": {
+      "TalkscriberTranscriber": {
         "type": "object",
         "properties": {
-          "type": {
+          "provider": {
             "type": "string",
-            "description": "This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties.",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "object"
+              "talkscriber"
             ]
           },
-          "properties": {
-            "type": "object",
-            "description": "This provides a description of the properties required by the function.\nJSON Schema can be used to specify expectations for each property.\nRefer to [this doc](https://ajv.js.org/json-schema.html#json-data-type) for a comprehensive guide on JSON Schema.",
-            "additionalProperties": {
-              "$ref": "#/components/schemas/JsonSchema"
-            }
+          "model": {
+            "type": "string",
+            "description": "This is the model that will be used for the transcription.",
+            "enum": [
+              "whisper"
+            ]
           },
-          "required": {
-            "description": "This specifies the properties that are required by the function.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          }
-        },
-        "required": [
-          "type",
-          "properties"
-        ]
-      },
-      "OpenAIFunction": {
-        "type": "object",
-        "properties": {
-          "strict": {
-            "type": "boolean",
-            "description": "This is a boolean that controls whether to enable strict schema adherence when generating the function call. If set to true, the model will follow the exact schema defined in the parameters field. Only a subset of JSON Schema is supported when strict is true. Learn more about Structured Outputs in the [OpenAI guide](https://openai.com/index/introducing-structured-outputs-in-the-api/).\n\n@default false",
-            "default": false
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the the name of the function to be called.\n\nMust be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.",
-            "maxLength": 64,
-            "pattern": "/^[a-zA-Z0-9_-]{1,64}$/"
-          },
-          "description": {
+          "language": {
             "type": "string",
-            "description": "This is the description of what the function does, used by the AI to choose when and how to call the function.",
-            "maxLength": 1000
+            "description": "This is the language that will be set for the transcription. The list of languages Whisper supports can be found here: https://github.com/openai/whisper/blob/main/whisper/tokenizer.py",
+            "enum": [
+              "en",
+              "zh",
+              "de",
+              "es",
+              "ru",
+              "ko",
+              "fr",
+              "ja",
+              "pt",
+              "tr",
+              "pl",
+              "ca",
+              "nl",
+              "ar",
+              "sv",
+              "it",
+              "id",
+              "hi",
+              "fi",
+              "vi",
+              "he",
+              "uk",
+              "el",
+              "ms",
+              "cs",
+              "ro",
+              "da",
+              "hu",
+              "ta",
+              "no",
+              "th",
+              "ur",
+              "hr",
+              "bg",
+              "lt",
+              "la",
+              "mi",
+              "ml",
+              "cy",
+              "sk",
+              "te",
+              "fa",
+              "lv",
+              "bn",
+              "sr",
+              "az",
+              "sl",
+              "kn",
+              "et",
+              "mk",
+              "br",
+              "eu",
+              "is",
+              "hy",
+              "ne",
+              "mn",
+              "bs",
+              "kk",
+              "sq",
+              "sw",
+              "gl",
+              "mr",
+              "pa",
+              "si",
+              "km",
+              "sn",
+              "yo",
+              "so",
+              "af",
+              "oc",
+              "ka",
+              "be",
+              "tg",
+              "sd",
+              "gu",
+              "am",
+              "yi",
+              "lo",
+              "uz",
+              "fo",
+              "ht",
+              "ps",
+              "tk",
+              "nn",
+              "mt",
+              "sa",
+              "lb",
+              "my",
+              "bo",
+              "tl",
+              "mg",
+              "as",
+              "tt",
+              "haw",
+              "ln",
+              "ha",
+              "ba",
+              "jw",
+              "su",
+              "yue"
+            ]
           },
-          "parameters": {
-            "description": "These are the parameters the functions accepts, described as a JSON Schema object.\n\nSee the [OpenAI guide](https://platform.openai.com/docs/guides/function-calling) for examples, and the [JSON Schema reference](https://json-schema.org/understanding-json-schema) for documentation about the format.\n\nOmitting parameters defines a function with an empty parameter list.",
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunctionParameters"
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
               }
             ]
           }
         },
         "required": [
-          "name"
+          "provider"
         ]
       },
-      "CreateDtmfToolDTO": {
+      "GoogleTranscriber": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
+          "provider": {
+            "type": "string",
+            "description": "This is the transcription provider that will be used.",
+            "enum": [
+              "google"
+            ]
           },
-          "type": {
+          "model": {
             "type": "string",
+            "description": "This is the model that will be used for the transcription.",
             "enum": [
-              "dtmf"
-            ],
-            "description": "The type of tool. \"dtmf\" for DTMF tool."
+              "gemini-2.5-pro",
+              "gemini-2.5-flash",
+              "gemini-2.5-flash-lite",
+              "gemini-2.0-flash-thinking-exp",
+              "gemini-2.0-pro-exp-02-05",
+              "gemini-2.0-flash",
+              "gemini-2.0-flash-lite",
+              "gemini-2.0-flash-exp",
+              "gemini-2.0-flash-realtime-exp",
+              "gemini-1.5-flash",
+              "gemini-1.5-flash-002",
+              "gemini-1.5-pro",
+              "gemini-1.5-pro-002",
+              "gemini-1.0-pro"
+            ]
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
+          "language": {
+            "type": "string",
+            "description": "This is the language that will be set for the transcription.",
+            "enum": [
+              "Multilingual",
+              "Arabic",
+              "Bengali",
+              "Bulgarian",
+              "Chinese",
+              "Croatian",
+              "Czech",
+              "Danish",
+              "Dutch",
+              "English",
+              "Estonian",
+              "Finnish",
+              "French",
+              "German",
+              "Greek",
+              "Hebrew",
+              "Hindi",
+              "Hungarian",
+              "Indonesian",
+              "Italian",
+              "Japanese",
+              "Korean",
+              "Latvian",
+              "Lithuanian",
+              "Norwegian",
+              "Polish",
+              "Portuguese",
+              "Romanian",
+              "Russian",
+              "Serbian",
+              "Slovak",
+              "Slovenian",
+              "Spanish",
+              "Swahili",
+              "Swedish",
+              "Thai",
+              "Turkish",
+              "Ukrainian",
+              "Vietnamese"
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
               }
             ]
           }
         },
         "required": [
-          "type"
+          "provider"
         ]
       },
-      "CreateEndCallToolDTO": {
+      "OpenAITranscriber": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
+          "provider": {
+            "type": "string",
+            "description": "This is the transcription provider that will be used.",
+            "enum": [
+              "openai"
+            ]
           },
-          "type": {
+          "model": {
             "type": "string",
+            "description": "This is the model that will be used for the transcription.",
             "enum": [
-              "endCall"
-            ],
-            "description": "The type of tool. \"endCall\" for End Call tool."
+              "gpt-4o-transcribe",
+              "gpt-4o-mini-transcribe"
+            ]
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
+          "language": {
+            "type": "string",
+            "description": "This is the language that will be set for the transcription.",
+            "enum": [
+              "af",
+              "ar",
+              "hy",
+              "az",
+              "be",
+              "bs",
+              "bg",
+              "ca",
+              "zh",
+              "hr",
+              "cs",
+              "da",
+              "nl",
+              "en",
+              "et",
+              "fi",
+              "fr",
+              "gl",
+              "de",
+              "el",
+              "he",
+              "hi",
+              "hu",
+              "is",
+              "id",
+              "it",
+              "ja",
+              "kn",
+              "kk",
+              "ko",
+              "lv",
+              "lt",
+              "mk",
+              "ms",
+              "mr",
+              "mi",
+              "ne",
+              "no",
+              "fa",
+              "pl",
+              "pt",
+              "ro",
+              "ru",
+              "sr",
+              "sk",
+              "sl",
+              "es",
+              "sw",
+              "sv",
+              "tl",
+              "ta",
+              "th",
+              "tr",
+              "uk",
+              "ur",
+              "vi",
+              "cy"
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/FallbackTranscriberPlan"
               }
             ]
           }
         },
         "required": [
-          "type"
+          "provider",
+          "model"
         ]
       },
-      "CreateVoicemailToolDTO": {
+      "FallbackAssemblyAITranscriber": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
+          "provider": {
             "type": "string",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "voicemail"
-            ],
-            "description": "The type of tool. \"voicemail\". This uses the model itself to determine if a voicemil was reached. Can be used alternatively/alongside with TwilioVoicemailDetection"
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
+              "assembly-ai"
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
+          "language": {
+            "type": "string",
+            "description": "This is the language that will be set for the transcription.",
+            "enum": [
+              "en"
             ]
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "CreateFunctionToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
+          },
+          "confidenceThreshold": {
+            "type": "number",
+            "description": "Transcripts below this confidence threshold will be discarded.\n\n@default 0.4",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0.4
+          },
+          "formatTurns": {
             "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
+            "description": "This enables formatting of transcripts.\n\n@default true",
+            "example": true
           },
-          "messages": {
+          "endOfTurnConfidenceThreshold": {
+            "type": "number",
+            "description": "This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected.\n\n@min 0\n@max 1\n@default 0.7",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0.7
+          },
+          "minEndOfTurnSilenceWhenConfident": {
+            "type": "number",
+            "description": "This is the minimum end of turn silence when confident in milliseconds.\n\n@default 160",
+            "minimum": 0,
+            "example": 160
+          },
+          "wordFinalizationMaxWaitTime": {
+            "type": "number",
+            "description": "This is the maximum wait time for word finalization in milliseconds.\n\n@default 160",
+            "minimum": 0,
+            "example": 160
+          },
+          "maxTurnSilence": {
+            "type": "number",
+            "description": "This is the maximum turn silence time in milliseconds.\n\n@default 400",
+            "minimum": 0,
+            "example": 400
+          },
+          "realtimeUrl": {
+            "type": "string",
+            "description": "The WebSocket URL that the transcriber connects to."
+          },
+          "wordBoost": {
+            "description": "Add up to 2500 characters of custom vocabulary.",
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
+              "type": "string",
+              "maxLength": 2500
             }
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "function"
-            ],
-            "description": "The type of tool. \"function\" for Function tool."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
+          "endUtteranceSilenceThreshold": {
+            "type": "number",
+            "description": "The duration of the end utterance silence threshold in milliseconds."
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "disablePartialTranscripts": {
+            "type": "boolean",
+            "description": "Disable partial transcripts.\nSet to `true` to not receive partial transcripts. Defaults to `false`."
           }
         },
         "required": [
-          "type"
+          "provider"
         ]
       },
-      "GhlToolMetadata": {
+      "FallbackAzureSpeechTranscriber": {
         "type": "object",
         "properties": {
-          "workflowId": {
-            "type": "string"
+          "provider": {
+            "type": "string",
+            "description": "This is the transcription provider that will be used.",
+            "enum": [
+              "azure"
+            ]
           },
-          "locationId": {
-            "type": "string"
-          }
-        }
-      },
-      "CreateGhlToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
+          "language": {
             "type": "string",
+            "description": "This is the language that will be set for the transcription. The list of languages Azure supports can be found here: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt",
             "enum": [
-              "ghl"
-            ],
-            "description": "The type of tool. \"ghl\" for GHL tool."
-          },
-          "metadata": {
-            "$ref": "#/components/schemas/GhlToolMetadata"
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
+              "af-ZA",
+              "am-ET",
+              "ar-AE",
+              "ar-BH",
+              "ar-DZ",
+              "ar-EG",
+              "ar-IL",
+              "ar-IQ",
+              "ar-JO",
+              "ar-KW",
+              "ar-LB",
+              "ar-LY",
+              "ar-MA",
+              "ar-OM",
+              "ar-PS",
+              "ar-QA",
+              "ar-SA",
+              "ar-SY",
+              "ar-TN",
+              "ar-YE",
+              "az-AZ",
+              "bg-BG",
+              "bn-IN",
+              "bs-BA",
+              "ca-ES",
+              "cs-CZ",
+              "cy-GB",
+              "da-DK",
+              "de-AT",
+              "de-CH",
+              "de-DE",
+              "el-GR",
+              "en-AU",
+              "en-CA",
+              "en-GB",
+              "en-GH",
+              "en-HK",
+              "en-IE",
+              "en-IN",
+              "en-KE",
+              "en-NG",
+              "en-NZ",
+              "en-PH",
+              "en-SG",
+              "en-TZ",
+              "en-US",
+              "en-ZA",
+              "es-AR",
+              "es-BO",
+              "es-CL",
+              "es-CO",
+              "es-CR",
+              "es-CU",
+              "es-DO",
+              "es-EC",
+              "es-ES",
+              "es-GQ",
+              "es-GT",
+              "es-HN",
+              "es-MX",
+              "es-NI",
+              "es-PA",
+              "es-PE",
+              "es-PR",
+              "es-PY",
+              "es-SV",
+              "es-US",
+              "es-UY",
+              "es-VE",
+              "et-EE",
+              "eu-ES",
+              "fa-IR",
+              "fi-FI",
+              "fil-PH",
+              "fr-BE",
+              "fr-CA",
+              "fr-CH",
+              "fr-FR",
+              "ga-IE",
+              "gl-ES",
+              "gu-IN",
+              "he-IL",
+              "hi-IN",
+              "hr-HR",
+              "hu-HU",
+              "hy-AM",
+              "id-ID",
+              "is-IS",
+              "it-CH",
+              "it-IT",
+              "ja-JP",
+              "jv-ID",
+              "ka-GE",
+              "kk-KZ",
+              "km-KH",
+              "kn-IN",
+              "ko-KR",
+              "lo-LA",
+              "lt-LT",
+              "lv-LV",
+              "mk-MK",
+              "ml-IN",
+              "mn-MN",
+              "mr-IN",
+              "ms-MY",
+              "mt-MT",
+              "my-MM",
+              "nb-NO",
+              "ne-NP",
+              "nl-BE",
+              "nl-NL",
+              "pa-IN",
+              "pl-PL",
+              "ps-AF",
+              "pt-BR",
+              "pt-PT",
+              "ro-RO",
+              "ru-RU",
+              "si-LK",
+              "sk-SK",
+              "sl-SI",
+              "so-SO",
+              "sq-AL",
+              "sr-RS",
+              "sv-SE",
+              "sw-KE",
+              "sw-TZ",
+              "ta-IN",
+              "te-IN",
+              "th-TH",
+              "tr-TR",
+              "uk-UA",
+              "ur-IN",
+              "uz-UZ",
+              "vi-VN",
+              "wuu-CN",
+              "yue-CN",
+              "zh-CN",
+              "zh-CN-shandong",
+              "zh-CN-sichuan",
+              "zh-HK",
+              "zh-TW",
+              "zu-ZA"
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
+          "segmentationStrategy": {
+            "type": "string",
+            "description": "Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation.",
+            "enum": [
+              "Default",
+              "Time",
+              "Semantic"
             ]
+          },
+          "segmentationSilenceTimeoutMs": {
+            "type": "number",
+            "description": "Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech.",
+            "minimum": 100,
+            "maximum": 5000
+          },
+          "segmentationMaximumTimeMs": {
+            "type": "number",
+            "description": "Maximum duration a segment can reach before being cut off when using time-based segmentation.",
+            "minimum": 20000,
+            "maximum": 70000
           }
         },
         "required": [
-          "type",
-          "metadata"
+          "provider"
         ]
       },
-      "MakeToolMetadata": {
-        "type": "object",
-        "properties": {
-          "scenarioId": {
-            "type": "number"
-          },
-          "triggerHookId": {
-            "type": "number"
-          }
-        }
-      },
-      "CreateMakeToolDTO": {
+      "FallbackCartesiaTranscriber": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
+          "provider": {
             "type": "string",
             "enum": [
-              "make"
-            ],
-            "description": "The type of tool. \"make\" for Make tool."
-          },
-          "metadata": {
-            "$ref": "#/components/schemas/MakeToolMetadata"
+              "cartesia"
+            ]
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
+          "model": {
+            "type": "string",
+            "enum": [
+              "ink-whisper"
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
+          "language": {
+            "type": "string",
+            "enum": [
+              "aa",
+              "ab",
+              "ae",
+              "af",
+              "ak",
+              "am",
+              "an",
+              "ar",
+              "as",
+              "av",
+              "ay",
+              "az",
+              "ba",
+              "be",
+              "bg",
+              "bh",
+              "bi",
+              "bm",
+              "bn",
+              "bo",
+              "br",
+              "bs",
+              "ca",
+              "ce",
+              "ch",
+              "co",
+              "cr",
+              "cs",
+              "cu",
+              "cv",
+              "cy",
+              "da",
+              "de",
+              "dv",
+              "dz",
+              "ee",
+              "el",
+              "en",
+              "eo",
+              "es",
+              "et",
+              "eu",
+              "fa",
+              "ff",
+              "fi",
+              "fj",
+              "fo",
+              "fr",
+              "fy",
+              "ga",
+              "gd",
+              "gl",
+              "gn",
+              "gu",
+              "gv",
+              "ha",
+              "he",
+              "hi",
+              "ho",
+              "hr",
+              "ht",
+              "hu",
+              "hy",
+              "hz",
+              "ia",
+              "id",
+              "ie",
+              "ig",
+              "ii",
+              "ik",
+              "io",
+              "is",
+              "it",
+              "iu",
+              "ja",
+              "jv",
+              "ka",
+              "kg",
+              "ki",
+              "kj",
+              "kk",
+              "kl",
+              "km",
+              "kn",
+              "ko",
+              "kr",
+              "ks",
+              "ku",
+              "kv",
+              "kw",
+              "ky",
+              "la",
+              "lb",
+              "lg",
+              "li",
+              "ln",
+              "lo",
+              "lt",
+              "lu",
+              "lv",
+              "mg",
+              "mh",
+              "mi",
+              "mk",
+              "ml",
+              "mn",
+              "mr",
+              "ms",
+              "mt",
+              "my",
+              "na",
+              "nb",
+              "nd",
+              "ne",
+              "ng",
+              "nl",
+              "nn",
+              "no",
+              "nr",
+              "nv",
+              "ny",
+              "oc",
+              "oj",
+              "om",
+              "or",
+              "os",
+              "pa",
+              "pi",
+              "pl",
+              "ps",
+              "pt",
+              "qu",
+              "rm",
+              "rn",
+              "ro",
+              "ru",
+              "rw",
+              "sa",
+              "sc",
+              "sd",
+              "se",
+              "sg",
+              "si",
+              "sk",
+              "sl",
+              "sm",
+              "sn",
+              "so",
+              "sq",
+              "sr",
+              "ss",
+              "st",
+              "su",
+              "sv",
+              "sw",
+              "ta",
+              "te",
+              "tg",
+              "th",
+              "ti",
+              "tk",
+              "tl",
+              "tn",
+              "to",
+              "tr",
+              "ts",
+              "tt",
+              "tw",
+              "ty",
+              "ug",
+              "uk",
+              "ur",
+              "uz",
+              "ve",
+              "vi",
+              "vo",
+              "wa",
+              "wo",
+              "xh",
+              "yi",
+              "yue",
+              "yo",
+              "za",
+              "zh",
+              "zu"
             ]
           }
         },
         "required": [
-          "type",
-          "metadata"
+          "provider"
         ]
       },
-      "CustomMessage": {
+      "FallbackCustomTranscriber": {
         "type": "object",
         "properties": {
-          "contents": {
-            "type": "array",
-            "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TextContent",
-                  "title": "Text"
-                }
-              ]
-            }
-          },
-          "type": {
+          "provider": {
             "type": "string",
-            "description": "This is a custom message.",
+            "description": "This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.",
             "enum": [
-              "custom-message"
+              "custom-transcriber"
             ]
           },
-          "content": {
-            "type": "string",
-            "description": "This is the content that the assistant will say when this message is triggered.",
-            "maxLength": 1000
+          "server": {
+            "description": "This is where the transcription request will be sent.\n\nUsage:\n1. Vapi will initiate a websocket connection with `server.url`.\n\n2. Vapi will send an initial text frame with the sample rate. Format:\n```\n    {\n      \"type\": \"start\",\n      \"encoding\": \"linear16\", // 16-bit raw PCM format\n      \"container\": \"raw\",\n      \"sampleRate\": {{sampleRate}},\n      \"channels\": 2 // customer is channel 0, assistant is channel 1\n    }\n```\n\n3. Vapi will send the audio data in 16-bit raw PCM format as binary frames.\n\n4. You can read the messages something like this:\n```\nws.on('message', (data, isBinary) => {\n  if (isBinary) {\n    pcmBuffer = Buffer.concat([pcmBuffer, data]);\n    console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);\n  } else {\n    console.log('Received message:', JSON.parse(data.toString()));\n  }\n});\n```\n\n5. You will respond with transcriptions as you have them. Format:\n```\n {\n    \"type\": \"transcriber-response\",\n    \"transcription\": \"Hello, world!\",\n    \"channel\": \"customer\" | \"assistant\"\n }\n```",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
           }
         },
         "required": [
-          "type"
+          "provider",
+          "server"
         ]
       },
-      "TransferDestinationAssistant": {
+      "FallbackDeepgramTranscriber": {
         "type": "object",
         "properties": {
-          "message": {
-            "description": "This is spoken to the customer before connecting them to the destination.\n\nUsage:\n- If this is not provided and transfer tool messages is not provided, default is \"Transferring the call now\".\n- If set to \"\", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant.\n\nThis accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.",
-            "oneOf": [
-              {
-                "type": "string"
-              },
-              {
-                "$ref": "#/components/schemas/CustomMessage"
-              }
-            ]
-          },
-          "type": {
+          "provider": {
             "type": "string",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "assistant"
+              "deepgram"
             ]
           },
-          "transferMode": {
-            "type": "string",
-            "description": "This is the mode to use for the transfer. Defaults to `rolling-history`.\n\n- `rolling-history`: This is the default mode. It keeps the entire conversation history and appends the new assistant's system message on transfer.\n\n  Example:\n\n  Pre-transfer:\n    system: assistant1 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n\n  Post-transfer:\n    system: assistant1 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n    system: assistant2 system message\n    assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)\n\n- `swap-system-message-in-history`: This replaces the original system message with the new assistant's system message on transfer.\n\n  Example:\n\n  Pre-transfer:\n    system: assistant1 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n\n  Post-transfer:\n    system: assistant2 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n    assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)\n\n- `delete-history`: This deletes the entire conversation history on transfer.\n\n  Example:\n\n  Pre-transfer:\n    system: assistant1 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n\n  Post-transfer:\n    system: assistant2 system message\n    assistant: assistant2 first message\n    user: Yes, please\n    assistant: how can i help?\n    user: i need help with my account\n\n- `swap-system-message-in-history-and-remove-transfer-tool-messages`: This replaces the original system message with the new assistant's system message on transfer and removes transfer tool messages from conversation history sent to the LLM.\n\n  Example:\n\n  Pre-transfer:\n    system: assistant1 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    transfer-tool\n    transfer-tool-result\n    assistant: (destination.message)\n\n  Post-transfer:\n    system: assistant2 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n    assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)\n\n@default 'rolling-history'",
-            "enum": [
-              "rolling-history",
-              "swap-system-message-in-history",
-              "swap-system-message-in-history-and-remove-transfer-tool-messages",
-              "delete-history"
-            ]
-          },
-          "assistantName": {
-            "type": "string",
-            "description": "This is the assistant to transfer the call to."
-          },
-          "description": {
-            "type": "string",
-            "description": "This is the description of the destination, used by the AI to choose when and how to transfer the call."
-          }
-        },
-        "required": [
-          "type",
-          "assistantName"
-        ]
-      },
-      "TransferDestinationStep": {
-        "type": "object",
-        "properties": {
-          "message": {
-            "description": "This is spoken to the customer before connecting them to the destination.\n\nUsage:\n- If this is not provided and transfer tool messages is not provided, default is \"Transferring the call now\".\n- If set to \"\", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant.\n\nThis accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.",
+          "model": {
+            "description": "This is the Deepgram model that will be used. A list of models can be found here: https://developers.deepgram.com/docs/models-languages-overview",
             "oneOf": [
               {
-                "type": "string"
+                "type": "string",
+                "enum": [
+                  "nova-3",
+                  "nova-3-general",
+                  "nova-3-medical",
+                  "nova-2",
+                  "nova-2-general",
+                  "nova-2-meeting",
+                  "nova-2-phonecall",
+                  "nova-2-finance",
+                  "nova-2-conversationalai",
+                  "nova-2-voicemail",
+                  "nova-2-video",
+                  "nova-2-medical",
+                  "nova-2-drivethru",
+                  "nova-2-automotive",
+                  "nova",
+                  "nova-general",
+                  "nova-phonecall",
+                  "nova-medical",
+                  "enhanced",
+                  "enhanced-general",
+                  "enhanced-meeting",
+                  "enhanced-phonecall",
+                  "enhanced-finance",
+                  "base",
+                  "base-general",
+                  "base-meeting",
+                  "base-phonecall",
+                  "base-finance",
+                  "base-conversationalai",
+                  "base-voicemail",
+                  "base-video",
+                  "whisper"
+                ]
               },
               {
-                "$ref": "#/components/schemas/CustomMessage"
+                "type": "string"
               }
             ]
           },
-          "type": {
+          "language": {
             "type": "string",
+            "description": "This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview",
             "enum": [
-              "step"
+              "ar",
+              "az",
+              "ba",
+              "bg",
+              "br",
+              "ca",
+              "cs",
+              "da",
+              "da-DK",
+              "de",
+              "de-CH",
+              "el",
+              "en",
+              "en-AU",
+              "en-GB",
+              "en-IN",
+              "en-NZ",
+              "en-US",
+              "es",
+              "es-419",
+              "es-LATAM",
+              "et",
+              "eu",
+              "fi",
+              "fr",
+              "fr-CA",
+              "ha",
+              "haw",
+              "he",
+              "hi",
+              "hi-Latn",
+              "hu",
+              "id",
+              "is",
+              "it",
+              "ja",
+              "jw",
+              "kn",
+              "ko",
+              "ko-KR",
+              "ln",
+              "lt",
+              "lv",
+              "mk",
+              "ms",
+              "multi",
+              "nl",
+              "nl-BE",
+              "no",
+              "pl",
+              "pt",
+              "pt-BR",
+              "ro",
+              "ru",
+              "sk",
+              "sl",
+              "sn",
+              "so",
+              "sr",
+              "su",
+              "sv",
+              "sv-SE",
+              "ta",
+              "taq",
+              "th",
+              "th-TH",
+              "tr",
+              "tt",
+              "uk",
+              "ur",
+              "vi",
+              "yo",
+              "zh",
+              "zh-CN",
+              "zh-HK",
+              "zh-Hans",
+              "zh-Hant",
+              "zh-TW"
             ]
           },
-          "stepName": {
-            "type": "string",
-            "description": "This is the step to transfer to."
+          "smartFormat": {
+            "type": "boolean",
+            "description": "This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes format numbers as times but it's getting better.",
+            "example": false
           },
-          "description": {
-            "type": "string",
-            "description": "This is the description of the destination, used by the AI to choose when and how to transfer the call."
-          }
-        },
-        "required": [
-          "type",
-          "stepName"
-        ]
-      },
-      "SummaryPlan": {
-        "type": "object",
-        "properties": {
-          "messages": {
-            "description": "These are the messages used to generate the summary.\n\n@default: ```\n[\n  {\n    \"role\": \"system\",\n    \"content\": \"You are an expert note-taker. You will be given a transcript of a call. Summarize the call in 2-3 sentences. DO NOT return anything except the summary.\"\n  },\n  {\n    \"role\": \"user\",\n    \"content\": \"Here is the transcript:\\n\\n{{transcript}}\\n\\n\"\n  }\n]```\n\nYou can customize by providing any messages you want.\n\nHere are the template variables available:\n- {{transcript}}: The transcript of the call from `call.artifact.transcript`- {{systemPrompt}}: The system prompt of the call from `assistant.model.messages[type=system].content`",
+          "mipOptOut": {
+            "type": "boolean",
+            "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false",
+            "example": false,
+            "default": false
+          },
+          "numerals": {
+            "type": "boolean",
+            "description": "If set to true, this will cause deepgram to convert spoken numbers to literal numerals. For example, \"my phone number is nine-seven-two...\" would become \"my phone number is 972...\"\n\n@default false",
+            "example": false
+          },
+          "confidenceThreshold": {
+            "type": "number",
+            "description": "Transcripts below this confidence threshold will be discarded.\n\n@default 0.4",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0.4
+          },
+          "keywords": {
+            "description": "These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here.",
             "type": "array",
             "items": {
-              "type": "object"
+              "type": "string",
+              "pattern": "/^\\p{L}[\\p{L}\\d]*(?::[+-]?\\d+)?$/u"
             }
           },
-          "enabled": {
-            "type": "boolean",
-            "description": "This determines whether a summary is generated and stored in `call.analysis.summary`. Defaults to true.\n\nUsage:\n- If you want to disable the summary, set this to false.\n\n@default true"
+          "keyterm": {
+            "description": "Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "timeoutSeconds": {
+          "endpointing": {
             "type": "number",
-            "description": "This is how long the request is tried before giving up. When request times out, `call.analysis.summary` will be empty.\n\nUsage:\n- To guarantee the summary is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond.\n\n@default 5 seconds",
-            "minimum": 1,
-            "maximum": 60
+            "description": "This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth documentation here: https://developers.deepgram.com/docs/endpointing.\n\nHere are the most important bits:\n- Defaults to 10. This is recommended for most use cases to optimize for latency.\n- 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word utterances. For those uses cases, it's recommended to try 300. It will add a bit of latency but the quality and reliability of the experience will be better.\n- If neither 10 nor 300 work, contact support@vapi.ai and we'll find another solution.\n\n@default 10",
+            "minimum": 10,
+            "maximum": 500
           }
-        }
+        },
+        "required": [
+          "provider"
+        ]
       },
-      "TransferPlan": {
+      "FallbackElevenLabsTranscriber": {
         "type": "object",
         "properties": {
-          "mode": {
+          "provider": {
             "type": "string",
-            "description": "This configures how transfer is executed and the experience of the destination party receiving the call.\n\nUsage:\n- `blind-transfer`: The assistant forwards the call to the destination without any message or summary.\n- `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary.\n- `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer.\n- `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call.\n\n@default 'blind-transfer'",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "blind-transfer",
-              "blind-transfer-add-summary-to-sip-header",
-              "warm-transfer-say-message",
-              "warm-transfer-say-summary",
-              "warm-transfer-twiml",
-              "warm-transfer-wait-for-operator-to-speak-first-and-then-say-message",
-              "warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary"
-            ]
-          },
-          "message": {
-            "description": "This is the message the assistant will deliver to the destination party before connecting the customer.\n\nUsage:\n- Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message` or `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`.",
-            "oneOf": [
-              {
-                "type": "string"
-              },
-              {
-                "$ref": "#/components/schemas/CustomMessage"
-              }
+              "11labs"
             ]
           },
-          "sipVerb": {
-            "type": "object",
-            "description": "This specifies the SIP verb to use while transferring the call.\n- 'refer': Uses SIP REFER to transfer the call (default)\n- 'bye': Ends current call with SIP BYE\n- 'dial': Uses SIP DIAL to transfer the call",
-            "default": "refer",
+          "model": {
+            "type": "string",
+            "description": "This is the model that will be used for the transcription.",
             "enum": [
-              "refer",
-              "bye",
-              "dial"
+              "scribe_v1"
             ]
           },
-          "twiml": {
+          "language": {
             "type": "string",
-            "description": "This is the TwiML instructions to execute on the destination call leg before connecting the customer.\n\nUsage:\n- Used only when `mode` is `warm-transfer-twiml`.\n- Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs.\n- Maximum length is 4096 characters.\n\nExample:\n```\n<Say voice=\"alice\" language=\"en-US\">Hello, transferring a customer to you.</Say>\n<Pause length=\"2\"/>\n<Say>They called about billing questions.</Say>\n```",
-            "maxLength": 4096
-          },
-          "summaryPlan": {
-            "description": "This is the plan for generating a summary of the call to present to the destination party.\n\nUsage:\n- Used only when `mode` is `blind-transfer-add-summary-to-sip-header` or `warm-transfer-say-summary` or `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SummaryPlan"
-              }
+            "enum": [
+              "aa",
+              "ab",
+              "ae",
+              "af",
+              "ak",
+              "am",
+              "an",
+              "ar",
+              "as",
+              "av",
+              "ay",
+              "az",
+              "ba",
+              "be",
+              "bg",
+              "bh",
+              "bi",
+              "bm",
+              "bn",
+              "bo",
+              "br",
+              "bs",
+              "ca",
+              "ce",
+              "ch",
+              "co",
+              "cr",
+              "cs",
+              "cu",
+              "cv",
+              "cy",
+              "da",
+              "de",
+              "dv",
+              "dz",
+              "ee",
+              "el",
+              "en",
+              "eo",
+              "es",
+              "et",
+              "eu",
+              "fa",
+              "ff",
+              "fi",
+              "fj",
+              "fo",
+              "fr",
+              "fy",
+              "ga",
+              "gd",
+              "gl",
+              "gn",
+              "gu",
+              "gv",
+              "ha",
+              "he",
+              "hi",
+              "ho",
+              "hr",
+              "ht",
+              "hu",
+              "hy",
+              "hz",
+              "ia",
+              "id",
+              "ie",
+              "ig",
+              "ii",
+              "ik",
+              "io",
+              "is",
+              "it",
+              "iu",
+              "ja",
+              "jv",
+              "ka",
+              "kg",
+              "ki",
+              "kj",
+              "kk",
+              "kl",
+              "km",
+              "kn",
+              "ko",
+              "kr",
+              "ks",
+              "ku",
+              "kv",
+              "kw",
+              "ky",
+              "la",
+              "lb",
+              "lg",
+              "li",
+              "ln",
+              "lo",
+              "lt",
+              "lu",
+              "lv",
+              "mg",
+              "mh",
+              "mi",
+              "mk",
+              "ml",
+              "mn",
+              "mr",
+              "ms",
+              "mt",
+              "my",
+              "na",
+              "nb",
+              "nd",
+              "ne",
+              "ng",
+              "nl",
+              "nn",
+              "no",
+              "nr",
+              "nv",
+              "ny",
+              "oc",
+              "oj",
+              "om",
+              "or",
+              "os",
+              "pa",
+              "pi",
+              "pl",
+              "ps",
+              "pt",
+              "qu",
+              "rm",
+              "rn",
+              "ro",
+              "ru",
+              "rw",
+              "sa",
+              "sc",
+              "sd",
+              "se",
+              "sg",
+              "si",
+              "sk",
+              "sl",
+              "sm",
+              "sn",
+              "so",
+              "sq",
+              "sr",
+              "ss",
+              "st",
+              "su",
+              "sv",
+              "sw",
+              "ta",
+              "te",
+              "tg",
+              "th",
+              "ti",
+              "tk",
+              "tl",
+              "tn",
+              "to",
+              "tr",
+              "ts",
+              "tt",
+              "tw",
+              "ty",
+              "ug",
+              "uk",
+              "ur",
+              "uz",
+              "ve",
+              "vi",
+              "vo",
+              "wa",
+              "wo",
+              "xh",
+              "yi",
+              "yue",
+              "yo",
+              "za",
+              "zh",
+              "zu"
             ]
           }
         },
         "required": [
-          "mode"
+          "provider"
         ]
       },
-      "TransferDestinationNumber": {
+      "FallbackGladiaTranscriber": {
         "type": "object",
         "properties": {
-          "message": {
-            "description": "This is spoken to the customer before connecting them to the destination.\n\nUsage:\n- If this is not provided and transfer tool messages is not provided, default is \"Transferring the call now\".\n- If set to \"\", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant.\n\nThis accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.",
-            "oneOf": [
-              {
-                "type": "string"
-              },
-              {
-                "$ref": "#/components/schemas/CustomMessage"
-              }
-            ]
-          },
-          "type": {
+          "provider": {
             "type": "string",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "number"
+              "gladia"
             ]
           },
-          "numberE164CheckEnabled": {
-            "type": "boolean",
-            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
-            "default": true
-          },
-          "number": {
-            "type": "string",
-            "description": "This is the phone number to transfer the call to.",
-            "minLength": 3,
-            "maxLength": 40
-          },
-          "extension": {
-            "type": "string",
-            "description": "This is the extension to dial after transferring the call to the `number`.",
-            "minLength": 1,
-            "maxLength": 10
-          },
-          "callerId": {
-            "type": "string",
-            "description": "This is the caller ID to use when transferring the call to the `number`.\n\nUsage:\n- If not provided, the caller ID will be the number the call is coming from. Example, +14151111111 calls in to and the assistant transfers out to +16470000000. +16470000000 will see +14151111111 as the caller.\n- To change this behavior, provide a `callerId`.\n- Set to '{{customer.number}}' to always use the customer's number as the caller ID.\n- Set to '{{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID.\n- Set to any E164 number to always use that number as the caller ID. This needs to be a number that is owned or verified by your Transport provider like Twilio.\n\nFor Twilio, you can read up more here: https://www.twilio.com/docs/voice/twiml/dial#callerid",
-            "maxLength": 40
-          },
-          "transferPlan": {
-            "description": "This configures how transfer is executed and the experience of the destination party receiving the call. Defaults to `blind-transfer`.\n\n@default `transferPlan.mode='blind-transfer'`",
-            "allOf": [
+          "model": {
+            "description": "This is the Gladia model that will be used. Default is 'fast'",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/TransferPlan"
+                "enum": [
+                  "fast",
+                  "accurate",
+                  "solaria-1"
+                ]
               }
             ]
           },
-          "description": {
-            "type": "string",
-            "description": "This is the description of the destination, used by the AI to choose when and how to transfer the call."
-          }
-        },
-        "required": [
-          "type",
-          "number"
-        ]
-      },
-      "TransferDestinationSip": {
-        "type": "object",
-        "properties": {
-          "message": {
-            "description": "This is spoken to the customer before connecting them to the destination.\n\nUsage:\n- If this is not provided and transfer tool messages is not provided, default is \"Transferring the call now\".\n- If set to \"\", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant.\n\nThis accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.",
+          "languageBehaviour": {
+            "description": "Defines how the transcription model detects the audio language. Default value is 'automatic single language'.",
             "oneOf": [
               {
-                "type": "string"
-              },
-              {
-                "$ref": "#/components/schemas/CustomMessage"
-              }
-            ]
-          },
-          "type": {
+                "type": "string",
+                "enum": [
+                  "manual",
+                  "automatic single language",
+                  "automatic multiple languages"
+                ]
+              }
+            ]
+          },
+          "language": {
             "type": "string",
+            "description": "Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.",
             "enum": [
-              "sip"
+              "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"
             ]
           },
-          "sipUri": {
+          "languages": {
             "type": "string",
-            "description": "This is the SIP URI to transfer the call to."
-          },
-          "transferPlan": {
-            "description": "This configures how transfer is executed and the experience of the destination party receiving the call. Defaults to `blind-transfer`.\n\n@default `transferPlan.mode='blind-transfer'`",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/TransferPlan"
-              }
+            "description": "Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'.",
+            "enum": [
+              "af",
+              "sq",
+              "am",
+              "ar",
+              "hy",
+              "as",
+              "az",
+              "ba",
+              "eu",
+              "be",
+              "bn",
+              "bs",
+              "br",
+              "bg",
+              "ca",
+              "zh",
+              "hr",
+              "cs",
+              "da",
+              "nl",
+              "en",
+              "et",
+              "fo",
+              "fi",
+              "fr",
+              "gl",
+              "ka",
+              "de",
+              "el",
+              "gu",
+              "ht",
+              "ha",
+              "haw",
+              "he",
+              "hi",
+              "hu",
+              "is",
+              "id",
+              "it",
+              "ja",
+              "jv",
+              "kn",
+              "kk",
+              "km",
+              "ko",
+              "lo",
+              "la",
+              "lv",
+              "ln",
+              "lt",
+              "lb",
+              "mk",
+              "mg",
+              "ms",
+              "ml",
+              "mt",
+              "mi",
+              "mr",
+              "mn",
+              "my",
+              "ne",
+              "no",
+              "nn",
+              "oc",
+              "ps",
+              "fa",
+              "pl",
+              "pt",
+              "pa",
+              "ro",
+              "ru",
+              "sa",
+              "sr",
+              "sn",
+              "sd",
+              "si",
+              "sk",
+              "sl",
+              "so",
+              "es",
+              "su",
+              "sw",
+              "sv",
+              "tl",
+              "tg",
+              "ta",
+              "tt",
+              "te",
+              "th",
+              "bo",
+              "tr",
+              "tk",
+              "uk",
+              "ur",
+              "uz",
+              "vi",
+              "cy",
+              "yi",
+              "yo"
             ]
           },
-          "sipHeaders": {
-            "type": "object",
-            "description": "These are custom headers to be added to SIP refer during transfer call."
-          },
-          "description": {
+          "transcriptionHint": {
             "type": "string",
-            "description": "This is the description of the destination, used by the AI to choose when and how to transfer the call."
-          }
-        },
-        "required": [
-          "type",
-          "sipUri"
-        ]
-      },
-      "CreateTransferCallToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
+            "description": "Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored.\n⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.",
+            "maxLength": 600,
+            "example": "custom vocabulary"
+          },
+          "prosody": {
             "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
+            "description": "If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)… Default value is false.",
             "example": false
           },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "transferCall"
-            ]
-          },
-          "destinations": {
-            "type": "array",
-            "description": "These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TransferDestinationAssistant",
-                  "title": "Assistant"
-                },
-                {
-                  "$ref": "#/components/schemas/TransferDestinationStep",
-                  "title": "Step"
-                },
-                {
-                  "$ref": "#/components/schemas/TransferDestinationNumber",
-                  "title": "Number"
-                },
-                {
-                  "$ref": "#/components/schemas/TransferDestinationSip",
-                  "title": "Sip"
-                }
-              ]
-            }
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
+          "audioEnhancer": {
+            "type": "boolean",
+            "description": "If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.",
+            "example": false
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "confidenceThreshold": {
+            "type": "number",
+            "description": "Transcripts below this confidence threshold will be discarded.\n\n@default 0.4",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0.4
           }
         },
         "required": [
-          "type"
+          "provider"
         ]
       },
-      "CreateCustomKnowledgeBaseDTO": {
+      "FallbackSpeechmaticsTranscriber": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
-            "description": "This knowledge base is bring your own knowledge base implementation.",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "custom-knowledge-base"
+              "speechmatics"
             ]
           },
-          "server": {
-            "description": "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"messsage\": {\n    \"type\": \"knowledge-base-request\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"content\": \"Why is ocean blue?\"\n      }\n    ],\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected:\n```\n{\n  \"message\": {\n     \"role\": \"assistant\",\n     \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n  }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK\n  \"documents\": [\n    {\n      \"content\": \"The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.\",\n      \"similarity\": 1\n    },\n    {\n      \"content\": \"Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n      \"similarity\": .5\n    }\n  ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
+          "model": {
+            "type": "string",
+            "description": "This is the model that will be used for the transcription.",
+            "enum": [
+              "default"
+            ]
+          },
+          "language": {
+            "type": "string",
+            "enum": [
+              "auto",
+              "ar",
+              "ba",
+              "eu",
+              "be",
+              "bn",
+              "bg",
+              "yue",
+              "ca",
+              "hr",
+              "cs",
+              "da",
+              "nl",
+              "en",
+              "eo",
+              "et",
+              "fi",
+              "fr",
+              "gl",
+              "de",
+              "el",
+              "he",
+              "hi",
+              "hu",
+              "id",
+              "ia",
+              "ga",
+              "it",
+              "ja",
+              "ko",
+              "lv",
+              "lt",
+              "ms",
+              "mt",
+              "cmn",
+              "mr",
+              "mn",
+              "no",
+              "fa",
+              "pl",
+              "pt",
+              "ro",
+              "ru",
+              "sk",
+              "sl",
+              "es",
+              "sw",
+              "sv",
+              "ta",
+              "th",
+              "tr",
+              "uk",
+              "ur",
+              "ug",
+              "vi",
+              "cy"
             ]
           }
         },
         "required": [
-          "provider",
-          "server"
+          "provider"
         ]
       },
-      "KnowledgeBase": {
+      "FallbackTalkscriberTranscriber": {
         "type": "object",
         "properties": {
-          "name": {
-            "type": "string",
-            "description": "The name of the knowledge base",
-            "example": "My Knowledge Base"
-          },
           "provider": {
             "type": "string",
-            "description": "The provider of the knowledge base",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "google"
-            ],
-            "example": "google"
+              "talkscriber"
+            ]
           },
           "model": {
             "type": "string",
-            "description": "The model to use for the knowledge base",
+            "description": "This is the model that will be used for the transcription.",
             "enum": [
-              "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"
+              "whisper"
             ]
           },
-          "description": {
-            "type": "string",
-            "description": "A description of the knowledge base"
-          },
-          "fileIds": {
-            "description": "The file IDs associated with this knowledge base",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          }
-        },
-        "required": [
-          "name",
-          "provider",
-          "description",
-          "fileIds"
-        ]
-      },
-      "CreateQueryToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
+          "language": {
             "type": "string",
+            "description": "This is the language that will be set for the transcription. The list of languages Whisper supports can be found here: https://github.com/openai/whisper/blob/main/whisper/tokenizer.py",
             "enum": [
-              "query"
-            ],
-            "description": "The type of tool. \"query\" for Query tool."
-          },
-          "knowledgeBases": {
-            "description": "The knowledge bases to query",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/KnowledgeBase"
-            }
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "CreateGoogleCalendarCreateEventToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "google.calendar.event.create"
-            ],
-            "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
+              "en",
+              "zh",
+              "de",
+              "es",
+              "ru",
+              "ko",
+              "fr",
+              "ja",
+              "pt",
+              "tr",
+              "pl",
+              "ca",
+              "nl",
+              "ar",
+              "sv",
+              "it",
+              "id",
+              "hi",
+              "fi",
+              "vi",
+              "he",
+              "uk",
+              "el",
+              "ms",
+              "cs",
+              "ro",
+              "da",
+              "hu",
+              "ta",
+              "no",
+              "th",
+              "ur",
+              "hr",
+              "bg",
+              "lt",
+              "la",
+              "mi",
+              "ml",
+              "cy",
+              "sk",
+              "te",
+              "fa",
+              "lv",
+              "bn",
+              "sr",
+              "az",
+              "sl",
+              "kn",
+              "et",
+              "mk",
+              "br",
+              "eu",
+              "is",
+              "hy",
+              "ne",
+              "mn",
+              "bs",
+              "kk",
+              "sq",
+              "sw",
+              "gl",
+              "mr",
+              "pa",
+              "si",
+              "km",
+              "sn",
+              "yo",
+              "so",
+              "af",
+              "oc",
+              "ka",
+              "be",
+              "tg",
+              "sd",
+              "gu",
+              "am",
+              "yi",
+              "lo",
+              "uz",
+              "fo",
+              "ht",
+              "ps",
+              "tk",
+              "nn",
+              "mt",
+              "sa",
+              "lb",
+              "my",
+              "bo",
+              "tl",
+              "mg",
+              "as",
+              "tt",
+              "haw",
+              "ln",
+              "ha",
+              "ba",
+              "jw",
+              "su",
+              "yue"
             ]
           }
         },
         "required": [
-          "type"
+          "provider"
         ]
       },
-      "CreateGoogleSheetsRowAppendToolDTO": {
+      "FallbackGoogleTranscriber": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
+          "provider": {
             "type": "string",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "google.sheets.row.append"
-            ],
-            "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool."
+              "google"
+            ]
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
+          "model": {
+            "type": "string",
+            "description": "This is the model that will be used for the transcription.",
+            "enum": [
+              "gemini-2.5-pro",
+              "gemini-2.5-flash",
+              "gemini-2.5-flash-lite",
+              "gemini-2.0-flash-thinking-exp",
+              "gemini-2.0-pro-exp-02-05",
+              "gemini-2.0-flash",
+              "gemini-2.0-flash-lite",
+              "gemini-2.0-flash-exp",
+              "gemini-2.0-flash-realtime-exp",
+              "gemini-1.5-flash",
+              "gemini-1.5-flash-002",
+              "gemini-1.5-pro",
+              "gemini-1.5-pro-002",
+              "gemini-1.0-pro"
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
+          "language": {
+            "type": "string",
+            "description": "This is the language that will be set for the transcription.",
+            "enum": [
+              "Multilingual",
+              "Arabic",
+              "Bengali",
+              "Bulgarian",
+              "Chinese",
+              "Croatian",
+              "Czech",
+              "Danish",
+              "Dutch",
+              "English",
+              "Estonian",
+              "Finnish",
+              "French",
+              "German",
+              "Greek",
+              "Hebrew",
+              "Hindi",
+              "Hungarian",
+              "Indonesian",
+              "Italian",
+              "Japanese",
+              "Korean",
+              "Latvian",
+              "Lithuanian",
+              "Norwegian",
+              "Polish",
+              "Portuguese",
+              "Romanian",
+              "Russian",
+              "Serbian",
+              "Slovak",
+              "Slovenian",
+              "Spanish",
+              "Swahili",
+              "Swedish",
+              "Thai",
+              "Turkish",
+              "Ukrainian",
+              "Vietnamese"
             ]
           }
         },
         "required": [
-          "type"
+          "provider"
         ]
       },
-      "CreateGoogleCalendarCheckAvailabilityToolDTO": {
+      "FallbackOpenAITranscriber": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
+          "provider": {
             "type": "string",
+            "description": "This is the transcription provider that will be used.",
             "enum": [
-              "google.calendar.availability.check"
-            ],
-            "description": "The type of tool. \"google.calendar.availability.check\" for Google Calendar availability check tool."
+              "openai"
+            ]
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
+          "model": {
+            "type": "string",
+            "description": "This is the model that will be used for the transcription.",
+            "enum": [
+              "gpt-4o-transcribe",
+              "gpt-4o-mini-transcribe"
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
+          "language": {
+            "type": "string",
+            "description": "This is the language that will be set for the transcription.",
+            "enum": [
+              "af",
+              "ar",
+              "hy",
+              "az",
+              "be",
+              "bs",
+              "bg",
+              "ca",
+              "zh",
+              "hr",
+              "cs",
+              "da",
+              "nl",
+              "en",
+              "et",
+              "fi",
+              "fr",
+              "gl",
+              "de",
+              "el",
+              "he",
+              "hi",
+              "hu",
+              "is",
+              "id",
+              "it",
+              "ja",
+              "kn",
+              "kk",
+              "ko",
+              "lv",
+              "lt",
+              "mk",
+              "ms",
+              "mr",
+              "mi",
+              "ne",
+              "no",
+              "fa",
+              "pl",
+              "pt",
+              "ro",
+              "ru",
+              "sr",
+              "sk",
+              "sl",
+              "es",
+              "sw",
+              "sv",
+              "tl",
+              "ta",
+              "th",
+              "tr",
+              "uk",
+              "ur",
+              "vi",
+              "cy"
             ]
           }
         },
         "required": [
-          "type"
+          "provider",
+          "model"
         ]
       },
-      "CreateSlackSendMessageToolDTO": {
+      "LangfuseObservabilityPlan": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
+          "provider": {
+            "type": "string",
+            "enum": [
+              "langfuse"
+            ]
           },
-          "messages": {
+          "tags": {
+            "description": "This is an array of tags to be added to the Langfuse trace. Tags allow you to categorize and filter traces. https://langfuse.com/docs/tracing-features/tags",
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
+              "type": "string"
             }
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "slack.message.send"
-            ],
-            "description": "The type of tool. \"slack.message.send\" for Slack send message tool."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "metadata": {
+            "type": "object",
+            "description": "This is a JSON object that will be added to the Langfuse trace. Traces can be enriched with metadata to better understand your users, application, and experiments. https://langfuse.com/docs/tracing-features/metadata\nBy default it includes the call metadata, assistant metadata, and assistant overrides."
           }
         },
         "required": [
-          "type"
+          "provider",
+          "tags"
         ]
       },
-      "AnyscaleModel": {
+      "TextContent": {
         "type": "object",
         "properties": {
-          "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
-          },
-          "tools": {
-            "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
-                }
-              ]
-            }
-          },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
-              }
+          "type": {
+            "type": "string",
+            "enum": [
+              "text"
             ]
           },
-          "knowledgeBaseId": {
-            "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
+          "text": {
+            "type": "string"
           },
-          "provider": {
+          "language": {
             "type": "string",
             "enum": [
-              "anyscale"
+              "aa",
+              "ab",
+              "ae",
+              "af",
+              "ak",
+              "am",
+              "an",
+              "ar",
+              "as",
+              "av",
+              "ay",
+              "az",
+              "ba",
+              "be",
+              "bg",
+              "bh",
+              "bi",
+              "bm",
+              "bn",
+              "bo",
+              "br",
+              "bs",
+              "ca",
+              "ce",
+              "ch",
+              "co",
+              "cr",
+              "cs",
+              "cu",
+              "cv",
+              "cy",
+              "da",
+              "de",
+              "dv",
+              "dz",
+              "ee",
+              "el",
+              "en",
+              "eo",
+              "es",
+              "et",
+              "eu",
+              "fa",
+              "ff",
+              "fi",
+              "fj",
+              "fo",
+              "fr",
+              "fy",
+              "ga",
+              "gd",
+              "gl",
+              "gn",
+              "gu",
+              "gv",
+              "ha",
+              "he",
+              "hi",
+              "ho",
+              "hr",
+              "ht",
+              "hu",
+              "hy",
+              "hz",
+              "ia",
+              "id",
+              "ie",
+              "ig",
+              "ii",
+              "ik",
+              "io",
+              "is",
+              "it",
+              "iu",
+              "ja",
+              "jv",
+              "ka",
+              "kg",
+              "ki",
+              "kj",
+              "kk",
+              "kl",
+              "km",
+              "kn",
+              "ko",
+              "kr",
+              "ks",
+              "ku",
+              "kv",
+              "kw",
+              "ky",
+              "la",
+              "lb",
+              "lg",
+              "li",
+              "ln",
+              "lo",
+              "lt",
+              "lu",
+              "lv",
+              "mg",
+              "mh",
+              "mi",
+              "mk",
+              "ml",
+              "mn",
+              "mr",
+              "ms",
+              "mt",
+              "my",
+              "na",
+              "nb",
+              "nd",
+              "ne",
+              "ng",
+              "nl",
+              "nn",
+              "no",
+              "nr",
+              "nv",
+              "ny",
+              "oc",
+              "oj",
+              "om",
+              "or",
+              "os",
+              "pa",
+              "pi",
+              "pl",
+              "ps",
+              "pt",
+              "qu",
+              "rm",
+              "rn",
+              "ro",
+              "ru",
+              "rw",
+              "sa",
+              "sc",
+              "sd",
+              "se",
+              "sg",
+              "si",
+              "sk",
+              "sl",
+              "sm",
+              "sn",
+              "so",
+              "sq",
+              "sr",
+              "ss",
+              "st",
+              "su",
+              "sv",
+              "sw",
+              "ta",
+              "te",
+              "tg",
+              "th",
+              "ti",
+              "tk",
+              "tl",
+              "tn",
+              "to",
+              "tr",
+              "ts",
+              "tt",
+              "tw",
+              "ty",
+              "ug",
+              "uk",
+              "ur",
+              "uz",
+              "ve",
+              "vi",
+              "vo",
+              "wa",
+              "wo",
+              "xh",
+              "yi",
+              "yue",
+              "yo",
+              "za",
+              "zh",
+              "zu"
             ]
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
-          },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
-          },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
-          },
-          "emotionRecognitionEnabled": {
-            "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
-          },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
           }
         },
         "required": [
-          "provider",
-          "model"
+          "type",
+          "text",
+          "language"
         ]
       },
-      "AnthropicThinkingConfig": {
+      "Condition": {
         "type": "object",
         "properties": {
-          "type": {
+          "operator": {
             "type": "string",
+            "description": "This is the operator you want to use to compare the parameter and value.",
             "enum": [
-              "enabled"
+              "eq",
+              "neq",
+              "gt",
+              "gte",
+              "lt",
+              "lte"
             ]
           },
-          "budgetTokens": {
-            "type": "number",
-            "description": "The maximum number of tokens to allocate for thinking.\nMust be between 1024 and 100000 tokens.",
-            "minimum": 1024,
-            "maximum": 100000
+          "param": {
+            "type": "string",
+            "description": "This is the name of the parameter that you want to check.",
+            "maxLength": 1000
+          },
+          "value": {
+            "type": "string",
+            "description": "This is the value you want to compare against the parameter.",
+            "maxLength": 1000
           }
         },
         "required": [
-          "type",
-          "budgetTokens"
+          "operator",
+          "param",
+          "value"
         ]
       },
-      "AnthropicModel": {
+      "ToolMessageStart": {
         "type": "object",
         "properties": {
-          "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
-          },
-          "tools": {
+          "contents": {
             "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
+                  "$ref": "#/components/schemas/TextContent",
+                  "title": "Text"
                 }
               ]
             }
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
-              }
-            ]
-          },
-          "knowledgeBaseId": {
-            "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
-          },
-          "model": {
-            "type": "string",
-            "description": "The specific Anthropic/Claude model that will be used.",
-            "enum": [
-              "claude-3-opus-20240229",
-              "claude-3-sonnet-20240229",
-              "claude-3-haiku-20240307",
-              "claude-3-5-sonnet-20240620",
-              "claude-3-5-sonnet-20241022",
-              "claude-3-5-haiku-20241022",
-              "claude-3-7-sonnet-20250219"
-            ]
-          },
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "The provider identifier for Anthropic.",
             "enum": [
-              "anthropic"
-            ]
-          },
-          "thinking": {
-            "description": "Optional configuration for Anthropic's thinking feature.\nOnly applicable for claude-3-7-sonnet-20250219 model.\nIf provided, maxTokens must be greater than thinking.budgetTokens.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AnthropicThinkingConfig"
-              }
-            ]
-          },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
-          },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
+              "request-start"
+            ],
+            "description": "This message is triggered when the tool call starts.\n\nThis message is never triggered for async tools.\n\nIf this message is not provided, one of the default filler messages \"Hold on a sec\", \"One moment\", \"Just a sec\", \"Give me a moment\" or \"This'll just take a sec\" will be used."
           },
-          "emotionRecognitionEnabled": {
+          "blocking": {
             "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+            "description": "This is an optional boolean that if true, the tool call will only trigger after the message is spoken. Default is false.\n\n@default false",
+            "example": false,
+            "default": false
           },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+          "content": {
+            "type": "string",
+            "description": "This is the content that the assistant says when this message is triggered.",
+            "maxLength": 1000
+          },
+          "conditions": {
+            "description": "This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Condition"
+            }
           }
         },
         "required": [
-          "model",
-          "provider"
+          "type"
         ]
       },
-      "CerebrasModel": {
+      "ToolMessageComplete": {
         "type": "object",
         "properties": {
-          "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
-          },
-          "tools": {
+          "contents": {
             "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
+                  "$ref": "#/components/schemas/TextContent",
+                  "title": "Text"
                 }
               ]
             }
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
-              }
-            ]
-          },
-          "knowledgeBaseId": {
-            "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
-          },
-          "model": {
+          "type": {
             "type": "string",
-            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
+            "description": "This message is triggered when the tool call is complete.\n\nThis message is triggered immediately without waiting for your server to respond for async tool calls.\n\nIf this message is not provided, the model will be requested to respond.\n\nIf this message is provided, only this message will be spoken and the model will not be requested to come up with a response. It's an exclusive OR.",
             "enum": [
-              "llama3.1-8b",
-              "llama-3.3-70b"
+              "request-complete"
             ]
           },
-          "provider": {
+          "role": {
             "type": "string",
+            "description": "This is optional and defaults to \"assistant\".\n\nWhen role=assistant, `content` is said out loud.\n\nWhen role=system, `content` is passed to the model in a system message. Example:\n    system: default one\n    assistant:\n    user:\n    assistant:\n    user:\n    assistant:\n    user:\n    assistant: tool called\n    tool: your server response\n    <--- system prompt as hint\n    ---> model generates response which is spoken\nThis is useful when you want to provide a hint to the model about what to say next.",
             "enum": [
-              "cerebras"
+              "assistant",
+              "system"
             ]
           },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
-          },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
-          },
-          "emotionRecognitionEnabled": {
+          "endCallAfterSpokenEnabled": {
             "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+            "description": "This is an optional boolean that if true, the call will end after the message is spoken. Default is false.\n\nThis is ignored if `role` is set to `system`.\n\n@default false",
+            "example": false
           },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+          "content": {
+            "type": "string",
+            "description": "This is the content that the assistant says when this message is triggered.",
+            "maxLength": 1000
+          },
+          "conditions": {
+            "description": "This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Condition"
+            }
           }
         },
         "required": [
-          "model",
-          "provider"
+          "type"
         ]
       },
-      "CustomLLMModel": {
+      "ToolMessageFailed": {
         "type": "object",
         "properties": {
-          "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
-          },
-          "tools": {
+          "contents": {
             "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
+                  "$ref": "#/components/schemas/TextContent",
+                  "title": "Text"
                 }
               ]
             }
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
-              }
-            ]
-          },
-          "knowledgeBaseId": {
-            "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
-          },
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used.",
+            "description": "This message is triggered when the tool call fails.\n\nThis message is never triggered for async tool calls.\n\nIf this message is not provided, the model will be requested to respond.\n\nIf this message is provided, only this message will be spoken and the model will not be requested to come up with a response. It's an exclusive OR.",
             "enum": [
-              "custom-llm"
+              "request-failed"
             ]
           },
-          "metadataSendMode": {
-            "type": "string",
-            "description": "This determines whether metadata is sent in requests to the custom provider.\n\n- `off` will not send any metadata. payload will look like `{ messages }`\n- `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }`\n- `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }`\n\nFurther, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload.\n\nDefault is `variable`.",
-            "enum": [
-              "off",
-              "variable",
-              "destructured"
-            ]
+          "endCallAfterSpokenEnabled": {
+            "type": "boolean",
+            "description": "This is an optional boolean that if true, the call will end after the message is spoken. Default is false.\n\n@default false",
+            "example": false
           },
-          "url": {
+          "content": {
             "type": "string",
-            "description": "These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1"
+            "description": "This is the content that the assistant says when this message is triggered.",
+            "maxLength": 1000
           },
-          "timeoutSeconds": {
-            "type": "number",
-            "description": "This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds.",
-            "minimum": 20,
-            "maximum": 600
+          "conditions": {
+            "description": "This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Condition"
+            }
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "ToolMessageDelayed": {
+        "type": "object",
+        "properties": {
+          "contents": {
+            "type": "array",
+            "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TextContent",
+                  "title": "Text"
+                }
+              ]
+            }
           },
-          "model": {
+          "type": {
             "type": "string",
-            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
-          },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
+            "description": "This message is triggered when the tool call is delayed.\n\nThere are the two things that can trigger this message:\n1. The user talks with the assistant while your server is processing the request. Default is \"Sorry, a few more seconds.\"\n2. The server doesn't respond within `timingMilliseconds`.\n\nThis message is never triggered for async tool calls.",
+            "enum": [
+              "request-response-delayed"
+            ]
           },
-          "maxTokens": {
+          "timingMilliseconds": {
             "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
+            "minimum": 100,
+            "maximum": 120000,
+            "example": 1000,
+            "description": "The number of milliseconds to wait for the server response before saying this message."
           },
-          "emotionRecognitionEnabled": {
-            "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          "content": {
+            "type": "string",
+            "description": "This is the content that the assistant says when this message is triggered.",
+            "maxLength": 1000
           },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+          "conditions": {
+            "description": "This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Condition"
+            }
           }
         },
         "required": [
-          "provider",
-          "url",
-          "model"
+          "type"
         ]
       },
-      "DeepInfraModel": {
+      "CreateDtmfToolDTO": {
         "type": "object",
         "properties": {
           "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
-          },
-          "tools": {
             "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
-              }
-            ]
-          },
-          "knowledgeBaseId": {
-            "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
-          },
-          "provider": {
+          "type": {
             "type": "string",
             "enum": [
-              "deepinfra"
-            ]
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
-          },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
-          },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
-          },
-          "emotionRecognitionEnabled": {
-            "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
-          },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+              "dtmf"
+            ],
+            "description": "The type of tool. \"dtmf\" for DTMF tool."
           }
         },
         "required": [
-          "provider",
-          "model"
+          "type"
         ]
       },
-      "DeepSeekModel": {
+      "CreateEndCallToolDTO": {
         "type": "object",
         "properties": {
           "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
-          },
-          "tools": {
             "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "endCall"
+            ],
+            "description": "The type of tool. \"endCall\" for End Call tool."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CreateVoicemailToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
-              }
+          "type": {
+            "type": "string",
+            "deprecated": true,
+            "enum": [
+              "voicemail"
+            ],
+            "description": "The type of tool. \"voicemail\" for Voicemail tool."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "JsonSchema": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of output you'd like.\n\n`string`, `number`, `integer`, `boolean` are the primitive types and should be obvious.\n\n`array` and `object` are more interesting and quite powerful. They allow you to define nested structures.\n\nFor `array`, you can define the schema of the items in the array using the `items` property.\n\nFor `object`, you can define the properties of the object using the `properties` property.",
+            "enum": [
+              "string",
+              "number",
+              "integer",
+              "boolean",
+              "array",
+              "object"
             ]
           },
-          "knowledgeBaseId": {
+          "items": {
+            "type": "object",
+            "description": "This is required if the type is \"array\". This is the schema of the items in the array.\n\nThis is of type JsonSchema. However, Swagger doesn't support circular references."
+          },
+          "properties": {
+            "type": "object",
+            "description": "This is required if the type is \"object\". This specifies the properties of the object.\n\nThis is a map of string to JsonSchema. However, Swagger doesn't support circular references."
+          },
+          "description": {
             "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
+            "description": "This is the description to help the model understand what it needs to output."
           },
-          "model": {
+          "pattern": {
             "type": "string",
-            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
-            "enum": [
-              "deepseek-chat",
-              "deepseek-reasoner"
-            ]
+            "description": "This is the pattern of the string. This is a regex that will be used to validate the data in question. To use a common format, use the `format` property instead.\n\nOpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs#supported-properties"
           },
-          "provider": {
+          "format": {
             "type": "string",
+            "description": "This is the format of the string. To pass a regex, use the `pattern` property instead.\n\nOpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions",
             "enum": [
-              "deep-seek"
+              "date-time",
+              "time",
+              "date",
+              "duration",
+              "email",
+              "hostname",
+              "ipv4",
+              "ipv6",
+              "uuid"
             ]
           },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
-          },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
+          "required": {
+            "description": "This is a list of properties that are required.\n\nThis only makes sense if the type is \"object\".",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "emotionRecognitionEnabled": {
-            "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          "enum": {
+            "description": "This array specifies the allowed values that can be used to restrict the output of the model.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+          "title": {
+            "type": "string",
+            "description": "This is the title of the schema."
           }
         },
         "required": [
-          "model",
-          "provider"
+          "type"
         ]
       },
-      "GeminiMultimodalLivePrebuiltVoiceConfig": {
+      "OpenAIFunctionParameters": {
         "type": "object",
         "properties": {
-          "voiceName": {
+          "type": {
             "type": "string",
+            "description": "This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties.",
             "enum": [
-              "Puck",
-              "Charon",
-              "Kore",
-              "Fenrir",
-              "Aoede"
+              "object"
             ]
+          },
+          "properties": {
+            "type": "object",
+            "description": "This provides a description of the properties required by the function.\nJSON Schema can be used to specify expectations for each property.\nRefer to [this doc](https://ajv.js.org/json-schema.html#json-data-type) for a comprehensive guide on JSON Schema.",
+            "additionalProperties": {
+              "$ref": "#/components/schemas/JsonSchema"
+            }
+          },
+          "required": {
+            "description": "This specifies the properties that are required by the function.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           }
         },
         "required": [
-          "voiceName"
+          "type",
+          "properties"
         ]
       },
-      "GeminiMultimodalLiveVoiceConfig": {
+      "OpenAIFunction": {
         "type": "object",
         "properties": {
-          "prebuiltVoiceConfig": {
-            "$ref": "#/components/schemas/GeminiMultimodalLivePrebuiltVoiceConfig"
+          "strict": {
+            "type": "boolean",
+            "description": "This is a boolean that controls whether to enable strict schema adherence when generating the function call. If set to true, the model will follow the exact schema defined in the parameters field. Only a subset of JSON Schema is supported when strict is true. Learn more about Structured Outputs in the [OpenAI guide](https://openai.com/index/introducing-structured-outputs-in-the-api/).\n\n@default false",
+            "default": false
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the the name of the function to be called.\n\nMust be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.",
+            "maxLength": 64,
+            "pattern": "/^[a-zA-Z0-9_-]{1,64}$/"
+          },
+          "description": {
+            "type": "string",
+            "description": "This is the description of what the function does, used by the AI to choose when and how to call the function.",
+            "maxLength": 1000
+          },
+          "parameters": {
+            "description": "These are the parameters the functions accepts, described as a JSON Schema object.\n\nSee the [OpenAI guide](https://platform.openai.com/docs/guides/function-calling) for examples, and the [JSON Schema reference](https://json-schema.org/understanding-json-schema) for documentation about the format.\n\nOmitting parameters defines a function with an empty parameter list.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/OpenAIFunctionParameters"
+              }
+            ]
           }
         },
         "required": [
-          "prebuiltVoiceConfig"
+          "name"
         ]
       },
-      "GeminiMultimodalLiveSpeechConfig": {
-        "type": "object",
-        "properties": {
-          "voiceConfig": {
-            "$ref": "#/components/schemas/GeminiMultimodalLiveVoiceConfig"
-          }
-        },
-        "required": [
-          "voiceConfig"
-        ]
-      },
-      "GoogleRealtimeConfig": {
-        "type": "object",
-        "properties": {
-          "topP": {
-            "type": "number",
-            "description": "This is the nucleus sampling parameter that controls the cumulative probability of tokens considered during text generation.\nOnly applicable with the Gemini Flash 2.0 Multimodal Live API."
-          },
-          "topK": {
-            "type": "number",
-            "description": "This is the top-k sampling parameter that limits the number of highest probability tokens considered during text generation.\nOnly applicable with the Gemini Flash 2.0 Multimodal Live API."
-          },
-          "presencePenalty": {
-            "type": "number",
-            "description": "This is the presence penalty parameter that influences the model's likelihood to repeat information by penalizing tokens based on their presence in the text.\nOnly applicable with the Gemini Flash 2.0 Multimodal Live API."
-          },
-          "frequencyPenalty": {
-            "type": "number",
-            "description": "This is the frequency penalty parameter that influences the model's likelihood to repeat tokens by penalizing them based on their frequency in the text.\nOnly applicable with the Gemini Flash 2.0 Multimodal Live API."
-          },
-          "speechConfig": {
-            "description": "This is the speech configuration object that defines the voice settings to be used for the model's speech output.\nOnly applicable with the Gemini Flash 2.0 Multimodal Live API.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/GeminiMultimodalLiveSpeechConfig"
-              }
-            ]
-          }
-        }
-      },
-      "GoogleModel": {
+      "CreateFunctionToolDTO": {
         "type": "object",
         "properties": {
           "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
-          },
-          "tools": {
             "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
-              }
-            ]
-          },
-          "knowledgeBaseId": {
-            "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
-          },
-          "model": {
+          "type": {
             "type": "string",
-            "description": "This is the Google model that will be used.",
             "enum": [
-              "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"
-            ]
+              "function"
+            ],
+            "description": "The type of tool. \"function\" for Function tool."
           },
-          "provider": {
-            "type": "string",
-            "enum": [
-              "google"
-            ]
+          "async": {
+            "type": "boolean",
+            "example": false,
+            "description": "This determines if the tool is async.\n\n  If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\n  If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\n  Defaults to synchronous (`false`)."
           },
-          "realtimeConfig": {
-            "description": "This is the session configuration for the Gemini Flash 2.0 Multimodal Live API.\nOnly applicable if the model `gemini-2.0-flash-realtime-exp` is selected.",
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/GoogleRealtimeConfig"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
-          },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
-          },
-          "emotionRecognitionEnabled": {
-            "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
-          },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+          "function": {
+            "description": "This is the function definition of the tool.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/OpenAIFunction"
+              }
+            ]
           }
         },
         "required": [
-          "model",
-          "provider"
+          "type"
         ]
       },
-      "GroqModel": {
+      "GhlToolMetadata": {
         "type": "object",
         "properties": {
-          "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
+          "workflowId": {
+            "type": "string"
           },
-          "tools": {
+          "locationId": {
+            "type": "string"
+          }
+        }
+      },
+      "CreateGhlToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
             "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
-              }
-            ]
-          },
-          "knowledgeBaseId": {
-            "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
-            "enum": [
-              "deepseek-r1-distill-llama-70b",
-              "llama-3.3-70b-versatile",
-              "llama-3.1-405b-reasoning",
-              "llama-3.1-70b-versatile",
-              "llama-3.1-8b-instant",
-              "mixtral-8x7b-32768",
-              "llama3-8b-8192",
-              "llama3-70b-8192",
-              "gemma2-9b-it"
-            ]
-          },
-          "provider": {
+          "type": {
             "type": "string",
             "enum": [
-              "groq"
-            ]
-          },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
-          },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
-          },
-          "emotionRecognitionEnabled": {
-            "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+              "ghl"
+            ],
+            "description": "The type of tool. \"ghl\" for GHL tool."
           },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+          "metadata": {
+            "$ref": "#/components/schemas/GhlToolMetadata"
           }
         },
         "required": [
-          "model",
-          "provider"
+          "type",
+          "metadata"
         ]
       },
-      "InflectionAIModel": {
+      "MakeToolMetadata": {
         "type": "object",
         "properties": {
-          "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
+          "scenarioId": {
+            "type": "number"
           },
-          "tools": {
+          "triggerHookId": {
+            "type": "number"
+          }
+        }
+      },
+      "CreateMakeToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
             "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+          "type": {
+            "type": "string",
+            "enum": [
+              "make"
+            ],
+            "description": "The type of tool. \"make\" for Make tool."
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/MakeToolMetadata"
+          }
+        },
+        "required": [
+          "type",
+          "metadata"
+        ]
+      },
+      "CustomMessage": {
+        "type": "object",
+        "properties": {
+          "contents": {
             "type": "array",
+            "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.",
             "items": {
-              "type": "string"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TextContent",
+                  "title": "Text"
+                }
+              ]
             }
           },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
+          "type": {
+            "type": "string",
+            "description": "This is a custom message.",
+            "enum": [
+              "custom-message"
+            ]
+          },
+          "content": {
+            "type": "string",
+            "description": "This is the content that the assistant will say when this message is triggered.",
+            "maxLength": 1000
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "TransferDestinationAssistant": {
+        "type": "object",
+        "properties": {
+          "message": {
+            "description": "This is spoken to the customer before connecting them to the destination.\n\nUsage:\n- If this is not provided and transfer tool messages is not provided, default is \"Transferring the call now\".\n- If set to \"\", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant.\n\nThis accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
+                "type": "string"
+              },
+              {
+                "$ref": "#/components/schemas/CustomMessage"
               }
             ]
           },
-          "knowledgeBaseId": {
-            "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
-          },
-          "model": {
+          "type": {
             "type": "string",
-            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
             "enum": [
-              "inflection_3_pi"
+              "assistant"
             ]
           },
-          "provider": {
+          "transferMode": {
             "type": "string",
+            "description": "This is the mode to use for the transfer. Defaults to `rolling-history`.\n\n- `rolling-history`: This is the default mode. It keeps the entire conversation history and appends the new assistant's system message on transfer.\n\n  Example:\n\n  Pre-transfer:\n    system: assistant1 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n\n  Post-transfer:\n    system: assistant1 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n    system: assistant2 system message\n    assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)\n\n- `swap-system-message-in-history`: This replaces the original system message with the new assistant's system message on transfer.\n\n  Example:\n\n  Pre-transfer:\n    system: assistant1 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n\n  Post-transfer:\n    system: assistant2 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n    assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)\n\n- `delete-history`: This deletes the entire conversation history on transfer.\n\n  Example:\n\n  Pre-transfer:\n    system: assistant1 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n\n  Post-transfer:\n    system: assistant2 system message\n    assistant: assistant2 first message\n    user: Yes, please\n    assistant: how can i help?\n    user: i need help with my account\n\n- `swap-system-message-in-history-and-remove-transfer-tool-messages`: This replaces the original system message with the new assistant's system message on transfer and removes transfer tool messages from conversation history sent to the LLM.\n\n  Example:\n\n  Pre-transfer:\n    system: assistant1 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    transfer-tool\n    transfer-tool-result\n    assistant: (destination.message)\n\n  Post-transfer:\n    system: assistant2 system message\n    assistant: assistant1 first message\n    user: hey, good morning\n    assistant: how can i help?\n    user: i need help with my account\n    assistant: (destination.message)\n    assistant: assistant2 first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)\n\n@default 'rolling-history'",
             "enum": [
-              "inflection-ai"
+              "rolling-history",
+              "swap-system-message-in-history",
+              "swap-system-message-in-history-and-remove-transfer-tool-messages",
+              "delete-history"
             ]
           },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
+          "assistantName": {
+            "type": "string",
+            "description": "This is the assistant to transfer the call to."
           },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
+          "description": {
+            "type": "string",
+            "description": "This is the description of the destination, used by the AI to choose when and how to transfer the call."
+          }
+        },
+        "required": [
+          "type",
+          "assistantName"
+        ]
+      },
+      "TransferFallbackPlan": {
+        "type": "object",
+        "properties": {
+          "message": {
+            "description": "This is the message the assistant will deliver to the customer if the transfer fails.",
+            "oneOf": [
+              {
+                "type": "string"
+              },
+              {
+                "$ref": "#/components/schemas/CustomMessage"
+              }
+            ]
           },
-          "emotionRecognitionEnabled": {
+          "endCallEnabled": {
             "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
-          },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+            "description": "This controls what happens after delivering the failure message to the customer.\n- true: End the call after delivering the failure message (default)\n- false: Keep the assistant on the call to continue handling the customer's request\n\n@default true",
+            "default": true
           }
         },
         "required": [
-          "model",
-          "provider"
+          "message"
         ]
       },
-      "OpenAIModel": {
+      "SummaryPlan": {
         "type": "object",
         "properties": {
           "messages": {
-            "description": "This is the starting state for the conversation.",
+            "description": "These are the messages used to generate the summary.\n\n@default: ```\n[\n  {\n    \"role\": \"system\",\n    \"content\": \"You are an expert note-taker. You will be given a transcript of a call. Summarize the call in 2-3 sentences. DO NOT return anything except the summary.\"\n  },\n  {\n    \"role\": \"user\",\n    \"content\": \"Here is the transcript:\\n\\n{{transcript}}\\n\\n. Here is the ended reason of the call:\\n\\n{{endedReason}}\\n\\n\"\n  }\n]```\n\nYou can customize by providing any messages you want.\n\nHere are the template variables available:\n- {{transcript}}: The transcript of the call from `call.artifact.transcript` \n- {{systemPrompt}}: The system prompt of the call from `assistant.model.messages[type=system].content` \n- {{messages}}: The messages of the call from `assistant.model.messages` \n- {{endedReason}}: The ended reason of the call from `call.endedReason`",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
+              "type": "object"
             }
           },
-          "tools": {
-            "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
-                }
-              ]
-            }
+          "enabled": {
+            "type": "boolean",
+            "description": "This determines whether a summary is generated and stored in `call.analysis.summary`. Defaults to true.\n\nUsage:\n- If you want to disable the summary, set this to false.\n\n@default true"
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is how long the request is tried before giving up. When request times out, `call.analysis.summary` will be empty.\n\nUsage:\n- To guarantee the summary is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond.\n\n@default 5 seconds",
+            "minimum": 1,
+            "maximum": 60
+          }
+        }
+      },
+      "TransferPlan": {
+        "type": "object",
+        "properties": {
+          "mode": {
+            "type": "string",
+            "description": "This configures how transfer is executed and the experience of the destination party receiving the call.\n\nUsage:\n- `blind-transfer`: The assistant forwards the call to the destination without any message or summary.\n- `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary.\n- `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer.\n- `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer.\n- `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call.\n- `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and optionally ends the call.\n\n@default 'blind-transfer'",
+            "enum": [
+              "blind-transfer",
+              "blind-transfer-add-summary-to-sip-header",
+              "warm-transfer-say-message",
+              "warm-transfer-say-summary",
+              "warm-transfer-twiml",
+              "warm-transfer-wait-for-operator-to-speak-first-and-then-say-message",
+              "warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary",
+              "warm-transfer-experimental"
+            ]
           },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
+          "message": {
+            "description": "This is the message the assistant will deliver to the destination party before connecting the customer.\n\nUsage:\n- Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, or `warm-transfer-experimental`.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
+                "type": "string"
+              },
+              {
+                "$ref": "#/components/schemas/CustomMessage"
               }
             ]
           },
-          "knowledgeBaseId": {
-            "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
+          "timeout": {
+            "type": "number",
+            "description": "This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary\n\n@default 60",
+            "minimum": 1,
+            "maximum": 600,
+            "default": 60
           },
-          "provider": {
-            "type": "string",
-            "description": "This is the provider that will be used for the model.",
+          "sipVerb": {
+            "type": "object",
+            "description": "This specifies the SIP verb to use while transferring the call.\n- 'refer': Uses SIP REFER to transfer the call (default)\n- 'bye': Ends current call with SIP BYE\n- 'dial': Uses SIP DIAL to transfer the call",
+            "default": "refer",
             "enum": [
-              "openai"
+              "refer",
+              "bye",
+              "dial"
             ]
           },
-          "model": {
+          "holdAudioUrl": {
             "type": "string",
-            "description": "This is the OpenAI model that will be used.",
-            "enum": [
-              "gpt-4.1",
-              "gpt-4.1-mini",
-              "gpt-4.1-nano",
-              "gpt-4.5-preview",
-              "chatgpt-4o-latest",
-              "o3-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"
-            ]
+            "description": "This is the URL to an audio file played while the customer is on hold during transfer.\n\nUsage:\n- Used only when `mode` is `warm-transfer-experimental`.\n- Used when transferring calls to play hold audio for the customer.\n- Must be a publicly accessible URL to an audio file.\n- Supported formats: MP3 and WAV.\n- If not provided, the default hold audio will be used."
           },
-          "fallbackModels": {
-            "type": "array",
-            "description": "These are the fallback models that will be used if the primary model fails. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest fallbacks that make sense.",
-            "enum": [
-              "gpt-4.1",
-              "gpt-4.1-mini",
-              "gpt-4.1-nano",
-              "gpt-4.5-preview",
-              "chatgpt-4o-latest",
-              "o3-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"
-            ],
-            "example": [
-              "gpt-4-0125-preview",
-              "gpt-4-0613"
-            ],
-            "items": {
-              "type": "string",
-              "enum": [
-                "gpt-4.1",
-                "gpt-4.1-mini",
-                "gpt-4.1-nano",
-                "gpt-4.5-preview",
-                "chatgpt-4o-latest",
-                "o3-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"
-              ]
-            }
+          "transferCompleteAudioUrl": {
+            "type": "string",
+            "description": "This is the URL to an audio file played after the warm transfer message or summary is delivered to the destination party.\nIt can be used to play a custom sound like 'beep' to notify that the transfer is complete.\n\nUsage:\n- Used only when `mode` is `warm-transfer-experimental`.\n- Used when transferring calls to play hold audio for the destination party.\n- Must be a publicly accessible URL to an audio file.\n- Supported formats: MP3 and WAV."
           },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
+          "twiml": {
+            "type": "string",
+            "description": "This is the TwiML instructions to execute on the destination call leg before connecting the customer.\n\nUsage:\n- Used only when `mode` is `warm-transfer-twiml`.\n- Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs.\n- Maximum length is 4096 characters.\n\nExample:\n```\n<Say voice=\"alice\" language=\"en-US\">Hello, transferring a customer to you.</Say>\n<Pause length=\"2\"/>\n<Say>They called about billing questions.</Say>\n```",
+            "maxLength": 4096
           },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
+          "summaryPlan": {
+            "description": "This is the plan for generating a summary of the call to present to the destination party.\n\nUsage:\n- Used only when `mode` is `blind-transfer-add-summary-to-sip-header` or `warm-transfer-say-summary` or `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary` or `warm-transfer-experimental`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SummaryPlan"
+              }
+            ]
           },
-          "emotionRecognitionEnabled": {
+          "sipHeadersInReferToEnabled": {
             "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+            "description": "This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params.\n\n@default false"
           },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+          "fallbackPlan": {
+            "description": "This configures the fallback plan when the transfer fails (destination unreachable, busy, or not human).\n\nUsage:\n- Used only when `mode` is `warm-transfer-experimental`.\n- If not provided when using `warm-transfer-experimental`, a default message will be used.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/TransferFallbackPlan"
+              }
+            ]
           }
         },
         "required": [
-          "provider",
-          "model"
+          "mode"
         ]
       },
-      "OpenRouterModel": {
+      "TransferDestinationNumber": {
         "type": "object",
         "properties": {
-          "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
+          "message": {
+            "description": "This is spoken to the customer before connecting them to the destination.\n\nUsage:\n- If this is not provided and transfer tool messages is not provided, default is \"Transferring the call now\".\n- If set to \"\", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant.\n\nThis accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.",
+            "oneOf": [
+              {
+                "type": "string"
+              },
+              {
+                "$ref": "#/components/schemas/CustomMessage"
+              }
+            ]
           },
-          "tools": {
-            "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
-                }
-              ]
-            }
+          "type": {
+            "type": "string",
+            "enum": [
+              "number"
+            ]
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "numberE164CheckEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
+            "default": true
           },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
-            "oneOf": [
+          "number": {
+            "type": "string",
+            "description": "This is the phone number to transfer the call to.",
+            "minLength": 3,
+            "maxLength": 40
+          },
+          "extension": {
+            "type": "string",
+            "description": "This is the extension to dial after transferring the call to the `number`.",
+            "minLength": 1,
+            "maxLength": 10
+          },
+          "callerId": {
+            "type": "string",
+            "description": "This is the caller ID to use when transferring the call to the `number`.\n\nUsage:\n- If not provided, the caller ID will be the number the call is coming from. Example, +14151111111 calls in to and the assistant transfers out to +16470000000. +16470000000 will see +14151111111 as the caller.\n- To change this behavior, provide a `callerId`.\n- Set to '{{customer.number}}' to always use the customer's number as the caller ID.\n- Set to '{{phoneNumber.number}}' to always use the phone number of the assistant as the caller ID.\n- Set to any E164 number to always use that number as the caller ID. This needs to be a number that is owned or verified by your Transport provider like Twilio.\n\nFor Twilio, you can read up more here: https://www.twilio.com/docs/voice/twiml/dial#callerid",
+            "maxLength": 40
+          },
+          "transferPlan": {
+            "description": "This configures how transfer is executed and the experience of the destination party receiving the call. Defaults to `blind-transfer`.\n\n@default `transferPlan.mode='blind-transfer'`",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
+                "$ref": "#/components/schemas/TransferPlan"
               }
             ]
           },
-          "knowledgeBaseId": {
+          "description": {
             "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
+            "description": "This is the description of the destination, used by the AI to choose when and how to transfer the call."
+          }
+        },
+        "required": [
+          "type",
+          "number"
+        ]
+      },
+      "TransferDestinationSip": {
+        "type": "object",
+        "properties": {
+          "message": {
+            "description": "This is spoken to the customer before connecting them to the destination.\n\nUsage:\n- If this is not provided and transfer tool messages is not provided, default is \"Transferring the call now\".\n- If set to \"\", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant.\n\nThis accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.",
+            "oneOf": [
+              {
+                "type": "string"
+              },
+              {
+                "$ref": "#/components/schemas/CustomMessage"
+              }
+            ]
           },
-          "provider": {
+          "type": {
             "type": "string",
             "enum": [
-              "openrouter"
+              "sip"
             ]
           },
-          "model": {
+          "sipUri": {
             "type": "string",
-            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
-          },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
+            "description": "This is the SIP URI to transfer the call to."
           },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
+          "transferPlan": {
+            "description": "This configures how transfer is executed and the experience of the destination party receiving the call. Defaults to `blind-transfer`.\n\n@default `transferPlan.mode='blind-transfer'`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/TransferPlan"
+              }
+            ]
           },
-          "emotionRecognitionEnabled": {
-            "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          "sipHeaders": {
+            "type": "object",
+            "description": "These are custom headers to be added to SIP refer during transfer call."
           },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+          "description": {
+            "type": "string",
+            "description": "This is the description of the destination, used by the AI to choose when and how to transfer the call."
           }
         },
         "required": [
-          "provider",
-          "model"
+          "type",
+          "sipUri"
         ]
       },
-      "PerplexityAIModel": {
+      "CreateTransferCallToolDTO": {
         "type": "object",
         "properties": {
           "messages": {
-            "description": "This is the starting state for the conversation.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
-            }
-          },
-          "tools": {
             "type": "array",
-            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                  "title": "DtmfTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                  "title": "EndCallTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                  "title": "FunctionTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                  "title": "GoogleCalendarCreateEventTool"
-                },
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "transferCall"
+            ]
+          },
+          "destinations": {
+            "type": "array",
+            "description": "These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                  "title": "GoogleSheetsRowAppendTool"
+                  "$ref": "#/components/schemas/TransferDestinationAssistant",
+                  "title": "Assistant"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
+                  "$ref": "#/components/schemas/TransferDestinationNumber",
+                  "title": "Number"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
-                  "title": "SlackSendMessageTool"
+                  "$ref": "#/components/schemas/TransferDestinationSip",
+                  "title": "Sip"
                 }
               ]
             }
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CreateCustomKnowledgeBaseDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "description": "This knowledge base is bring your own knowledge base implementation.",
+            "enum": [
+              "custom-knowledge-base"
+            ]
           },
-          "toolIds": {
-            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "knowledgeBase": {
-            "description": "These are the options for the knowledge base.",
-            "oneOf": [
+          "server": {
+            "description": "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"messsage\": {\n    \"type\": \"knowledge-base-request\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"content\": \"Why is ocean blue?\"\n      }\n    ],\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected:\n```\n{\n  \"message\": {\n     \"role\": \"assistant\",\n     \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n  }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK\n  \"documents\": [\n    {\n      \"content\": \"The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.\",\n      \"similarity\": 1\n    },\n    {\n      \"content\": \"Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n      \"similarity\": .5\n    }\n  ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
-                "title": "Custom"
+                "$ref": "#/components/schemas/Server"
               }
             ]
-          },
-          "knowledgeBaseId": {
+          }
+        },
+        "required": [
+          "provider",
+          "server"
+        ]
+      },
+      "KnowledgeBase": {
+        "type": "object",
+        "properties": {
+          "name": {
             "type": "string",
-            "description": "This is the ID of the knowledge base the model will use."
+            "description": "The name of the knowledge base",
+            "example": "My Knowledge Base"
           },
           "provider": {
             "type": "string",
+            "description": "The provider of the knowledge base",
             "enum": [
-              "perplexity-ai"
-            ]
+              "google"
+            ],
+            "example": "google"
           },
           "model": {
             "type": "string",
-            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
-          },
-          "temperature": {
-            "type": "number",
-            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
-            "minimum": 0,
-            "maximum": 2
-          },
-          "maxTokens": {
-            "type": "number",
-            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
-            "minimum": 50,
-            "maximum": 10000
+            "description": "The model to use for the knowledge base",
+            "enum": [
+              "gemini-2.5-pro",
+              "gemini-2.5-flash",
+              "gemini-2.5-flash-lite",
+              "gemini-2.0-flash-thinking-exp",
+              "gemini-2.0-pro-exp-02-05",
+              "gemini-2.0-flash",
+              "gemini-2.0-flash-lite",
+              "gemini-2.0-flash-exp",
+              "gemini-2.0-flash-realtime-exp",
+              "gemini-1.5-flash",
+              "gemini-1.5-flash-002",
+              "gemini-1.5-pro",
+              "gemini-1.5-pro-002",
+              "gemini-1.0-pro"
+            ]
           },
-          "emotionRecognitionEnabled": {
-            "type": "boolean",
-            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          "description": {
+            "type": "string",
+            "description": "A description of the knowledge base"
           },
-          "numFastTurns": {
-            "type": "number",
-            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
-            "minimum": 0
+          "fileIds": {
+            "description": "The file IDs associated with this knowledge base",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           }
         },
         "required": [
+          "name",
           "provider",
-          "model"
+          "description",
+          "fileIds"
         ]
       },
-      "TogetherAIModel": {
+      "CreateQueryToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "query"
+            ],
+            "description": "The type of tool. \"query\" for Query tool."
+          },
+          "knowledgeBases": {
+            "description": "The knowledge bases to query",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/KnowledgeBase"
+            }
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CreateGoogleCalendarCreateEventToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "google.calendar.event.create"
+            ],
+            "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar Create Event tool."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CreateGoogleSheetsRowAppendToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "google.sheets.row.append"
+            ],
+            "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets Row Append tool."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CreateGoogleCalendarCheckAvailabilityToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "google.calendar.availability.check"
+            ],
+            "description": "The type of tool. \"google.calendar.availability.check\" for Google Calendar Check Availability tool."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CreateSlackSendMessageToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "slack.message.send"
+            ],
+            "description": "The type of tool. \"slack.message.send\" for Slack Send Message tool."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "McpToolMetadata": {
+        "type": "object",
+        "properties": {
+          "protocol": {
+            "type": "string",
+            "enum": [
+              "sse",
+              "shttp"
+            ],
+            "description": "This is the protocol used for MCP communication. Defaults to Streamable HTTP."
+          }
+        }
+      },
+      "CreateMcpToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "mcp"
+            ],
+            "description": "The type of tool. \"mcp\" for MCP tool."
+          },
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/McpToolMetadata"
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CreateGoHighLevelCalendarAvailabilityToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "gohighlevel.calendar.availability.check"
+            ],
+            "description": "The type of tool. \"gohighlevel.calendar.availability.check\" for GoHighLevel Calendar Availability Check tool."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CreateGoHighLevelCalendarEventCreateToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "gohighlevel.calendar.event.create"
+            ],
+            "description": "The type of tool. \"gohighlevel.calendar.event.create\" for GoHighLevel Calendar Event Create tool."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CreateGoHighLevelContactCreateToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "gohighlevel.contact.create"
+            ],
+            "description": "The type of tool. \"gohighlevel.contact.create\" for GoHighLevel Contact Create tool."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CreateGoHighLevelContactGetToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "gohighlevel.contact.get"
+            ],
+            "description": "The type of tool. \"gohighlevel.contact.get\" for GoHighLevel Contact Get tool."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "AnyscaleModel": {
         "type": "object",
         "properties": {
           "messages": {
@@ -10707,6 +11357,18 @@
             "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
             "items": {
               "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
                 {
                   "$ref": "#/components/schemas/CreateDtmfToolDTO",
                   "title": "DtmfTool"
@@ -10715,29 +11377,29 @@
                   "$ref": "#/components/schemas/CreateEndCallToolDTO",
                   "title": "EndCallTool"
                 },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
                 {
                   "$ref": "#/components/schemas/CreateFunctionToolDTO",
                   "title": "FunctionTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
                 },
                 {
                   "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
@@ -10748,12 +11410,28 @@
                   "title": "GoogleSheetsRowAppendTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
                 },
                 {
                   "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
                   "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
                 }
               ]
             }
@@ -10781,7 +11459,7 @@
           "provider": {
             "type": "string",
             "enum": [
-              "together-ai"
+              "anyscale"
             ]
           },
           "model": {
@@ -10815,223 +11493,354 @@
           "model"
         ]
       },
-      "AIEdgeCondition": {
+      "AnthropicThinkingConfig": {
         "type": "object",
         "properties": {
           "type": {
             "type": "string",
             "enum": [
-              "ai"
+              "enabled"
             ]
           },
-          "prompt": {
-            "type": "string",
-            "description": "This is the prompt for the AI edge condition. It should evaluate to a boolean.",
-            "maxLength": 1000
+          "budgetTokens": {
+            "type": "number",
+            "description": "The maximum number of tokens to allocate for thinking.\nMust be between 1024 and 100000 tokens.",
+            "minimum": 1024,
+            "maximum": 100000
           }
         },
         "required": [
           "type",
-          "prompt"
+          "budgetTokens"
         ]
       },
-      "LogicEdgeCondition": {
+      "AnthropicModel": {
         "type": "object",
         "properties": {
-          "type": {
-            "type": "string",
-            "enum": [
-              "logic"
-            ]
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
           },
-          "liquid": {
-            "type": "string",
-            "maxLength": 100
-          }
-        },
-        "required": [
-          "type",
-          "liquid"
-        ]
-      },
-      "FailedEdgeCondition": {
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string",
-            "enum": [
-              "failed"
-            ]
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "Edge": {
-        "type": "object",
-        "properties": {
-          "condition": {
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
+              ]
+            }
+          },
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/AIEdgeCondition",
-                "title": "AIEdgeCondition"
-              },
-              {
-                "$ref": "#/components/schemas/LogicEdgeCondition",
-                "title": "LogicEdgeCondition"
-              },
-              {
-                "$ref": "#/components/schemas/FailedEdgeCondition",
-                "title": "FailedEdgeCondition"
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
               }
             ]
           },
-          "from": {
+          "knowledgeBaseId": {
             "type": "string",
-            "maxLength": 80
+            "description": "This is the ID of the knowledge base the model will use."
           },
-          "to": {
+          "model": {
             "type": "string",
-            "maxLength": 80
+            "description": "The specific Anthropic/Claude model that will be used.",
+            "enum": [
+              "claude-3-opus-20240229",
+              "claude-3-sonnet-20240229",
+              "claude-3-haiku-20240307",
+              "claude-3-5-sonnet-20240620",
+              "claude-3-5-sonnet-20241022",
+              "claude-3-5-haiku-20241022",
+              "claude-3-7-sonnet-20250219",
+              "claude-opus-4-20250514",
+              "claude-sonnet-4-20250514"
+            ]
           },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the edge."
+          "provider": {
+            "type": "string",
+            "description": "The provider identifier for Anthropic.",
+            "enum": [
+              "anthropic"
+            ]
+          },
+          "thinking": {
+            "description": "Optional configuration for Anthropic's thinking feature.\nOnly applicable for claude-3-7-sonnet-20250219 model.\nIf provided, maxTokens must be greater than thinking.budgetTokens.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AnthropicThinkingConfig"
+              }
+            ]
+          },
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
+            "maximum": 2
+          },
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
+          },
+          "emotionRecognitionEnabled": {
+            "type": "boolean",
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          },
+          "numFastTurns": {
+            "type": "number",
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
           }
         },
         "required": [
-          "from",
-          "to"
+          "model",
+          "provider"
         ]
       },
-      "Workflow": {
+      "CerebrasModel": {
         "type": "object",
         "properties": {
-          "nodes": {
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
+          },
+          "tools": {
             "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/Say",
-                  "title": "Say"
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
                 },
                 {
-                  "$ref": "#/components/schemas/Gather",
-                  "title": "Gather"
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
                 },
                 {
-                  "$ref": "#/components/schemas/ApiRequest",
-                  "title": "ApiRequest"
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
                 },
                 {
-                  "$ref": "#/components/schemas/Hangup",
-                  "title": "Hangup"
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
                 },
                 {
-                  "$ref": "#/components/schemas/Transfer",
-                  "title": "Transfer"
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
                 }
               ]
             }
           },
-          "model": {
-            "description": "These are the options for the workflow's LLM.",
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/AnthropicModel",
-                "title": "Anthropic"
-              },
-              {
-                "$ref": "#/components/schemas/AnyscaleModel",
-                "title": "Anyscale"
-              },
-              {
-                "$ref": "#/components/schemas/CerebrasModel",
-                "title": "Cerebras"
-              },
-              {
-                "$ref": "#/components/schemas/CustomLLMModel",
-                "title": "CustomLLM"
-              },
-              {
-                "$ref": "#/components/schemas/DeepInfraModel",
-                "title": "DeepInfra"
-              },
-              {
-                "$ref": "#/components/schemas/DeepSeekModel",
-                "title": "DeepSeek"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleModel",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/GroqModel",
-                "title": "Groq"
-              },
-              {
-                "$ref": "#/components/schemas/InflectionAIModel",
-                "title": "InflectionAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIModel",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenRouterModel",
-                "title": "OpenRouter"
-              },
-              {
-                "$ref": "#/components/schemas/PerplexityAIModel",
-                "title": "PerplexityAI"
-              },
-              {
-                "$ref": "#/components/schemas/TogetherAIModel",
-                "title": "Together"
-              },
-              {
-                "$ref": "#/components/schemas/XaiModel",
-                "title": "XAI"
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
               }
             ]
           },
-          "id": {
-            "type": "string"
+          "knowledgeBaseId": {
+            "type": "string",
+            "description": "This is the ID of the knowledge base the model will use."
           },
-          "orgId": {
-            "type": "string"
+          "model": {
+            "type": "string",
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
+            "enum": [
+              "llama3.1-8b",
+              "llama-3.3-70b"
+            ]
           },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string"
+          "provider": {
+            "type": "string",
+            "enum": [
+              "cerebras"
+            ]
           },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string"
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
+            "maximum": 2
           },
-          "name": {
-            "type": "string",
-            "maxLength": 80
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
           },
-          "edges": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Edge"
-            }
+          "emotionRecognitionEnabled": {
+            "type": "boolean",
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          },
+          "numFastTurns": {
+            "type": "number",
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
           }
         },
         "required": [
-          "nodes",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "name",
-          "edges"
+          "model",
+          "provider"
         ]
       },
-      "VapiModel": {
+      "CustomLLMModel": {
         "type": "object",
         "properties": {
           "messages": {
@@ -11046,6 +11855,18 @@
             "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
             "items": {
               "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
                 {
                   "$ref": "#/components/schemas/CreateDtmfToolDTO",
                   "title": "DtmfTool"
@@ -11054,29 +11875,29 @@
                   "$ref": "#/components/schemas/CreateEndCallToolDTO",
                   "title": "EndCallTool"
                 },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
                 {
                   "$ref": "#/components/schemas/CreateFunctionToolDTO",
                   "title": "FunctionTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
                 },
                 {
                   "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
@@ -11087,12 +11908,28 @@
                   "title": "GoogleSheetsRowAppendTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
                 },
                 {
                   "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
                   "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
                 }
               ]
             }
@@ -11119,22 +11956,40 @@
           },
           "provider": {
             "type": "string",
+            "description": "This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used.",
             "enum": [
-              "vapi"
+              "custom-llm"
             ]
           },
-          "workflowId": {
+          "metadataSendMode": {
             "type": "string",
-            "description": "This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead."
-          },
-          "workflow": {
-            "description": "This is the workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Workflow"
-              }
+            "description": "This determines whether metadata is sent in requests to the custom provider.\n\n- `off` will not send any metadata. payload will look like `{ messages }`\n- `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }`\n- `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }`\n\nFurther, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload.\n\nDefault is `variable`.",
+            "enum": [
+              "off",
+              "variable",
+              "destructured"
             ]
           },
+          "headers": {
+            "type": "object",
+            "description": "Custom headers to send with requests. These headers can override default OpenAI headers except for Authorization (which should be specified using a custom-llm credential).",
+            "additionalProperties": {
+              "type": "string"
+            },
+            "example": {
+              "X-Custom-Header": "value"
+            }
+          },
+          "url": {
+            "type": "string",
+            "description": "These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1"
+          },
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds.",
+            "minimum": 0,
+            "maximum": 300
+          },
           "model": {
             "type": "string",
             "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
@@ -11163,10 +12018,11 @@
         },
         "required": [
           "provider",
+          "url",
           "model"
         ]
       },
-      "XaiModel": {
+      "DeepInfraModel": {
         "type": "object",
         "properties": {
           "messages": {
@@ -11181,6 +12037,18 @@
             "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
             "items": {
               "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
                 {
                   "$ref": "#/components/schemas/CreateDtmfToolDTO",
                   "title": "DtmfTool"
@@ -11189,29 +12057,29 @@
                   "$ref": "#/components/schemas/CreateEndCallToolDTO",
                   "title": "EndCallTool"
                 },
-                {
-                  "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                  "title": "VoicemailTool"
-                },
                 {
                   "$ref": "#/components/schemas/CreateFunctionToolDTO",
                   "title": "FunctionTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGhlToolDTO",
-                  "title": "GhlTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateMakeToolDTO",
-                  "title": "MakeTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                  "title": "TransferTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateQueryToolDTO",
-                  "title": "QueryTool"
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
                 },
                 {
                   "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
@@ -11222,12 +12090,28 @@
                   "title": "GoogleSheetsRowAppendTool"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
-                  "title": "GoogleCalendarCheckAvailabilityTool"
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
                 },
                 {
                   "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
                   "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
                 }
               ]
             }
@@ -11252,20 +12136,15 @@
             "type": "string",
             "description": "This is the ID of the knowledge base the model will use."
           },
-          "model": {
+          "provider": {
             "type": "string",
-            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
             "enum": [
-              "grok-beta",
-              "grok-2",
-              "grok-3"
+              "deepinfra"
             ]
           },
-          "provider": {
+          "model": {
             "type": "string",
-            "enum": [
-              "xai"
-            ]
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
           },
           "temperature": {
             "type": "number",
@@ -11290,7020 +12169,13208 @@
           }
         },
         "required": [
-          "model",
-          "provider"
-        ]
-      },
-      "ExactReplacement": {
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string",
-            "description": "This is the exact replacement type. You can use this to replace a specific word or phrase with a different word or phrase.\n\nUsage:\n- Replace \"hello\" with \"hi\": { type: 'exact', key: 'hello', value: 'hi' }\n- Replace \"good morning\" with \"good day\": { type: 'exact', key: 'good morning', value: 'good day' }\n- Replace a specific name: { type: 'exact', key: 'John Doe', value: 'Jane Smith' }\n- Replace an acronym: { type: 'exact', key: 'AI', value: 'Artificial Intelligence' }\n- Replace a company name with its phonetic pronunciation: { type: 'exact', key: 'Vapi', value: 'Vappy' }",
-            "enum": [
-              "exact"
-            ]
-          },
-          "replaceAllEnabled": {
-            "type": "boolean",
-            "description": "This option let's you control whether to replace all instances of the key or only the first one. By default, it only replaces the first instance.\nExamples:\n- For { type: 'exact', key: 'hello', value: 'hi', replaceAllEnabled: false }. Before: \"hello world, hello universe\" | After: \"hi world, hello universe\"\n- For { type: 'exact', key: 'hello', value: 'hi', replaceAllEnabled: true }. Before: \"hello world, hello universe\" | After: \"hi world, hi universe\"\n@default false",
-            "default": false
-          },
-          "key": {
-            "type": "string",
-            "description": "This is the key to replace."
-          },
-          "value": {
-            "type": "string",
-            "description": "This is the value that will replace the match.",
-            "maxLength": 1000
-          }
-        },
-        "required": [
-          "type",
-          "key",
-          "value"
-        ]
-      },
-      "RegexOption": {
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string",
-            "description": "This is the type of the regex option. Options are:\n- `ignore-case`: Ignores the case of the text being matched. Add\n- `whole-word`: Matches whole words only.\n- `multi-line`: Matches across multiple lines.",
-            "enum": [
-              "ignore-case",
-              "whole-word",
-              "multi-line"
-            ]
-          },
-          "enabled": {
-            "type": "boolean",
-            "description": "This is whether to enable the option.\n\n@default false"
-          }
-        },
-        "required": [
-          "type",
-          "enabled"
+          "provider",
+          "model"
         ]
       },
-      "RegexReplacement": {
+      "DeepSeekModel": {
         "type": "object",
         "properties": {
-          "type": {
-            "type": "string",
-            "description": "This is the regex replacement type. You can use this to replace a word or phrase that matches a pattern.\n\nUsage:\n- Replace all numbers with \"some number\": { type: 'regex', regex: '\\\\d+', value: 'some number' }\n- Replace email addresses with \"[EMAIL]\": { type: 'regex', regex: '\\\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Z|a-z]{2,}\\\\b', value: '[EMAIL]' }\n- Replace phone numbers with a formatted version: { type: 'regex', regex: '(\\\\d{3})(\\\\d{3})(\\\\d{4})', value: '($1) $2-$3' }\n- Replace all instances of \"color\" or \"colour\" with \"hue\": { type: 'regex', regex: 'colou?r', value: 'hue' }\n- Capitalize the first letter of every sentence: { type: 'regex', regex: '(?<=\\\\. |^)[a-z]', value: (match) => match.toUpperCase() }",
-            "enum": [
-              "regex"
-            ]
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
           },
-          "regex": {
-            "type": "string",
-            "description": "This is the regex pattern to replace.\n\nNote:\n- This works by using the `string.replace` method in Node.JS. Eg. `\"hello there\".replace(/hello/g, \"hi\")` will return `\"hi there\"`.\n\nHot tip:\n- In JavaScript, escape `\\` when sending the regex pattern. Eg. `\"hello\\sthere\"` will be sent over the wire as `\"hellosthere\"`. Send `\"hello\\\\sthere\"` instead."
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
+              ]
+            }
           },
-          "options": {
-            "description": "These are the options for the regex replacement. Defaults to all disabled.\n\n@default []",
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/RegexOption"
+              "type": "string"
             }
           },
-          "value": {
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
+              }
+            ]
+          },
+          "knowledgeBaseId": {
             "type": "string",
-            "description": "This is the value that will replace the match.",
-            "maxLength": 1000
+            "description": "This is the ID of the knowledge base the model will use."
+          },
+          "model": {
+            "type": "string",
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
+            "enum": [
+              "deepseek-chat",
+              "deepseek-reasoner"
+            ]
+          },
+          "provider": {
+            "type": "string",
+            "enum": [
+              "deep-seek"
+            ]
+          },
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
+            "maximum": 2
+          },
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
+          },
+          "emotionRecognitionEnabled": {
+            "type": "boolean",
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          },
+          "numFastTurns": {
+            "type": "number",
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
           }
         },
         "required": [
-          "type",
-          "regex",
-          "value"
+          "model",
+          "provider"
         ]
       },
-      "FormatPlan": {
+      "GeminiMultimodalLivePrebuiltVoiceConfig": {
         "type": "object",
         "properties": {
-          "enabled": {
-            "type": "boolean",
-            "description": "This determines whether the chunk is formatted before being sent to the voice provider. This helps with enunciation. This includes phone numbers, emails and addresses. Default `true`.\n\nUsage:\n- To rely on the voice provider's formatting logic, set this to `false`.\n\nIf `voice.chunkPlan.enabled` is `false`, this is automatically `false` since there's no chunk to format.\n\n@default true",
-            "example": true
-          },
-          "numberToDigitsCutoff": {
-            "type": "number",
-            "description": "This is the cutoff after which a number is converted to individual digits instead of being spoken as words.\n\nExample:\n- If cutoff 2025, \"12345\" is converted to \"1 2 3 4 5\" while \"1200\" is converted to \"twelve hundred\".\n\nUsage:\n- If your use case doesn't involve IDs like zip codes, set this to a high value.\n- If your use case involves IDs that are shorter than 5 digits, set this to a lower value.\n\n@default 2025",
-            "minimum": 0,
-            "example": 2025
-          },
-          "replacements": {
-            "type": "array",
-            "description": "These are the custom replacements you can make to the chunk before it is sent to the voice provider.\n\nUsage:\n- To replace a specific word or phrase with a different word or phrase, use the `ExactReplacement` type. Eg. `{ type: 'exact', key: 'hello', value: 'hi' }`\n- To replace a word or phrase that matches a pattern, use the `RegexReplacement` type. Eg. `{ type: 'regex', regex: '\\\\b[a-zA-Z]{5}\\\\b', value: 'hi' }`\n\n@default []",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ExactReplacement",
-                  "title": "ExactReplacement"
-                },
-                {
-                  "$ref": "#/components/schemas/RegexReplacement",
-                  "title": "RegexReplacement"
-                }
-              ]
-            }
-          },
-          "formattersEnabled": {
-            "type": "array",
-            "description": "List of formatters to apply. If not provided, all default formatters will be applied.\nIf provided, only the specified formatters will be applied.\nNote: Some essential formatters like angle bracket removal will always be applied.\n@default undefined",
+          "voiceName": {
+            "type": "string",
             "enum": [
-              "markdown",
-              "asterisk",
-              "quote",
-              "dash",
-              "newline",
-              "colon",
-              "acronym",
-              "dollarAmount",
-              "email",
-              "date",
-              "time",
-              "distance",
-              "unit",
-              "percentage",
-              "phoneNumber",
-              "number"
-            ],
-            "items": {
-              "type": "string",
-              "enum": [
-                "markdown",
-                "asterisk",
-                "quote",
-                "dash",
-                "newline",
-                "colon",
-                "acronym",
-                "dollarAmount",
-                "email",
-                "date",
-                "time",
-                "distance",
-                "unit",
-                "percentage",
-                "phoneNumber",
-                "number"
-              ]
-            }
+              "Puck",
+              "Charon",
+              "Kore",
+              "Fenrir",
+              "Aoede"
+            ]
           }
-        }
+        },
+        "required": [
+          "voiceName"
+        ]
       },
-      "ChunkPlan": {
+      "GeminiMultimodalLiveVoiceConfig": {
         "type": "object",
         "properties": {
-          "enabled": {
-            "type": "boolean",
-            "description": "This determines whether the model output is chunked before being sent to the voice provider. Default `true`.\n\nUsage:\n- To rely on the voice provider's audio generation logic, set this to `false`.\n- If seeing issues with quality, set this to `true`.\n\nIf disabled, Vapi-provided audio control tokens like <flush /> will not work.\n\n@default true",
-            "example": true
+          "prebuiltVoiceConfig": {
+            "$ref": "#/components/schemas/GeminiMultimodalLivePrebuiltVoiceConfig"
+          }
+        },
+        "required": [
+          "prebuiltVoiceConfig"
+        ]
+      },
+      "GeminiMultimodalLiveSpeechConfig": {
+        "type": "object",
+        "properties": {
+          "voiceConfig": {
+            "$ref": "#/components/schemas/GeminiMultimodalLiveVoiceConfig"
+          }
+        },
+        "required": [
+          "voiceConfig"
+        ]
+      },
+      "GoogleRealtimeConfig": {
+        "type": "object",
+        "properties": {
+          "topP": {
+            "type": "number",
+            "description": "This is the nucleus sampling parameter that controls the cumulative probability of tokens considered during text generation.\nOnly applicable with the Gemini Flash 2.0 Multimodal Live API."
           },
-          "minCharacters": {
+          "topK": {
             "type": "number",
-            "description": "This is the minimum number of characters in a chunk.\n\nUsage:\n- To increase quality, set this to a higher value.\n- To decrease latency, set this to a lower value.\n\n@default 30",
-            "minimum": 1,
-            "maximum": 80,
-            "example": 30
+            "description": "This is the top-k sampling parameter that limits the number of highest probability tokens considered during text generation.\nOnly applicable with the Gemini Flash 2.0 Multimodal Live API."
           },
-          "punctuationBoundaries": {
-            "type": "array",
-            "description": "These are the punctuations that are considered valid boundaries for a chunk to be created.\n\nUsage:\n- To increase quality, constrain to fewer boundaries.\n- To decrease latency, enable all.\n\nDefault is automatically set to balance the trade-off between quality and latency based on the provider.",
-            "enum": [
-              "。",
-              "，",
-              ".",
-              "!",
-              "?",
-              ";",
-              ")",
-              "،",
-              "۔",
-              "।",
-              "॥",
-              "|",
-              "||",
-              ",",
-              ":"
-            ],
-            "example": [
-              "。",
-              "，",
-              ".",
-              "!",
-              "?",
-              ";",
-              "،",
-              "۔",
-              "।",
-              "॥",
-              "|",
-              "||",
-              ",",
-              ":"
-            ],
-            "items": {
-              "type": "string",
-              "enum": [
-                "。",
-                "，",
-                ".",
-                "!",
-                "?",
-                ";",
-                ")",
-                "،",
-                "۔",
-                "।",
-                "॥",
-                "|",
-                "||",
-                ",",
-                ":"
-              ]
-            }
+          "presencePenalty": {
+            "type": "number",
+            "description": "This is the presence penalty parameter that influences the model's likelihood to repeat information by penalizing tokens based on their presence in the text.\nOnly applicable with the Gemini Flash 2.0 Multimodal Live API."
           },
-          "formatPlan": {
-            "description": "This is the plan for formatting the chunk before it is sent to the voice provider.",
+          "frequencyPenalty": {
+            "type": "number",
+            "description": "This is the frequency penalty parameter that influences the model's likelihood to repeat tokens by penalizing them based on their frequency in the text.\nOnly applicable with the Gemini Flash 2.0 Multimodal Live API."
+          },
+          "speechConfig": {
+            "description": "This is the speech configuration object that defines the voice settings to be used for the model's speech output.\nOnly applicable with the Gemini Flash 2.0 Multimodal Live API.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/FormatPlan"
+                "$ref": "#/components/schemas/GeminiMultimodalLiveSpeechConfig"
               }
             ]
           }
         }
       },
-      "FallbackPlan": {
+      "GoogleModel": {
         "type": "object",
         "properties": {
-          "voices": {
+          "messages": {
+            "description": "This is the starting state for the conversation.",
             "type": "array",
-            "description": "This is the list of voices to fallback to in the event that the primary voice provider fails.",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
+          },
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/FallbackAzureVoice",
-                  "title": "Azure"
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackCartesiaVoice",
-                  "title": "Cartesia"
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackHumeVoice",
-                  "title": "Hume"
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackCustomVoice",
-                  "title": "CustomVoice"
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackDeepgramVoice",
-                  "title": "Deepgram"
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackElevenLabsVoice",
-                  "title": "ElevenLabs"
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackVapiVoice",
-                  "title": "Vapi"
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackLMNTVoice",
-                  "title": "LMNT"
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackOpenAIVoice",
-                  "title": "OpenAI"
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackPlayHTVoice",
-                  "title": "PlayHT"
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackRimeAIVoice",
-                  "title": "RimeAI"
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackSmallestAIVoice",
-                  "title": "Smallest AI"
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
                 },
                 {
-                  "$ref": "#/components/schemas/FallbackTavusVoice",
-                  "title": "TavusVoice"
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
                 }
               ]
             }
-          }
-        },
-        "required": [
-          "voices"
-        ]
-      },
-      "AzureVoice": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "azure"
-            ]
           },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
             "oneOf": [
               {
-                "type": "string",
-                "enum": [
-                  "andrew",
-                  "brian",
-                  "emma"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "Azure Voice ID"
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
               }
             ]
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+          "knowledgeBaseId": {
+            "type": "string",
+            "description": "This is the ID of the knowledge base the model will use."
+          },
+          "model": {
+            "type": "string",
+            "description": "This is the Google model that will be used.",
+            "enum": [
+              "gemini-2.5-pro",
+              "gemini-2.5-flash",
+              "gemini-2.5-flash-lite",
+              "gemini-2.0-flash-thinking-exp",
+              "gemini-2.0-pro-exp-02-05",
+              "gemini-2.0-flash",
+              "gemini-2.0-flash-lite",
+              "gemini-2.0-flash-exp",
+              "gemini-2.0-flash-realtime-exp",
+              "gemini-1.5-flash",
+              "gemini-1.5-flash-002",
+              "gemini-1.5-pro",
+              "gemini-1.5-pro-002",
+              "gemini-1.0-pro"
+            ]
+          },
+          "provider": {
+            "type": "string",
+            "enum": [
+              "google"
+            ]
+          },
+          "realtimeConfig": {
+            "description": "This is the session configuration for the Gemini Flash 2.0 Multimodal Live API.\nOnly applicable if the model `gemini-2.0-flash-realtime-exp` is selected.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/GoogleRealtimeConfig"
               }
             ]
           },
-          "speed": {
+          "temperature": {
             "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.5,
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
             "maximum": 2
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackPlan"
-              }
-            ]
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
+          },
+          "emotionRecognitionEnabled": {
+            "type": "boolean",
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          },
+          "numFastTurns": {
+            "type": "number",
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
           }
         },
         "required": [
-          "provider",
-          "voiceId"
+          "model",
+          "provider"
         ]
       },
-      "CartesiaExperimentalControls": {
+      "GroqModel": {
         "type": "object",
         "properties": {
-          "speed": {
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "slowest",
-                  "slow",
-                  "normal",
-                  "fast",
-                  "fastest"
-                ],
-                "example": "normal"
-              },
-              {
-                "type": "number",
-                "minimum": -1,
-                "maximum": 1,
-                "example": 0.5
-              }
-            ]
-          },
-          "emotion": {
-            "type": "string",
-            "enum": [
-              "anger:lowest",
-              "anger:low",
-              "anger:high",
-              "anger:highest",
-              "positivity:lowest",
-              "positivity:low",
-              "positivity:high",
-              "positivity:highest",
-              "surprise:lowest",
-              "surprise:low",
-              "surprise:high",
-              "surprise:highest",
-              "sadness:lowest",
-              "sadness:low",
-              "sadness:high",
-              "sadness:highest",
-              "curiosity:lowest",
-              "curiosity:low",
-              "curiosity:high",
-              "curiosity:highest"
-            ],
-            "example": [
-              "happiness:high"
-            ]
-          }
-        }
-      },
-      "CartesiaVoice": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "cartesia"
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
+          },
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
+              ]
+            }
+          },
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
+              }
             ]
           },
-          "voiceId": {
+          "knowledgeBaseId": {
             "type": "string",
-            "description": "The ID of the particular voice you want to use."
+            "description": "This is the ID of the knowledge base the model will use."
           },
           "model": {
             "type": "string",
-            "description": "This is the model that will be used. This is optional and will default to the correct model for the voiceId.",
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
             "enum": [
-              "sonic-2",
-              "sonic-english",
-              "sonic-multilingual",
-              "sonic-preview",
-              "sonic"
-            ],
-            "example": "sonic-english"
+              "deepseek-r1-distill-llama-70b",
+              "llama-3.3-70b-versatile",
+              "llama-3.1-405b-reasoning",
+              "llama-3.1-8b-instant",
+              "llama3-8b-8192",
+              "llama3-70b-8192",
+              "gemma2-9b-it",
+              "meta-llama/llama-4-maverick-17b-128e-instruct",
+              "meta-llama/llama-4-scout-17b-16e-instruct",
+              "mistral-saba-24b",
+              "compound-beta",
+              "compound-beta-mini"
+            ]
           },
-          "language": {
+          "provider": {
             "type": "string",
-            "description": "This is the language that will be used. This is optional and will default to the correct language for the voiceId.",
             "enum": [
-              "en",
-              "de",
-              "es",
-              "fr",
-              "ja",
-              "pt",
-              "zh",
-              "hi",
-              "it",
-              "ko",
-              "nl",
-              "pl",
-              "ru",
-              "sv",
-              "tr"
-            ],
-            "example": "en"
-          },
-          "experimentalControls": {
-            "description": "Experimental controls for Cartesia voice generation",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CartesiaExperimentalControls"
-              }
+              "groq"
             ]
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
+            "maximum": 2
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackPlan"
-              }
-            ]
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
+          },
+          "emotionRecognitionEnabled": {
+            "type": "boolean",
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          },
+          "numFastTurns": {
+            "type": "number",
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
           }
         },
         "required": [
-          "provider",
-          "voiceId"
+          "model",
+          "provider"
         ]
       },
-      "CustomVoice": {
+      "InflectionAIModel": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported.",
-            "enum": [
-              "custom-voice"
-            ]
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
+              ]
+            }
           },
-          "server": {
-            "description": "This is where the voice request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"message\": {\n    \"type\": \"voice-request\",\n    \"text\": \"Hello, world!\",\n    \"sampleRate\": 24000,\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected: 1-channel 16-bit raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport:\n```\nresponse.on('data', (chunk: Buffer) => {\n  outputStream.write(chunk);\n});\n```",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/FallbackPlan"
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
               }
             ]
-          }
-        },
-        "required": [
-          "provider",
-          "server"
-        ]
-      },
-      "DeepgramVoice": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "deepgram"
-            ]
           },
-          "voiceId": {
+          "knowledgeBaseId": {
             "type": "string",
-            "description": "This is the provider-specific ID that will be used.",
-            "enum": [
-              "asteria",
-              "luna",
-              "stella",
-              "athena",
-              "hera",
-              "orion",
-              "arcas",
-              "perseus",
-              "angus",
-              "orpheus",
-              "helios",
-              "zeus",
-              "thalia",
-              "andromeda",
-              "helena",
-              "apollo",
-              "arcas",
-              "aries",
-              "amalthea",
-              "andromeda",
-              "apollo",
-              "arcas",
-              "aries",
-              "asteria",
-              "athena",
-              "atlas",
-              "aurora",
-              "callista",
-              "cora",
-              "cordelia",
-              "delia",
-              "draco",
-              "electra",
-              "harmonia",
-              "helena",
-              "hera",
-              "hermes",
-              "hyperion",
-              "iris",
-              "janus",
-              "juno",
-              "jupiter",
-              "luna",
-              "mars",
-              "minerva",
-              "neptune",
-              "odysseus",
-              "ophelia",
-              "orion",
-              "orpheus",
-              "pandora",
-              "phoebe",
-              "pluto",
-              "saturn",
-              "selene",
-              "thalia",
-              "theia",
-              "vesta",
-              "zeus"
-            ],
-            "title": "This is the Deepgram Voice ID"
+            "description": "This is the ID of the knowledge base the model will use."
           },
           "model": {
             "type": "string",
-            "description": "This is the model that will be used. Defaults to 'aura-2' when not specified.",
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
             "enum": [
-              "aura",
-              "aura-2"
-            ],
-            "example": "aura-2"
-          },
-          "mipOptOut": {
-            "type": "boolean",
-            "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false",
-            "example": false,
-            "default": false
-          },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
+              "inflection_3_pi"
             ]
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackPlan"
-              }
-            ]
-          }
-        },
-        "required": [
-          "provider",
-          "voiceId"
-        ]
-      },
-      "ElevenLabsVoice": {
-        "type": "object",
-        "properties": {
           "provider": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
             "enum": [
-              "11labs"
-            ]
-          },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "burt",
-                  "marissa",
-                  "andrea",
-                  "sarah",
-                  "phillip",
-                  "steve",
-                  "joseph",
-                  "myra",
-                  "paula",
-                  "ryan",
-                  "drew",
-                  "paul",
-                  "mrb",
-                  "matilda",
-                  "mark"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "11Labs Voice ID"
-              }
+              "inflection-ai"
             ]
           },
-          "stability": {
-            "type": "number",
-            "description": "Defines the stability for voice settings.",
-            "minimum": 0,
-            "maximum": 1,
-            "example": 0.5
-          },
-          "similarityBoost": {
+          "temperature": {
             "type": "number",
-            "description": "Defines the similarity boost for voice settings.",
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
             "minimum": 0,
-            "maximum": 1,
-            "example": 0.75
+            "maximum": 2
           },
-          "style": {
+          "maxTokens": {
             "type": "number",
-            "description": "Defines the style for voice settings.",
-            "minimum": 0,
-            "maximum": 1,
-            "example": 0
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
           },
-          "useSpeakerBoost": {
+          "emotionRecognitionEnabled": {
             "type": "boolean",
-            "description": "Defines the use speaker boost for voice settings.",
-            "example": false
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
           },
-          "speed": {
+          "numFastTurns": {
             "type": "number",
-            "description": "Defines the speed for voice settings.",
-            "minimum": 0.7,
-            "maximum": 1.2,
-            "example": 0.9
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
+          }
+        },
+        "required": [
+          "model",
+          "provider"
+        ]
+      },
+      "OpenAIModel": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
           },
-          "optimizeStreamingLatency": {
-            "type": "number",
-            "description": "Defines the optimize streaming latency for voice settings. Defaults to 3.",
-            "minimum": 0,
-            "maximum": 4,
-            "example": 3
-          },
-          "enableSsmlParsing": {
-            "type": "boolean",
-            "description": "This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency.\n\n@default false",
-            "example": false
-          },
-          "autoMode": {
-            "type": "boolean",
-            "description": "Defines the auto mode for voice settings. Defaults to false.",
-            "example": false
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
+              ]
+            }
           },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified.",
-            "enum": [
-              "eleven_multilingual_v2",
-              "eleven_turbo_v2",
-              "eleven_turbo_v2_5",
-              "eleven_flash_v2",
-              "eleven_flash_v2_5",
-              "eleven_monolingual_v1"
-            ],
-            "example": "eleven_turbo_v2_5"
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
               }
             ]
           },
-          "language": {
+          "knowledgeBaseId": {
             "type": "string",
-            "description": "This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports language enforcement. For other models, an error will be returned if language code is provided."
+            "description": "This is the ID of the knowledge base the model will use."
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackPlan"
-              }
-            ]
-          }
-        },
-        "required": [
-          "provider",
-          "voiceId"
-        ]
-      },
-      "HumeVoice": {
-        "type": "object",
-        "properties": {
           "provider": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
+            "description": "This is the provider that will be used for the model.",
             "enum": [
-              "hume"
+              "openai"
             ]
           },
           "model": {
             "type": "string",
-            "description": "This is the model that will be used.",
+            "description": "This is the OpenAI model that will be used.\n\nWhen 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.\nThis 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/.\n\n@default undefined",
             "enum": [
-              "octave"
+              "gpt-4.1-2025-04-14",
+              "gpt-4.1-mini-2025-04-14",
+              "gpt-4.1-nano-2025-04-14",
+              "gpt-4.1",
+              "gpt-4.1-mini",
+              "gpt-4.1-nano",
+              "chatgpt-4o-latest",
+              "o3",
+              "o3-mini",
+              "o4-mini",
+              "o1-mini",
+              "o1-mini-2024-09-12",
+              "gpt-4o-realtime-preview-2024-10-01",
+              "gpt-4o-realtime-preview-2024-12-17",
+              "gpt-4o-mini-realtime-preview-2024-12-17",
+              "gpt-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"
+            ]
+          },
+          "fallbackModels": {
+            "type": "array",
+            "description": "These are the fallback models that will be used if the primary model fails. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest fallbacks that make sense.",
+            "enum": [
+              "gpt-4.1-2025-04-14",
+              "gpt-4.1-mini-2025-04-14",
+              "gpt-4.1-nano-2025-04-14",
+              "gpt-4.1",
+              "gpt-4.1-mini",
+              "gpt-4.1-nano",
+              "chatgpt-4o-latest",
+              "o3",
+              "o3-mini",
+              "o4-mini",
+              "o1-mini",
+              "o1-mini-2024-09-12",
+              "gpt-4o-realtime-preview-2024-10-01",
+              "gpt-4o-realtime-preview-2024-12-17",
+              "gpt-4o-mini-realtime-preview-2024-12-17",
+              "gpt-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"
             ],
-            "example": "octave"
+            "example": [
+              "gpt-4-0125-preview",
+              "gpt-4-0613"
+            ],
+            "items": {
+              "type": "string",
+              "enum": [
+                "gpt-4.1-2025-04-14",
+                "gpt-4.1-mini-2025-04-14",
+                "gpt-4.1-nano-2025-04-14",
+                "gpt-4.1",
+                "gpt-4.1-mini",
+                "gpt-4.1-nano",
+                "chatgpt-4o-latest",
+                "o3",
+                "o3-mini",
+                "o4-mini",
+                "o1-mini",
+                "o1-mini-2024-09-12",
+                "gpt-4o-realtime-preview-2024-10-01",
+                "gpt-4o-realtime-preview-2024-12-17",
+                "gpt-4o-mini-realtime-preview-2024-12-17",
+                "gpt-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"
+              ]
+            }
           },
-          "voiceId": {
+          "toolStrictCompatibilityMode": {
             "type": "string",
-            "description": "The ID of the particular voice you want to use."
+            "description": "Azure OpenAI doesn't support `maxLength` right now https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords. Need to strip.\n\n- `strip-parameters-with-unsupported-validation` will strip parameters with unsupported validation.\n- `strip-unsupported-validation` will keep the parameters but strip unsupported validation.\n\n@default `strip-unsupported-validation`",
+            "enum": [
+              "strip-parameters-with-unsupported-validation",
+              "strip-unsupported-validation"
+            ]
           },
-          "isCustomHumeVoice": {
-            "type": "boolean",
-            "description": "Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.",
-            "example": false
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
+            "maximum": 2
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
           },
-          "description": {
-            "type": "string",
-            "description": "Natural language instructions describing how the synthesized speech should sound, including but not limited to tone, intonation, pacing, and accent (e.g., 'a soft, gentle voice with a strong British accent').\n\nIf a Voice is specified in the request, this description serves as acting instructions.\nIf no Voice is specified, a new voice is generated based on this description."
+          "emotionRecognitionEnabled": {
+            "type": "boolean",
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackPlan"
-              }
-            ]
+          "numFastTurns": {
+            "type": "number",
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
           }
         },
         "required": [
           "provider",
-          "voiceId"
+          "model"
         ]
       },
-      "LMNTVoice": {
+      "OpenRouterModel": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "lmnt"
-            ]
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
           },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "lily",
-                  "daniel"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "LMNT Voice ID"
-              }
-            ]
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
+              ]
+            }
           },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.25,
-            "maximum": 2,
-            "example": null
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
               }
             ]
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackPlan"
-              }
-            ]
-          }
-        },
-        "required": [
-          "provider",
-          "voiceId"
-        ]
-      },
-      "NeuphonicVoice": {
-        "type": "object",
-        "properties": {
+          "knowledgeBaseId": {
+            "type": "string",
+            "description": "This is the ID of the knowledge base the model will use."
+          },
           "provider": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
             "enum": [
-              "neuphonic"
-            ]
-          },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "Neuphonic Voice ID"
-              }
+              "openrouter"
             ]
           },
           "model": {
             "type": "string",
-            "description": "This is the model that will be used. Defaults to 'neu_fast' if not specified.",
-            "enum": [
-              "neu_hq",
-              "neu_fast"
-            ],
-            "example": "neu_fast"
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
           },
-          "language": {
-            "type": "object",
-            "description": "This is the language (ISO 639-1) that is enforced for the model.",
-            "example": "en"
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
+            "maximum": 2
           },
-          "speed": {
+          "maxTokens": {
             "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.25,
-            "maximum": 2,
-            "example": null
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+          "emotionRecognitionEnabled": {
+            "type": "boolean",
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackPlan"
-              }
-            ]
+          "numFastTurns": {
+            "type": "number",
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
           }
         },
         "required": [
           "provider",
-          "voiceId",
-          "language"
+          "model"
         ]
       },
-      "OpenAIVoice": {
+      "PerplexityAIModel": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "openai"
-            ]
-          },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.\nPlease note that ash, ballad, coral, sage, and verse may only be used with realtime models.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "alloy",
-                  "echo",
-                  "fable",
-                  "onyx",
-                  "nova",
-                  "shimmer"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "OpenAI Voice ID"
-              }
-            ]
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
           },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for text-to-speech.",
-            "enum": [
-              "tts-1",
-              "tts-1-hd",
-              "gpt-4o-mini-tts"
-            ]
-          },
-          "instructions": {
-            "type": "string",
-            "description": "This is a prompt that allows you to control the voice of your generated audio.\nDoes not work with 'tts-1' or 'tts-1-hd' models.",
-            "maxLength": 10000
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
+              ]
+            }
           },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.25,
-            "maximum": 4,
-            "example": null
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
               }
             ]
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackPlan"
-              }
+          "knowledgeBaseId": {
+            "type": "string",
+            "description": "This is the ID of the knowledge base the model will use."
+          },
+          "provider": {
+            "type": "string",
+            "enum": [
+              "perplexity-ai"
             ]
+          },
+          "model": {
+            "type": "string",
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
+          },
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
+            "maximum": 2
+          },
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
+          },
+          "emotionRecognitionEnabled": {
+            "type": "boolean",
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          },
+          "numFastTurns": {
+            "type": "number",
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
           }
         },
         "required": [
           "provider",
-          "voiceId"
+          "model"
         ]
       },
-      "PlayHTVoice": {
+      "TogetherAIModel": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "playht"
-            ]
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
           },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
+              ]
+            }
+          },
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
             "oneOf": [
               {
-                "type": "string",
-                "enum": [
-                  "jennifer",
-                  "melissa",
-                  "will",
-                  "chris",
-                  "matt",
-                  "jack",
-                  "ruby",
-                  "davis",
-                  "donna",
-                  "michael"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "PlayHT Voice ID"
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
               }
             ]
           },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.1,
-            "maximum": 5,
-            "example": null
-          },
-          "temperature": {
-            "type": "number",
-            "description": "A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model's default temperature will be used. The temperature parameter controls variance. Lower temperatures result in more predictable results, higher temperatures allow each run to vary more, so the voice may sound less like the baseline voice.",
-            "minimum": 0.1,
-            "maximum": 2,
-            "example": null
+          "knowledgeBaseId": {
+            "type": "string",
+            "description": "This is the ID of the knowledge base the model will use."
           },
-          "emotion": {
+          "provider": {
             "type": "string",
-            "description": "An emotion to be applied to the speech.",
             "enum": [
-              "female_happy",
-              "female_sad",
-              "female_angry",
-              "female_fearful",
-              "female_disgust",
-              "female_surprised",
-              "male_happy",
-              "male_sad",
-              "male_angry",
-              "male_fearful",
-              "male_disgust",
-              "male_surprised"
-            ],
-            "example": null
+              "together-ai"
+            ]
           },
-          "voiceGuidance": {
+          "model": {
+            "type": "string",
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
+          },
+          "temperature": {
             "type": "number",
-            "description": "A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared to other voices.",
-            "minimum": 1,
-            "maximum": 6,
-            "example": null
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
+            "maximum": 2
           },
-          "styleGuidance": {
+          "maxTokens": {
             "type": "number",
-            "description": "A number between 1 and 30. Use lower numbers to to reduce how strong your chosen emotion will be. Higher numbers will create a very emotional performance.",
-            "minimum": 1,
-            "maximum": 30,
-            "example": null
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
           },
-          "textGuidance": {
+          "emotionRecognitionEnabled": {
+            "type": "boolean",
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          },
+          "numFastTurns": {
             "type": "number",
-            "description": "A number between 1 and 2. This number influences how closely the generated speech adheres to the input text. Use lower values to create more fluid speech, but with a higher chance of deviating from the input text. Higher numbers will make the generated speech more accurate to the input text, ensuring that the words spoken align closely with the provided text.",
-            "minimum": 1,
-            "maximum": 2,
-            "example": null
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
+          }
+        },
+        "required": [
+          "provider",
+          "model"
+        ]
+      },
+      "HangupNode": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "enum": [
+              "hangup"
+            ]
+          },
+          "name": {
+            "type": "string",
+            "maxLength": 80
+          },
+          "isStart": {
+            "type": "boolean",
+            "description": "This is whether or not the node is the start of the workflow."
+          },
+          "metadata": {
+            "type": "object",
+            "description": "This is for metadata you want to store on the task."
+          }
+        },
+        "required": [
+          "type",
+          "name"
+        ]
+      },
+      "WorkflowOpenAIModel": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "description": "This is the provider of the model (`openai`).",
+            "enum": [
+              "openai"
+            ]
           },
           "model": {
             "type": "string",
-            "description": "Playht voice model/engine to use.",
+            "description": "This is the OpenAI model that will be used.\n\nWhen 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.\nThis is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.",
+            "maxLength": 100,
             "enum": [
-              "PlayHT2.0",
-              "PlayHT2.0-turbo",
-              "Play3.0-mini",
-              "PlayDialog"
+              "gpt-4.1-2025-04-14",
+              "gpt-4.1-mini-2025-04-14",
+              "gpt-4.1-nano-2025-04-14",
+              "gpt-4.1",
+              "gpt-4.1-mini",
+              "gpt-4.1-nano",
+              "chatgpt-4o-latest",
+              "o3",
+              "o3-mini",
+              "o4-mini",
+              "o1-mini",
+              "o1-mini-2024-09-12",
+              "gpt-4o-mini-2024-07-18",
+              "gpt-4o-mini",
+              "gpt-4o",
+              "gpt-4o-2024-05-13",
+              "gpt-4o-2024-08-06",
+              "gpt-4o-2024-11-20",
+              "gpt-4-turbo",
+              "gpt-4-turbo-2024-04-09",
+              "gpt-4-turbo-preview",
+              "gpt-4-0125-preview",
+              "gpt-4-1106-preview",
+              "gpt-4",
+              "gpt-4-0613",
+              "gpt-3.5-turbo",
+              "gpt-3.5-turbo-0125",
+              "gpt-3.5-turbo-1106",
+              "gpt-3.5-turbo-16k",
+              "gpt-3.5-turbo-0613",
+              "gpt-4.1-2025-04-14:westus",
+              "gpt-4.1-2025-04-14:eastus2",
+              "gpt-4.1-2025-04-14:eastus",
+              "gpt-4.1-2025-04-14:westus3",
+              "gpt-4.1-2025-04-14:northcentralus",
+              "gpt-4.1-2025-04-14:southcentralus",
+              "gpt-4.1-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"
             ]
           },
-          "language": {
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature of the model.",
+            "minimum": 0,
+            "maximum": 2
+          },
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max tokens of the model.",
+            "minimum": 50,
+            "maximum": 10000
+          }
+        },
+        "required": [
+          "provider",
+          "model"
+        ]
+      },
+      "WorkflowAnthropicModel": {
+        "type": "object",
+        "properties": {
+          "provider": {
             "type": "string",
-            "description": "The language to use for the speech.",
+            "description": "This is the provider of the model (`anthropic`).",
             "enum": [
-              "afrikaans",
-              "albanian",
-              "amharic",
-              "arabic",
-              "bengali",
-              "bulgarian",
-              "catalan",
-              "croatian",
-              "czech",
-              "danish",
-              "dutch",
-              "english",
-              "french",
-              "galician",
-              "german",
-              "greek",
-              "hebrew",
-              "hindi",
-              "hungarian",
-              "indonesian",
-              "italian",
-              "japanese",
-              "korean",
-              "malay",
-              "mandarin",
-              "polish",
-              "portuguese",
-              "russian",
-              "serbian",
-              "spanish",
-              "swedish",
-              "tagalog",
-              "thai",
-              "turkish",
-              "ukrainian",
-              "urdu",
-              "xhosa"
+              "anthropic"
             ]
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
+          "model": {
+            "type": "string",
+            "description": "This is the specific model that will be used.",
+            "maxLength": 100,
+            "enum": [
+              "claude-3-opus-20240229",
+              "claude-3-sonnet-20240229",
+              "claude-3-haiku-20240307",
+              "claude-3-5-sonnet-20240620",
+              "claude-3-5-sonnet-20241022",
+              "claude-3-5-haiku-20241022",
+              "claude-3-7-sonnet-20250219",
+              "claude-opus-4-20250514",
+              "claude-sonnet-4-20250514"
             ]
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+          "thinking": {
+            "description": "This is the optional configuration for Anthropic's thinking feature.\n\n- Only applicable for `claude-3-7-sonnet-20250219` model.\n- If provided, `maxTokens` must be greater than `thinking.budgetTokens`.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/FallbackPlan"
+                "$ref": "#/components/schemas/AnthropicThinkingConfig"
               }
             ]
+          },
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature of the model.",
+            "minimum": 0,
+            "maximum": 2
+          },
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max tokens of the model.",
+            "minimum": 50,
+            "maximum": 10000
           }
         },
         "required": [
           "provider",
-          "voiceId"
+          "model"
         ]
       },
-      "RimeAIVoice": {
+      "WorkflowGoogleModel": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
+            "description": "This is the provider of the model (`google`).",
             "enum": [
-              "rime-ai"
-            ]
-          },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "abbie",
-                  "allison",
-                  "ally",
-                  "alona",
-                  "amber",
-                  "ana",
-                  "antoine",
-                  "armon",
-                  "brenda",
-                  "brittany",
-                  "carol",
-                  "colin",
-                  "courtney",
-                  "elena",
-                  "elliot",
-                  "eva",
-                  "geoff",
-                  "gerald",
-                  "hank",
-                  "helen",
-                  "hera",
-                  "jen",
-                  "joe",
-                  "joy",
-                  "juan",
-                  "kendra",
-                  "kendrick",
-                  "kenneth",
-                  "kevin",
-                  "kris",
-                  "linda",
-                  "madison",
-                  "marge",
-                  "marina",
-                  "marissa",
-                  "marta",
-                  "maya",
-                  "nicholas",
-                  "nyles",
-                  "phil",
-                  "reba",
-                  "rex",
-                  "rick",
-                  "ritu",
-                  "rob",
-                  "rodney",
-                  "rohan",
-                  "rosco",
-                  "samantha",
-                  "sandy",
-                  "selena",
-                  "seth",
-                  "sharon",
-                  "stan",
-                  "tamra",
-                  "tanya",
-                  "tibur",
-                  "tj",
-                  "tyler",
-                  "viv",
-                  "yadira",
-                  "marsh",
-                  "bayou",
-                  "creek",
-                  "brook",
-                  "flower",
-                  "spore",
-                  "glacier",
-                  "gulch",
-                  "alpine",
-                  "cove",
-                  "lagoon",
-                  "tundra",
-                  "steppe",
-                  "mesa",
-                  "grove",
-                  "rainforest",
-                  "moraine",
-                  "wildflower",
-                  "peak",
-                  "boulder",
-                  "gypsum",
-                  "zest"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "RimeAI Voice ID"
-              }
+              "google"
             ]
           },
           "model": {
             "type": "string",
-            "description": "This is the model that will be used. Defaults to 'v1' when not specified.",
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
+            "maxLength": 100,
             "enum": [
-              "v1",
-              "mist",
-              "mistv2"
-            ],
-            "example": "mistv2"
+              "gemini-2.5-pro",
+              "gemini-2.5-flash",
+              "gemini-2.5-flash-lite",
+              "gemini-2.0-flash-thinking-exp",
+              "gemini-2.0-pro-exp-02-05",
+              "gemini-2.0-flash",
+              "gemini-2.0-flash-lite",
+              "gemini-2.0-flash-exp",
+              "gemini-2.0-flash-realtime-exp",
+              "gemini-1.5-flash",
+              "gemini-1.5-flash-002",
+              "gemini-1.5-pro",
+              "gemini-1.5-pro-002",
+              "gemini-1.0-pro"
+            ]
           },
-          "speed": {
+          "temperature": {
             "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.1,
-            "example": null
-          },
-          "pauseBetweenBrackets": {
-            "type": "boolean",
-            "description": "This is a flag that controls whether to add slight pauses using angle brackets. Example: “Hi. <200> I’d love to have a conversation with you.” adds a 200ms pause between the first and second sentences.",
-            "example": false
-          },
-          "phonemizeBetweenBrackets": {
-            "type": "boolean",
-            "description": "This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic pronunciation) - Example: \"{h'El.o} World\" will pronounce \"Hello\" as expected.",
-            "example": false
-          },
-          "reduceLatency": {
-            "type": "boolean",
-            "description": "This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency",
-            "example": false
-          },
-          "inlineSpeedAlpha": {
-            "type": "string",
-            "description": "This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha",
-            "example": null
-          },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+            "description": "This is the temperature of the model.",
+            "minimum": 0,
+            "maximum": 2
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackPlan"
-              }
-            ]
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max tokens of the model.",
+            "minimum": 50,
+            "maximum": 10000
           }
         },
         "required": [
           "provider",
-          "voiceId"
+          "model"
         ]
       },
-      "SmallestAIVoice": {
+      "WorkflowCustomModel": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
+            "description": "This is the provider of the model (`custom-llm`).",
             "enum": [
-              "smallest-ai"
-            ]
-          },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "emily",
-                  "jasmine",
-                  "arman",
-                  "james",
-                  "mithali",
-                  "aravind",
-                  "raj",
-                  "diya",
-                  "raman",
-                  "ananya",
-                  "isha",
-                  "william",
-                  "aarav",
-                  "monika",
-                  "niharika",
-                  "deepika",
-                  "raghav",
-                  "kajal",
-                  "radhika",
-                  "mansi",
-                  "nisha",
-                  "saurabh",
-                  "pooja",
-                  "saina",
-                  "sanya"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "Smallest AI Voice ID"
-              }
+              "custom-llm"
             ]
           },
-          "model": {
+          "metadataSendMode": {
             "type": "string",
-            "description": "Smallest AI voice model to use. Defaults to 'lightning' when not specified.",
+            "description": "This determines whether metadata is sent in requests to the custom provider.\n\n- `off` will not send any metadata. payload will look like `{ messages }`\n- `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }`\n- `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }`\n\nFurther, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload.\n\nDefault is `variable`.",
             "enum": [
-              "lightning"
+              "off",
+              "variable",
+              "destructured"
             ]
           },
-          "speed": {
+          "url": {
+            "type": "string",
+            "description": "These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1"
+          },
+          "headers": {
+            "type": "object",
+            "description": "These are the headers we'll use for the OpenAI client's `headers`."
+          },
+          "timeoutSeconds": {
             "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "example": null
+            "description": "This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds.",
+            "minimum": 20,
+            "maximum": 600
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+          "model": {
+            "type": "string",
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
+            "maxLength": 100
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/FallbackPlan"
-              }
-            ]
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature of the model.",
+            "minimum": 0,
+            "maximum": 2
+          },
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max tokens of the model.",
+            "minimum": 50,
+            "maximum": 10000
           }
         },
         "required": [
           "provider",
-          "voiceId"
+          "url",
+          "model"
         ]
       },
-      "TavusConversationProperties": {
+      "GlobalNodePlan": {
         "type": "object",
         "properties": {
-          "maxCallDuration": {
-            "type": "number",
-            "description": "The maximum duration of the call in seconds. The default `maxCallDuration` is 3600 seconds (1 hour).\nOnce the time limit specified by this parameter has been reached, the conversation will automatically shut down."
-          },
-          "participantLeftTimeout": {
-            "type": "number",
-            "description": "The duration in seconds after which the call will be automatically shut down once the last participant leaves."
-          },
-          "participantAbsentTimeout": {
-            "type": "number",
-            "description": "Starting from conversation creation, the duration in seconds after which the call will be automatically shut down if no participant joins the call.\nDefault is 300 seconds (5 minutes)."
-          },
-          "enableRecording": {
-            "type": "boolean",
-            "description": "If true, the user will be able to record the conversation."
-          },
-          "enableTranscription": {
-            "type": "boolean",
-            "description": "If true, the user will be able to transcribe the conversation.\nYou can find more instructions on displaying transcriptions if you are using your custom DailyJS components here.\nYou need to have an event listener on Daily that listens for `app-messages`."
-          },
-          "applyGreenscreen": {
+          "enabled": {
             "type": "boolean",
-            "description": "If true, the background will be replaced with a greenscreen (RGB values: `[0, 255, 155]`).\nYou can use WebGL on the frontend to make the greenscreen transparent or change its color."
+            "description": "This is the flag to determine if this node is a global node\n\n@default false",
+            "default": false
           },
-          "language": {
+          "enterCondition": {
             "type": "string",
-            "description": "The language of the conversation. Please provide the **full language name**, not the two-letter code.\nIf you are using your own TTS voice, please ensure it supports the language you provide.\nIf you are using a stock replica or default persona, please note that only ElevenLabs and Cartesia supported languages are available.\nYou can find a full list of supported languages for Cartesia here, for ElevenLabs here, and for PlayHT here."
-          },
-          "recordingS3BucketName": {
+            "description": "This is the condition that will be checked to determine if the global node should be executed.\n\n@default ''",
+            "maxLength": 1000,
+            "default": ""
+          }
+        }
+      },
+      "VariableExtractionAlias": {
+        "type": "object",
+        "properties": {
+          "key": {
             "type": "string",
-            "description": "The name of the S3 bucket where the recording will be stored."
+            "description": "This is the key of the variable.\n\nThis variable will be accessible during the call as `{{key}}` and stored in `call.artifact.variableValues` after the call.\n\nRules:\n- Must start with a letter (a-z, A-Z).\n- Subsequent characters can be letters, numbers, or underscores.\n- Minimum length of 1 and maximum length of 40.",
+            "minLength": 1,
+            "maxLength": 40,
+            "pattern": "/^[a-zA-Z][a-zA-Z0-9_]*$/"
           },
-          "recordingS3BucketRegion": {
+          "value": {
             "type": "string",
-            "description": "The region of the S3 bucket where the recording will be stored."
+            "description": "This is the value of the variable.\n\nThis can reference existing variables, use filters, and perform transformations.\n\nExamples: \"{{name}}\", \"{{customer.email}}\", \"Hello {{name | upcase}}\"",
+            "maxLength": 10000
+          }
+        },
+        "required": [
+          "key",
+          "value"
+        ]
+      },
+      "VariableExtractionPlan": {
+        "type": "object",
+        "properties": {
+          "schema": {
+            "description": "This is the schema to extract.\n\nExamples:\n1. To extract object properties, you can use the following schema:\n```json\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"string\"\n    },\n    \"age\": {\n      \"type\": \"number\"\n    }\n  }\n}\n```\n\nThese will be extracted as `{{ name }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables.\n\n2. To extract nested properties, you can use the following schema:\n```json\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"name\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"first\": {\n          \"type\": \"string\"\n        },\n        \"last\": {\n          \"type\": \"string\"\n        }\n      }\n    }\n  }\n}\n```\n\nThese will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{ name.last }}` will be accessible.\n\n3. To extract array items, you can use the following schema:\n```json\n{\n  \"type\": \"array\",\n  \"title\": \"zipCodes\",\n  \"items\": {\n    \"type\": \"string\"\n  }\n}\n```\n\nThis will be extracted as `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`.\n\n4. To extract array of objects, you can use the following schema:\n\n```json\n{\n  \"type\": \"array\",\n  \"name\": \"people\",\n  \"items\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"name\": {\n        \"type\": \"string\"\n      },\n      \"age\": {\n        \"type\": \"number\"\n      },\n      \"zipCodes\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"type\": \"string\"\n        }\n      }\n    }\n  }\n}\n```\n\nThis will be extracted as `{{ people }}`. To access the array items, you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{ people[n].zipCodes[1] }}`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/JsonSchema"
+              }
+            ]
           },
-          "awsAssumeRoleArn": {
-            "type": "string",
-            "description": "The ARN of the role that will be assumed to access the S3 bucket."
+          "aliases": {
+            "description": "These are additional variables to create.\n\nThese will be accessible during the call as `{{key}}` and stored in `call.artifact.variableValues` after the call.\n\nExample:\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"customerName\",\n      \"value\": \"{{name}}\"\n    },\n    {\n      \"key\": \"fullName\",\n      \"value\": \"{{firstName}} {{lastName}}\"\n    },\n    {\n      \"key\": \"greeting\",\n      \"value\": \"Hello {{name}}, welcome to {{company}}!\"\n    },\n    {\n      \"key\": \"customerCity\",\n      \"value\": \"{{addresses[0].city}}\"\n    },\n    {\n      \"key\": \"something\",\n      \"value\": \"{{any liquid}}\"\n    }\n  ]\n}\n```\n\nThis will create variables `customerName`, `fullName`, `greeting`, `customerCity`, and `something`. To access these variables, you can reference them as `{{customerName}}`, `{{fullName}}`, `{{greeting}}`, `{{customerCity}}`, and `{{something}}`.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/VariableExtractionAlias"
+            }
           }
         }
       },
-      "TavusVoice": {
+      "ConversationNode": {
         "type": "object",
         "properties": {
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
+            "description": "This is the Conversation node. This can be used to start a conversation with the customer.\n\nThe flow is:\n- Workflow starts the conversation node\n- Model is active with the `prompt` and global context.\n- Model will call a tool to exit this node.\n- Workflow will extract variables from the conversation.\n- Workflow continues.",
             "enum": [
-              "tavus"
+              "conversation"
             ]
           },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
+          "model": {
+            "description": "This is the model for the node.\n\nThis overrides `workflow.model`.",
             "oneOf": [
               {
-                "type": "string",
-                "enum": [
-                  "r52da2535a"
-                ],
-                "title": "Preset Voice Options"
+                "$ref": "#/components/schemas/WorkflowOpenAIModel",
+                "title": "WorkflowOpenAIModel"
               },
               {
-                "type": "string",
-                "title": "Tavus Voice ID"
+                "$ref": "#/components/schemas/WorkflowAnthropicModel",
+                "title": "WorkflowAnthropicModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowGoogleModel",
+                "title": "WorkflowGoogleModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowCustomModel",
+                "title": "WorkflowCustomModel"
               }
             ]
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
+          "transcriber": {
+            "description": "This is the transcriber for the node.\n\nThis overrides `workflow.transcriber`.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/AssemblyAITranscriber",
+                "title": "AssemblyAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/AzureSpeechTranscriber",
+                "title": "AzureSpeechTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CustomTranscriber",
+                "title": "CustomTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramTranscriber",
+                "title": "DeepgramTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsTranscriber",
+                "title": "ElevenLabsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GladiaTranscriber",
+                "title": "GladiaTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleTranscriber",
+                "title": "GoogleTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
+                "title": "SpeechmaticsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/TalkscriberTranscriber",
+                "title": "TalkscriberTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAITranscriber",
+                "title": "OpenAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaTranscriber",
+                "title": "CartesiaTranscriber"
               }
             ]
           },
-          "personaId": {
-            "type": "string",
-            "description": "This is the unique identifier for the persona that the replica will use in the conversation."
-          },
-          "callbackUrl": {
-            "type": "string",
-            "description": "This is the url that will receive webhooks with updates regarding the conversation state."
+          "voice": {
+            "description": "This is the voice for the node.\n\nThis overrides `workflow.voice`.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AzureVoice",
+                "title": "AzureVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaVoice",
+                "title": "CartesiaVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CustomVoice",
+                "title": "CustomVoice"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramVoice",
+                "title": "DeepgramVoice"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsVoice",
+                "title": "ElevenLabsVoice"
+              },
+              {
+                "$ref": "#/components/schemas/HumeVoice",
+                "title": "HumeVoice"
+              },
+              {
+                "$ref": "#/components/schemas/LMNTVoice",
+                "title": "LMNTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/NeuphonicVoice",
+                "title": "NeuphonicVoice"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoice",
+                "title": "OpenAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/PlayHTVoice",
+                "title": "PlayHTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/RimeAIVoice",
+                "title": "RimeAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SmallestAIVoice",
+                "title": "SmallestAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/TavusVoice",
+                "title": "TavusVoice"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoice",
+                "title": "VapiVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SesameVoice",
+                "title": "SesameVoice"
+              },
+              {
+                "$ref": "#/components/schemas/InworldVoice",
+                "title": "InworldVoice"
+              },
+              {
+                "$ref": "#/components/schemas/MinimaxVoice",
+                "title": "MinimaxVoice"
+              }
+            ]
           },
-          "conversationName": {
-            "type": "string",
-            "description": "This is the name for the conversation."
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the conversation node can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
+              ]
+            }
           },
-          "conversationalContext": {
-            "type": "string",
-            "description": "This is the context that will be appended to any context provided in the persona, if one is provided."
+          "toolIds": {
+            "description": "These are the tools that the conversation node can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "customGreeting": {
+          "prompt": {
             "type": "string",
-            "description": "This is the custom greeting that the replica will give once a participant joines the conversation."
+            "maxLength": 5000
           },
-          "properties": {
-            "description": "These are optional properties used to customize the conversation.",
+          "globalNodePlan": {
+            "description": "This is the plan for the global node.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TavusConversationProperties"
+                "$ref": "#/components/schemas/GlobalNodePlan"
               }
             ]
           },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+          "variableExtractionPlan": {
+            "description": "This is the plan that controls the variable extraction from the user's responses.\n\nUsage:\nUse `schema` to specify what you want to extract from the user's responses.\n```json\n{\n  \"schema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"user\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"name\": {\n            \"type\": \"string\"\n          },\n          \"age\": {\n            \"type\": \"number\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nThis will be extracted as `{{ user.name }}` and `{{ user.age }}` respectively.\n\n(Optional) Use `aliases` to create new variables.\n\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"userAge\",\n      \"value\": \"{{user.age}}\"\n    },\n    {\n      \"key\": \"userName\",\n      \"value\": \"{{user.name}}\"\n    }\n  ]\n}\n```\n\nThis will be extracted as `{{ userAge }}` and `{{ userName }}` respectively.\n\nNote: The `schema` field is required for Conversation nodes if you want to extract variables from the user's responses. `aliases` is just a convenience.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/FallbackPlan"
+                "$ref": "#/components/schemas/VariableExtractionPlan"
               }
             ]
+          },
+          "name": {
+            "type": "string",
+            "maxLength": 80
+          },
+          "isStart": {
+            "type": "boolean",
+            "description": "This is whether or not the node is the start of the workflow."
+          },
+          "metadata": {
+            "type": "object",
+            "description": "This is for metadata you want to store on the task."
           }
         },
         "required": [
-          "provider",
-          "voiceId"
+          "type",
+          "name"
         ]
       },
-      "VapiVoice": {
+      "ToolNode": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "vapi"
-            ]
-          },
-          "voiceId": {
+          "type": {
             "type": "string",
-            "description": "The voices provided by Vapi",
+            "description": "This is the Tool node. This can be used to call a tool in your workflow.\n\nThe flow is:\n- Workflow starts the tool node\n- Model is called to extract parameters needed by the tool from the conversation history\n- Tool is called with the parameters\n- Server returns a response\n- Workflow continues with the response",
             "enum": [
-              "Elliot",
-              "Rohan",
-              "Lily",
-              "Savannah",
-              "Hana",
-              "Neha",
-              "Cole",
-              "Harry",
-              "Paige",
-              "Spencer"
+              "tool"
             ]
           },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.\n\n@default 1",
-            "minimum": 0.25,
-            "maximum": 2,
-            "default": 1
-          },
-          "language": {
-            "type": "string",
-            "description": "This is the language code (ISO 639-1) that will be used.\n\n@default 'en-US'",
-            "enum": [
-              "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"
-            ],
-            "default": "en-US"
-          },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
+          "tool": {
+            "description": "This is the tool to call. To use an existing tool, send `toolId` instead.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
-          },
-          "fallbackPlan": {
-            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
-            "allOf": [
+                "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                "title": "ApiRequestTool"
+              },
               {
-                "$ref": "#/components/schemas/FallbackPlan"
+                "$ref": "#/components/schemas/CreateBashToolDTO",
+                "title": "BashTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateComputerToolDTO",
+                "title": "ComputerTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                "title": "DtmfTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                "title": "EndCallTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                "title": "FunctionTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                "title": "GoHighLevelCalendarAvailabilityTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                "title": "GoHighLevelCalendarEventCreateTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                "title": "GoHighLevelContactCreateTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                "title": "GoHighLevelContactGetTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                "title": "GoogleCalendarCheckAvailabilityTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                "title": "GoogleCalendarCreateEventTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                "title": "GoogleSheetsRowAppendTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateMcpToolDTO",
+                "title": "McpTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateQueryToolDTO",
+                "title": "QueryTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                "title": "SlackSendMessageTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateSmsToolDTO",
+                "title": "SmsTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                "title": "TextEditorTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                "title": "TransferCallTool"
               }
             ]
+          },
+          "toolId": {
+            "type": "string",
+            "description": "This is the tool to call. To use a transient tool, send `tool` instead."
+          },
+          "name": {
+            "type": "string",
+            "maxLength": 80
+          },
+          "isStart": {
+            "type": "boolean",
+            "description": "This is whether or not the node is the start of the workflow."
+          },
+          "metadata": {
+            "type": "object",
+            "description": "This is for metadata you want to store on the task."
           }
         },
         "required": [
-          "provider",
-          "voiceId"
+          "type",
+          "name"
         ]
       },
-      "FallbackAzureVoice": {
+      "AIEdgeCondition": {
         "type": "object",
         "properties": {
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
             "enum": [
-              "azure"
+              "ai"
             ]
           },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
+          "prompt": {
+            "type": "string",
+            "description": "This is the prompt for the AI edge condition. It should evaluate to a boolean.",
+            "maxLength": 1000
+          }
+        },
+        "required": [
+          "type",
+          "prompt"
+        ]
+      },
+      "Edge": {
+        "type": "object",
+        "properties": {
+          "condition": {
             "oneOf": [
               {
-                "type": "string",
-                "enum": [
-                  "andrew",
-                  "brian",
-                  "emma"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "Azure Voice ID"
+                "$ref": "#/components/schemas/AIEdgeCondition",
+                "title": "AIEdgeCondition"
               }
             ]
           },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.5,
-            "maximum": 2
+          "from": {
+            "type": "string",
+            "maxLength": 80
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+          "to": {
+            "type": "string",
+            "maxLength": 80
+          },
+          "metadata": {
+            "type": "object",
+            "description": "This is for metadata you want to store on the edge."
           }
         },
         "required": [
-          "provider",
-          "voiceId"
+          "from",
+          "to"
         ]
       },
-      "FallbackCartesiaVoice": {
+      "CompliancePlan": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "cartesia"
-            ]
-          },
-          "voiceId": {
-            "type": "string",
-            "description": "The ID of the particular voice you want to use."
+          "hipaaEnabled": {
+            "type": "boolean",
+            "description": "When this is enabled, no logs, recordings, or transcriptions will be stored.\nAt the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.",
+            "example": {
+              "hipaaEnabled": false
+            }
           },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used. This is optional and will default to the correct model for the voiceId.",
-            "enum": [
-              "sonic-2",
-              "sonic-english",
-              "sonic-multilingual",
-              "sonic-preview",
-              "sonic"
-            ],
-            "example": "sonic-english"
+          "pciEnabled": {
+            "type": "boolean",
+            "description": "When this is enabled, the user will be restricted to use PCI-compliant providers, and no logs or transcripts are stored.\nAt the end of the call, you will receive an end-of-call-report message to store on your server. Defaults to false.",
+            "example": {
+              "pciEnabled": false
+            }
+          }
+        }
+      },
+      "StructuredDataPlan": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "description": "These are the messages used to generate the structured data.\n\n@default: ```\n[\n  {\n    \"role\": \"system\",\n    \"content\": \"You are an expert data extractor. You will be given a transcript of a call. Extract structured data per the JSON Schema. DO NOT return anything except the structured data.\\n\\nJson Schema:\\\\n{{schema}}\\n\\nOnly respond with the JSON.\"\n  },\n  {\n    \"role\": \"user\",\n    \"content\": \"Here is the transcript:\\n\\n{{transcript}}\\n\\n. Here is the ended reason of the call:\\n\\n{{endedReason}}\\n\\n\"\n  }\n]```\n\nYou can customize by providing any messages you want.\n\nHere are the template variables available:\n- {{transcript}}: the transcript of the call from `call.artifact.transcript`- {{systemPrompt}}: the system prompt of the call from `assistant.model.messages[type=system].content`- {{messages}}: the messages of the call from `assistant.model.messages`- {{schema}}: the schema of the structured data from `structuredDataPlan.schema`- {{endedReason}}: the ended reason of the call from `call.endedReason`",
+            "type": "array",
+            "items": {
+              "type": "object"
+            }
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language that will be used. This is optional and will default to the correct language for the voiceId.",
-            "enum": [
-              "en",
-              "de",
-              "es",
-              "fr",
-              "ja",
-              "pt",
-              "zh",
-              "hi",
-              "it",
-              "ko",
-              "nl",
-              "pl",
-              "ru",
-              "sv",
-              "tr"
-            ],
-            "example": "en"
+          "enabled": {
+            "type": "boolean",
+            "description": "This determines whether structured data is generated and stored in `call.analysis.structuredData`. Defaults to false.\n\nUsage:\n- If you want to extract structured data, set this to true and provide a `schema`.\n\n@default false"
           },
-          "experimentalControls": {
-            "description": "Experimental controls for Cartesia voice generation",
+          "schema": {
+            "description": "This is the schema of the structured data. The output is stored in `call.analysis.structuredData`.\n\nComplete guide on JSON Schema can be found [here](https://ajv.js.org/json-schema.html#json-data-type).",
             "allOf": [
               {
-                "$ref": "#/components/schemas/CartesiaExperimentalControls"
+                "$ref": "#/components/schemas/JsonSchema"
               }
             ]
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is how long the request is tried before giving up. When request times out, `call.analysis.structuredData` will be empty.\n\nUsage:\n- To guarantee the structured data is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond.\n\n@default 5 seconds",
+            "minimum": 1,
+            "maximum": 60
+          }
+        }
+      },
+      "StructuredDataMultiPlan": {
+        "type": "object",
+        "properties": {
+          "key": {
+            "type": "string",
+            "description": "This is the key of the structured data plan in the catalog."
+          },
+          "plan": {
+            "description": "This is an individual structured data plan in the catalog.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/StructuredDataPlan"
               }
             ]
           }
         },
         "required": [
-          "provider",
-          "voiceId"
+          "key",
+          "plan"
         ]
       },
-      "FallbackCustomVoice": {
+      "SuccessEvaluationPlan": {
         "type": "object",
         "properties": {
-          "provider": {
+          "rubric": {
             "type": "string",
-            "description": "This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported.",
             "enum": [
-              "custom-voice"
+              "NumericScale",
+              "DescriptiveScale",
+              "Checklist",
+              "Matrix",
+              "PercentageScale",
+              "LikertScale",
+              "AutomaticRubric",
+              "PassFail"
+            ],
+            "description": "This enforces the rubric of the evaluation. The output is stored in `call.analysis.successEvaluation`.\n\nOptions include:\n- 'NumericScale': A scale of 1 to 10.\n- 'DescriptiveScale': A scale of Excellent, Good, Fair, Poor.\n- 'Checklist': A checklist of criteria and their status.\n- 'Matrix': A grid that evaluates multiple criteria across different performance levels.\n- 'PercentageScale': A scale of 0% to 100%.\n- 'LikertScale': A scale of Strongly Agree, Agree, Neutral, Disagree, Strongly Disagree.\n- 'AutomaticRubric': Automatically break down evaluation into several criteria, each with its own score.\n- 'PassFail': A simple 'true' if call passed, 'false' if not.\n\nDefault is 'PassFail'."
+          },
+          "messages": {
+            "description": "These are the messages used to generate the success evaluation.\n\n@default: ```\n[\n  {\n    \"role\": \"system\",\n    \"content\": \"You are an expert call evaluator. You will be given a transcript of a call and the system prompt of the AI participant. Determine if the call was successful based on the objectives inferred from the system prompt. DO NOT return anything except the result.\\n\\nRubric:\\\\n{{rubric}}\\n\\nOnly respond with the result.\"\n  },\n  {\n    \"role\": \"user\",\n    \"content\": \"Here is the transcript:\\n\\n{{transcript}}\\n\\n\"\n  },\n  {\n    \"role\": \"user\",\n    \"content\": \"Here was the system prompt of the call:\\n\\n{{systemPrompt}}\\n\\n. Here is the ended reason of the call:\\n\\n{{endedReason}}\\n\\n\"\n  }\n]```\n\nYou can customize by providing any messages you want.\n\nHere are the template variables available:\n- {{transcript}}: the transcript of the call from `call.artifact.transcript`- {{systemPrompt}}: the system prompt of the call from `assistant.model.messages[type=system].content`- {{messages}}: the messages of the call from `assistant.model.messages`- {{rubric}}: the rubric of the success evaluation from `successEvaluationPlan.rubric`- {{endedReason}}: the ended reason of the call from `call.endedReason`",
+            "type": "array",
+            "items": {
+              "type": "object"
+            }
+          },
+          "enabled": {
+            "type": "boolean",
+            "description": "This determines whether a success evaluation is generated and stored in `call.analysis.successEvaluation`. Defaults to true.\n\nUsage:\n- If you want to disable the success evaluation, set this to false.\n\n@default true"
+          },
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is how long the request is tried before giving up. When request times out, `call.analysis.successEvaluation` will be empty.\n\nUsage:\n- To guarantee the success evaluation is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond.\n\n@default 5 seconds",
+            "minimum": 1,
+            "maximum": 60
+          }
+        }
+      },
+      "AnalysisPlan": {
+        "type": "object",
+        "properties": {
+          "minMessagesThreshold": {
+            "type": "number",
+            "description": "The minimum number of messages required to run the analysis plan.\nIf the number of messages is less than this, analysis will be skipped.\n@default 2",
+            "minimum": 0
+          },
+          "summaryPlan": {
+            "description": "This is the plan for generating the summary of the call. This outputs to `call.analysis.summary`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SummaryPlan"
+              }
             ]
           },
-          "server": {
-            "description": "This is where the voice request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"message\": {\n    \"type\": \"voice-request\",\n    \"text\": \"Hello, world!\",\n    \"sampleRate\": 24000,\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected: 1-channel 16-bit raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport:\n```\nresponse.on('data', (chunk: Buffer) => {\n  outputStream.write(chunk);\n});\n```",
+          "structuredDataPlan": {
+            "description": "This is the plan for generating the structured data from the call. This outputs to `call.analysis.structuredData`.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/StructuredDataPlan"
               }
             ]
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+          "structuredDataMultiPlan": {
+            "description": "This is an array of structured data plan catalogs. Each entry includes a `key` and a `plan` for generating the structured data from the call. This outputs to `call.analysis.structuredDataMulti`.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/StructuredDataMultiPlan"
+            }
+          },
+          "successEvaluationPlan": {
+            "description": "This is the plan for generating the success evaluation of the call. This outputs to `call.analysis.successEvaluation`.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/SuccessEvaluationPlan"
               }
             ]
+          },
+          "outcomeIds": {
+            "description": "This is an array of outcome UUIDs to be calculated during analysis.\nThe outcomes will be calculated and stored in `call.analysis.outcomes`.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           }
-        },
-        "required": [
-          "provider",
-          "server"
-        ]
+        }
       },
-      "FallbackDeepgramVoice": {
+      "RegexOption": {
         "type": "object",
         "properties": {
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
+            "description": "This is the type of the regex option. Options are:\n- `ignore-case`: Ignores the case of the text being matched. Add\n- `whole-word`: Matches whole words only.\n- `multi-line`: Matches across multiple lines.",
             "enum": [
-              "deepgram"
+              "ignore-case",
+              "whole-word",
+              "multi-line"
             ]
           },
-          "voiceId": {
+          "enabled": {
+            "type": "boolean",
+            "description": "This is whether to enable the option.\n\n@default false"
+          }
+        },
+        "required": [
+          "type",
+          "enabled"
+        ]
+      },
+      "AssistantCustomEndpointingRule": {
+        "type": "object",
+        "properties": {
+          "type": {
             "type": "string",
-            "description": "This is the provider-specific ID that will be used.",
+            "description": "This endpointing rule is based on the last assistant message before customer started speaking.\n\nFlow:\n- Assistant speaks\n- Customer starts speaking\n- Customer transcription comes in\n- This rule is evaluated on the last assistant message\n- If a match is found based on `regex`, the endpointing timeout is set to `timeoutSeconds`\n\nUsage:\n- If you have yes/no questions in your use case like \"are you interested in a loan?\", you can set a shorter timeout.\n- If you have questions where the customer may pause to look up information like \"what's my account number?\", you can set a longer timeout.",
             "enum": [
-              "asteria",
-              "luna",
-              "stella",
-              "athena",
-              "hera",
-              "orion",
-              "arcas",
-              "perseus",
-              "angus",
-              "orpheus",
-              "helios",
-              "zeus",
-              "thalia",
-              "andromeda",
-              "helena",
-              "apollo",
-              "arcas",
-              "aries",
-              "amalthea",
-              "andromeda",
-              "apollo",
-              "arcas",
-              "aries",
-              "asteria",
-              "athena",
-              "atlas",
-              "aurora",
-              "callista",
-              "cora",
-              "cordelia",
-              "delia",
-              "draco",
-              "electra",
-              "harmonia",
-              "helena",
-              "hera",
-              "hermes",
-              "hyperion",
-              "iris",
-              "janus",
-              "juno",
-              "jupiter",
-              "luna",
-              "mars",
-              "minerva",
-              "neptune",
-              "odysseus",
-              "ophelia",
-              "orion",
-              "orpheus",
-              "pandora",
-              "phoebe",
-              "pluto",
-              "saturn",
-              "selene",
-              "thalia",
-              "theia",
-              "vesta",
-              "zeus"
-            ],
-            "title": "This is the Deepgram Voice ID"
+              "assistant"
+            ]
           },
-          "model": {
+          "regex": {
             "type": "string",
-            "description": "This is the model that will be used. Defaults to 'aura-2' when not specified.",
-            "enum": [
-              "aura",
-              "aura-2"
-            ],
-            "example": "aura-2"
+            "description": "This is the regex pattern to match.\n\nNote:\n- This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test(\"hello there\")` will return `true`.\n\nHot tip:\n- In JavaScript, escape `\\` when sending the regex pattern. Eg. `\"hello\\sthere\"` will be sent over the wire as `\"hellosthere\"`. Send `\"hello\\\\sthere\"` instead.\n- `RegExp.test` does substring matching, so `/cat/.test(\"I love cats\")` will return `true`. To do full string matching, send \"^cat$\"."
           },
-          "mipOptOut": {
-            "type": "boolean",
-            "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false",
-            "example": false,
-            "default": false
+          "regexOptions": {
+            "description": "These are the options for the regex match. Defaults to all disabled.\n\n@default []",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/RegexOption"
+            }
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is the endpointing timeout in seconds, if the rule is matched.",
+            "minimum": 0,
+            "maximum": 15
           }
         },
         "required": [
-          "provider",
-          "voiceId"
+          "type",
+          "regex",
+          "timeoutSeconds"
         ]
       },
-      "FallbackElevenLabsVoice": {
+      "CustomerCustomEndpointingRule": {
         "type": "object",
         "properties": {
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
+            "description": "This endpointing rule is based on current customer message as they are speaking.\n\nFlow:\n- Assistant speaks\n- Customer starts speaking\n- Customer transcription comes in\n- This rule is evaluated on the current customer transcription\n- If a match is found based on `regex`, the endpointing timeout is set to `timeoutSeconds`\n\nUsage:\n- If you want to wait longer while customer is speaking numbers, you can set a longer timeout.",
             "enum": [
-              "11labs"
+              "customer"
             ]
           },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "burt",
-                  "marissa",
-                  "andrea",
-                  "sarah",
-                  "phillip",
-                  "steve",
-                  "joseph",
-                  "myra",
-                  "paula",
-                  "ryan",
-                  "drew",
-                  "paul",
-                  "mrb",
-                  "matilda",
-                  "mark"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "11Labs Voice ID"
-              }
-            ]
-          },
-          "stability": {
-            "type": "number",
-            "description": "Defines the stability for voice settings.",
-            "minimum": 0,
-            "maximum": 1,
-            "example": 0.5
-          },
-          "similarityBoost": {
-            "type": "number",
-            "description": "Defines the similarity boost for voice settings.",
-            "minimum": 0,
-            "maximum": 1,
-            "example": 0.75
-          },
-          "style": {
-            "type": "number",
-            "description": "Defines the style for voice settings.",
-            "minimum": 0,
-            "maximum": 1,
-            "example": 0
-          },
-          "useSpeakerBoost": {
-            "type": "boolean",
-            "description": "Defines the use speaker boost for voice settings.",
-            "example": false
+          "regex": {
+            "type": "string",
+            "description": "This is the regex pattern to match.\n\nNote:\n- This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test(\"hello there\")` will return `true`.\n\nHot tip:\n- In JavaScript, escape `\\` when sending the regex pattern. Eg. `\"hello\\sthere\"` will be sent over the wire as `\"hellosthere\"`. Send `\"hello\\\\sthere\"` instead.\n- `RegExp.test` does substring matching, so `/cat/.test(\"I love cats\")` will return `true`. To do full string matching, send \"^cat$\"."
           },
-          "speed": {
-            "type": "number",
-            "description": "Defines the speed for voice settings.",
-            "minimum": 0.7,
-            "maximum": 1.2,
-            "example": 0.9
+          "regexOptions": {
+            "description": "These are the options for the regex match. Defaults to all disabled.\n\n@default []",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/RegexOption"
+            }
           },
-          "optimizeStreamingLatency": {
+          "timeoutSeconds": {
             "type": "number",
-            "description": "Defines the optimize streaming latency for voice settings. Defaults to 3.",
+            "description": "This is the endpointing timeout in seconds, if the rule is matched.",
             "minimum": 0,
-            "maximum": 4,
-            "example": 3
-          },
-          "enableSsmlParsing": {
-            "type": "boolean",
-            "description": "This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency.\n\n@default false",
-            "example": false
-          },
-          "autoMode": {
-            "type": "boolean",
-            "description": "Defines the auto mode for voice settings. Defaults to false.",
-            "example": false
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified.",
-            "enum": [
-              "eleven_multilingual_v2",
-              "eleven_turbo_v2",
-              "eleven_turbo_v2_5",
-              "eleven_flash_v2",
-              "eleven_flash_v2_5",
-              "eleven_monolingual_v1"
-            ],
-            "example": "eleven_turbo_v2_5"
-          },
-          "language": {
-            "type": "string",
-            "description": "This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports language enforcement. For other models, an error will be returned if language code is provided."
-          },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+            "maximum": 15
           }
         },
         "required": [
-          "provider",
-          "voiceId"
+          "type",
+          "regex",
+          "timeoutSeconds"
         ]
       },
-      "FallbackHumeVoice": {
+      "BothCustomEndpointingRule": {
         "type": "object",
         "properties": {
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
+            "description": "This endpointing rule is based on both the last assistant message and the current customer message as they are speaking.\n\nFlow:\n- Assistant speaks\n- Customer starts speaking\n- Customer transcription comes in\n- This rule is evaluated on the last assistant message and the current customer transcription\n- If assistant message matches `assistantRegex` AND customer message matches `customerRegex`, the endpointing timeout is set to `timeoutSeconds`\n\nUsage:\n- If you want to wait longer while customer is speaking numbers, you can set a longer timeout.",
             "enum": [
-              "hume"
+              "both"
             ]
           },
-          "model": {
+          "assistantRegex": {
             "type": "string",
-            "description": "This is the model that will be used.",
-            "enum": [
-              "octave"
-            ],
-            "example": "octave"
+            "description": "This is the regex pattern to match the assistant's message.\n\nNote:\n- This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test(\"hello there\")` will return `true`.\n\nHot tip:\n- In JavaScript, escape `\\` when sending the regex pattern. Eg. `\"hello\\sthere\"` will be sent over the wire as `\"hellosthere\"`. Send `\"hello\\\\sthere\"` instead.\n- `RegExp.test` does substring matching, so `/cat/.test(\"I love cats\")` will return `true`. To do full string matching, send \"^cat$\"."
           },
-          "voiceId": {
-            "type": "string",
-            "description": "The ID of the particular voice you want to use."
+          "assistantRegexOptions": {
+            "description": "These are the options for the assistant's message regex match. Defaults to all disabled.\n\n@default []",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/RegexOption"
+            }
           },
-          "isCustomHumeVoice": {
-            "type": "boolean",
-            "description": "Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.",
-            "example": false
+          "customerRegex": {
+            "type": "string"
           },
-          "description": {
-            "type": "string",
-            "description": "Natural language instructions describing how the synthesized speech should sound, including but not limited to tone, intonation, pacing, and accent (e.g., 'a soft, gentle voice with a strong British accent').\n\nIf a Voice is specified in the request, this description serves as acting instructions.\nIf no Voice is specified, a new voice is generated based on this description."
+          "customerRegexOptions": {
+            "description": "These are the options for the customer's message regex match. Defaults to all disabled.\n\n@default []",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/RegexOption"
+            }
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is the endpointing timeout in seconds, if the rule is matched.",
+            "minimum": 0,
+            "maximum": 15
           }
         },
         "required": [
-          "provider",
-          "voiceId"
+          "type",
+          "assistantRegex",
+          "customerRegex",
+          "timeoutSeconds"
         ]
       },
-      "FallbackLMNTVoice": {
+      "VapiSmartEndpointingPlan": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
+            "description": "This is the provider for the smart endpointing plan.",
             "enum": [
-              "lmnt"
-            ]
-          },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "lily",
-                  "daniel"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "LMNT Voice ID"
-              }
-            ]
-          },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.25,
-            "maximum": 2,
-            "example": null
-          },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+              "vapi",
+              "livekit",
+              "custom-endpointing-model"
+            ],
+            "example": "vapi"
           }
         },
         "required": [
-          "provider",
-          "voiceId"
+          "provider"
         ]
       },
-      "FallbackNeuphonicVoice": {
+      "LivekitSmartEndpointingPlan": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
+            "description": "This is the provider for the smart endpointing plan.",
             "enum": [
-              "neuphonic"
-            ]
+              "vapi",
+              "livekit",
+              "custom-endpointing-model"
+            ],
+            "example": "livekit"
           },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "Neuphonic Voice ID"
-              }
+          "waitFunction": {
+            "type": "string",
+            "description": "This expression describes how long the bot will wait to start speaking based on the likelihood that the user has reached an endpoint.\n\nThis is a millisecond valued function. It maps probabilities (real numbers on [0,1]) to milliseconds that the bot should wait before speaking ([0, \\infty]). Any negative values that are returned are set to zero (the bot can't start talking in the past).\n\nA probability of zero represents very high confidence that the caller has stopped speaking, and would like the bot to speak to them. A probability of one represents very high confidence that the caller is still speaking.\n\nUnder the hood, this is parsed into a mathjs expression. Whatever you use to write your expression needs to be valid with respect to mathjs\n\n@default \"20 + 500 * sqrt(x) + 2500 * x^3\"",
+            "examples": [
+              "70 + 4000 * x",
+              "200 + 8000 * x",
+              "4000 * (1 - cos(pi * x))"
             ]
-          },
-          "model": {
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "CustomEndpointingModelSmartEndpointingPlan": {
+        "type": "object",
+        "properties": {
+          "provider": {
             "type": "string",
-            "description": "This is the model that will be used. Defaults to 'neu_fast' if not specified.",
+            "description": "This is the provider for the smart endpointing plan. Use `custom-endpointing-model` for custom endpointing providers that are not natively supported.",
             "enum": [
-              "neu_hq",
-              "neu_fast"
+              "vapi",
+              "livekit",
+              "custom-endpointing-model"
             ],
-            "example": "neu_fast"
-          },
-          "language": {
-            "type": "object",
-            "description": "This is the language (ISO 639-1) that is enforced for the model.",
-            "example": "en"
-          },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.25,
-            "maximum": 2,
-            "example": null
+            "example": "custom-endpointing-model"
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+          "server": {
+            "description": "This is where the endpointing request will be sent. If not provided, will be sent to `assistant.server`. If that does not exist either, will be sent to `org.server`.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"message\": {\n    \"type\": \"call.endpointing.request\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"message\": \"Hello, how are you?\",\n        \"time\": 1234567890,\n        \"secondsFromStart\": 0\n      }\n    ],\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected:\n{\n  \"timeoutSeconds\": 0.5\n}\n\nThe timeout is the number of seconds to wait before considering the user's speech as finished. The endpointing timeout is automatically reset each time a new transcript is received (and another `call.endpointing.request` is sent).",
             "allOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           }
         },
         "required": [
-          "provider",
-          "voiceId",
-          "language"
+          "provider"
         ]
       },
-      "FallbackOpenAIVoice": {
+      "TranscriptionEndpointingPlan": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "openai"
-            ]
+          "onPunctuationSeconds": {
+            "type": "number",
+            "description": "The minimum number of seconds to wait after transcription ending with punctuation before sending a request to the model. Defaults to 0.1.\n\nThis setting exists because the transcriber punctuates the transcription when it's more confident that customer has completed a thought.\n\n@default 0.1",
+            "minimum": 0,
+            "maximum": 3,
+            "example": 0.1
           },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.\nPlease note that ash, ballad, coral, sage, and verse may only be used with realtime models.",
+          "onNoPunctuationSeconds": {
+            "type": "number",
+            "description": "The minimum number of seconds to wait after transcription ending without punctuation before sending a request to the model. Defaults to 1.5.\n\nThis setting exists to catch the cases where the transcriber was not confident enough to punctuate the transcription, but the customer is done and has been silent for a long time.\n\n@default 1.5",
+            "minimum": 0,
+            "maximum": 3,
+            "example": 1.5
+          },
+          "onNumberSeconds": {
+            "type": "number",
+            "description": "The minimum number of seconds to wait after transcription ending with a number before sending a request to the model. Defaults to 0.4.\n\nThis setting exists because the transcriber will sometimes punctuate the transcription ending with a number, even though the customer hasn't uttered the full number. This happens commonly for long numbers when the customer reads the number in chunks.\n\n@default 0.5",
+            "minimum": 0,
+            "maximum": 3,
+            "example": 0.5
+          }
+        }
+      },
+      "StartSpeakingPlan": {
+        "type": "object",
+        "properties": {
+          "waitSeconds": {
+            "type": "number",
+            "description": "This is how long assistant waits before speaking. Defaults to 0.4.\n\nThis is the minimum it will wait but if there is latency is the pipeline, this minimum will be exceeded. This is intended as a stopgap in case the pipeline is moving too fast.\n\nExample:\n- If model generates tokens and voice generates bytes within 100ms, the pipeline still waits 300ms before outputting speech.\n\nUsage:\n- If the customer is taking long pauses, set this to a higher value.\n- If the assistant is accidentally jumping in too much, set this to a higher value.\n\n@default 0.4",
+            "minimum": 0,
+            "maximum": 5,
+            "example": 0.4
+          },
+          "smartEndpointingEnabled": {
+            "example": false,
+            "deprecated": true,
             "oneOf": [
               {
-                "type": "string",
-                "enum": [
-                  "alloy",
-                  "echo",
-                  "fable",
-                  "onyx",
-                  "nova",
-                  "shimmer"
-                ],
-                "title": "Preset Voice Options"
+                "type": "boolean"
               },
               {
                 "type": "string",
-                "title": "OpenAI Voice ID"
+                "enum": [
+                  "livekit"
+                ]
               }
             ]
           },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used for text-to-speech.",
-            "enum": [
-              "tts-1",
-              "tts-1-hd",
-              "gpt-4o-mini-tts"
+          "smartEndpointingPlan": {
+            "description": "This is the plan for smart endpointing. Pick between Vapi smart endpointing or LiveKit smart endpointing (or nothing). We strongly recommend using livekit endpointing when working in English. LiveKit endpointing is not supported in other languages, yet.\n\nIf this is set, it will override and take precedence over `transcriptionEndpointingPlan`.\nThis plan will still be overridden by any matching `customEndpointingRules`.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/VapiSmartEndpointingPlan",
+                "title": "Vapi"
+              },
+              {
+                "$ref": "#/components/schemas/LivekitSmartEndpointingPlan",
+                "title": "Livekit"
+              },
+              {
+                "$ref": "#/components/schemas/CustomEndpointingModelSmartEndpointingPlan",
+                "title": "Custom Endpointing Model"
+              }
             ]
           },
-          "instructions": {
-            "type": "string",
-            "description": "This is a prompt that allows you to control the voice of your generated audio.\nDoes not work with 'tts-1' or 'tts-1-hd' models.",
-            "maxLength": 10000
-          },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.25,
-            "maximum": 4,
-            "example": null
+          "customEndpointingRules": {
+            "type": "array",
+            "description": "These are the custom endpointing rules to set an endpointing timeout based on a regex on the customer's speech or the assistant's last message.\n\nUsage:\n- If you have yes/no questions like \"are you interested in a loan?\", you can set a shorter timeout.\n- If you have questions where the customer may pause to look up information like \"what's my account number?\", you can set a longer timeout.\n- If you want to wait longer while customer is enumerating a list of numbers, you can set a longer timeout.\n\nThese rules have the highest precedence and will override both `smartEndpointingPlan` and `transcriptionEndpointingPlan` when a rule is matched.\n\nThe rules are evaluated in order and the first one that matches will be used.\n\nOrder of precedence for endpointing:\n1. customEndpointingRules (if any match)\n2. smartEndpointingPlan (if set)\n3. transcriptionEndpointingPlan\n\n@default []",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/AssistantCustomEndpointingRule",
+                  "title": "Assistant"
+                },
+                {
+                  "$ref": "#/components/schemas/CustomerCustomEndpointingRule",
+                  "title": "Customer"
+                },
+                {
+                  "$ref": "#/components/schemas/BothCustomEndpointingRule",
+                  "title": "Both"
+                }
+              ]
+            }
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+          "transcriptionEndpointingPlan": {
+            "description": "This determines how a customer speech is considered done (endpointing) using the transcription of customer's speech.\n\nOnce an endpoint is triggered, the request is sent to `assistant.model`.\n\nNote: This plan is only used if `smartEndpointingPlan` is not set. If both are provided, `smartEndpointingPlan` takes precedence.\nThis plan will also be overridden by any matching `customEndpointingRules`.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/TranscriptionEndpointingPlan"
               }
             ]
           }
-        },
-        "required": [
-          "provider",
-          "voiceId"
-        ]
+        }
       },
-      "FallbackPlayHTVoice": {
+      "StopSpeakingPlan": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "playht"
-            ]
-          },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "jennifer",
-                  "melissa",
-                  "will",
-                  "chris",
-                  "matt",
-                  "jack",
-                  "ruby",
-                  "davis",
-                  "donna",
-                  "michael"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "PlayHT Voice ID"
-              }
-            ]
-          },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.1,
-            "maximum": 5,
-            "example": null
-          },
-          "temperature": {
-            "type": "number",
-            "description": "A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model's default temperature will be used. The temperature parameter controls variance. Lower temperatures result in more predictable results, higher temperatures allow each run to vary more, so the voice may sound less like the baseline voice.",
-            "minimum": 0.1,
-            "maximum": 2,
-            "example": null
-          },
-          "emotion": {
-            "type": "string",
-            "description": "An emotion to be applied to the speech.",
-            "enum": [
-              "female_happy",
-              "female_sad",
-              "female_angry",
-              "female_fearful",
-              "female_disgust",
-              "female_surprised",
-              "male_happy",
-              "male_sad",
-              "male_angry",
-              "male_fearful",
-              "male_disgust",
-              "male_surprised"
-            ],
-            "example": null
-          },
-          "voiceGuidance": {
+          "numWords": {
             "type": "number",
-            "description": "A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared to other voices.",
-            "minimum": 1,
-            "maximum": 6,
-            "example": null
+            "description": "This is the number of words that the customer has to say before the assistant will stop talking.\n\nWords like \"stop\", \"actually\", \"no\", etc. will always interrupt immediately regardless of this value.\n\nWords like \"okay\", \"yeah\", \"right\" will never interrupt.\n\nWhen set to 0, `voiceSeconds` is used in addition to the transcriptions to determine the customer has started speaking.\n\nDefaults to 0.\n\n@default 0",
+            "minimum": 0,
+            "maximum": 10,
+            "example": 0
           },
-          "styleGuidance": {
+          "voiceSeconds": {
             "type": "number",
-            "description": "A number between 1 and 30. Use lower numbers to to reduce how strong your chosen emotion will be. Higher numbers will create a very emotional performance.",
-            "minimum": 1,
-            "maximum": 30,
-            "example": null
+            "description": "This is the seconds customer has to speak before the assistant stops talking. This uses the VAD (Voice Activity Detection) spike to determine if the customer has started speaking.\n\nConsiderations:\n- A lower value might be more responsive but could potentially pick up non-speech sounds.\n- A higher value reduces false positives but might slightly delay the detection of speech onset.\n\nThis is only used if `numWords` is set to 0.\n\nDefaults to 0.2\n\n@default 0.2",
+            "minimum": 0,
+            "maximum": 0.5,
+            "example": 0.2
           },
-          "textGuidance": {
+          "backoffSeconds": {
             "type": "number",
-            "description": "A number between 1 and 2. This number influences how closely the generated speech adheres to the input text. Use lower values to create more fluid speech, but with a higher chance of deviating from the input text. Higher numbers will make the generated speech more accurate to the input text, ensuring that the words spoken align closely with the provided text.",
-            "minimum": 1,
-            "maximum": 2,
-            "example": null
-          },
-          "model": {
-            "type": "string",
-            "description": "Playht voice model/engine to use.",
-            "enum": [
-              "PlayHT2.0",
-              "PlayHT2.0-turbo",
-              "Play3.0-mini",
-              "PlayDialog"
-            ]
+            "description": "This is the seconds to wait before the assistant will start talking again after being interrupted.\n\nDefaults to 1.\n\n@default 1",
+            "minimum": 0,
+            "maximum": 10,
+            "example": 1
           },
-          "language": {
-            "type": "string",
-            "description": "The language to use for the speech.",
-            "enum": [
-              "afrikaans",
-              "albanian",
-              "amharic",
-              "arabic",
-              "bengali",
-              "bulgarian",
-              "catalan",
-              "croatian",
-              "czech",
-              "danish",
-              "dutch",
-              "english",
-              "french",
-              "galician",
-              "german",
-              "greek",
-              "hebrew",
-              "hindi",
-              "hungarian",
-              "indonesian",
-              "italian",
-              "japanese",
-              "korean",
-              "malay",
-              "mandarin",
-              "polish",
-              "portuguese",
-              "russian",
-              "serbian",
-              "spanish",
-              "swedish",
-              "tagalog",
-              "thai",
-              "turkish",
-              "ukrainian",
-              "urdu",
-              "xhosa"
-            ]
+          "acknowledgementPhrases": {
+            "description": "These are the phrases that will never interrupt the assistant, even if numWords threshold is met.\nThese are typically acknowledgement or backchanneling phrases.",
+            "example": [
+              "i understand",
+              "i see",
+              "i got it",
+              "i hear you",
+              "im listening",
+              "im with you",
+              "right",
+              "okay",
+              "ok",
+              "sure",
+              "alright",
+              "got it",
+              "understood",
+              "yeah",
+              "yes",
+              "uh-huh",
+              "mm-hmm",
+              "gotcha",
+              "mhmm",
+              "ah",
+              "yeah okay",
+              "yeah sure"
+            ],
+            "default": [
+              "i understand",
+              "i see",
+              "i got it",
+              "i hear you",
+              "im listening",
+              "im with you",
+              "right",
+              "okay",
+              "ok",
+              "sure",
+              "alright",
+              "got it",
+              "understood",
+              "yeah",
+              "yes",
+              "uh-huh",
+              "mm-hmm",
+              "gotcha",
+              "mhmm",
+              "ah",
+              "yeah okay",
+              "yeah sure"
+            ],
+            "type": "array",
+            "items": {
+              "type": "string",
+              "maxLength": 240
+            }
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+          "interruptionPhrases": {
+            "description": "These are the phrases that will always interrupt the assistant immediately, regardless of numWords.\nThese are typically phrases indicating disagreement or desire to stop.",
+            "example": [
+              "stop",
+              "shut",
+              "up",
+              "enough",
+              "quiet",
+              "silence",
+              "but",
+              "dont",
+              "not",
+              "no",
+              "hold",
+              "wait",
+              "cut",
+              "pause",
+              "nope",
+              "nah",
+              "nevermind",
+              "never",
+              "bad",
+              "actually"
+            ],
+            "default": [
+              "stop",
+              "shut",
+              "up",
+              "enough",
+              "quiet",
+              "silence",
+              "but",
+              "dont",
+              "not",
+              "no",
+              "hold",
+              "wait",
+              "cut",
+              "pause",
+              "nope",
+              "nah",
+              "nevermind",
+              "never",
+              "bad",
+              "actually"
+            ],
+            "type": "array",
+            "items": {
+              "type": "string",
+              "maxLength": 240
+            }
           }
-        },
-        "required": [
-          "provider",
-          "voiceId"
-        ]
+        }
       },
-      "FallbackRimeAIVoice": {
+      "MonitorPlan": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "rime-ai"
-            ]
-          },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "abbie",
-                  "allison",
-                  "ally",
-                  "alona",
-                  "amber",
-                  "ana",
-                  "antoine",
-                  "armon",
-                  "brenda",
-                  "brittany",
-                  "carol",
-                  "colin",
-                  "courtney",
-                  "elena",
-                  "elliot",
-                  "eva",
-                  "geoff",
-                  "gerald",
-                  "hank",
-                  "helen",
-                  "hera",
-                  "jen",
-                  "joe",
-                  "joy",
-                  "juan",
-                  "kendra",
-                  "kendrick",
-                  "kenneth",
-                  "kevin",
-                  "kris",
-                  "linda",
-                  "madison",
-                  "marge",
-                  "marina",
-                  "marissa",
-                  "marta",
-                  "maya",
-                  "nicholas",
-                  "nyles",
-                  "phil",
-                  "reba",
-                  "rex",
-                  "rick",
-                  "ritu",
-                  "rob",
-                  "rodney",
-                  "rohan",
-                  "rosco",
-                  "samantha",
-                  "sandy",
-                  "selena",
-                  "seth",
-                  "sharon",
-                  "stan",
-                  "tamra",
-                  "tanya",
-                  "tibur",
-                  "tj",
-                  "tyler",
-                  "viv",
-                  "yadira",
-                  "marsh",
-                  "bayou",
-                  "creek",
-                  "brook",
-                  "flower",
-                  "spore",
-                  "glacier",
-                  "gulch",
-                  "alpine",
-                  "cove",
-                  "lagoon",
-                  "tundra",
-                  "steppe",
-                  "mesa",
-                  "grove",
-                  "rainforest",
-                  "moraine",
-                  "wildflower",
-                  "peak",
-                  "boulder",
-                  "gypsum",
-                  "zest"
-                ],
-                "title": "Preset Voice Options"
-              },
-              {
-                "type": "string",
-                "title": "RimeAI Voice ID"
-              }
-            ]
-          },
-          "model": {
-            "type": "string",
-            "description": "This is the model that will be used. Defaults to 'v1' when not specified.",
-            "enum": [
-              "v1",
-              "mist",
-              "mistv2"
-            ],
-            "example": "mistv2"
-          },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "minimum": 0.1,
-            "example": null
+          "listenEnabled": {
+            "type": "boolean",
+            "description": "This determines whether the assistant's calls allow live listening. Defaults to true.\n\nFetch `call.monitor.listenUrl` to get the live listening URL.\n\n@default true",
+            "example": false
           },
-          "pauseBetweenBrackets": {
+          "listenAuthenticationEnabled": {
             "type": "boolean",
-            "description": "This is a flag that controls whether to add slight pauses using angle brackets. Example: “Hi. <200> I’d love to have a conversation with you.” adds a 200ms pause between the first and second sentences.",
+            "description": "This enables authentication on the `call.monitor.listenUrl`.\n\nIf `listenAuthenticationEnabled` is `true`, the `call.monitor.listenUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header.\n\n@default false",
             "example": false
           },
-          "phonemizeBetweenBrackets": {
+          "controlEnabled": {
             "type": "boolean",
-            "description": "This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic pronunciation) - Example: \"{h'El.o} World\" will pronounce \"Hello\" as expected.",
+            "description": "This determines whether the assistant's calls allow live control. Defaults to true.\n\nFetch `call.monitor.controlUrl` to get the live control URL.\n\nTo use, send any control message via a POST request to `call.monitor.controlUrl`. Here are the types of controls supported: https://docs.vapi.ai/api-reference/messages/client-inbound-message\n\n@default true",
             "example": false
           },
-          "reduceLatency": {
+          "controlAuthenticationEnabled": {
             "type": "boolean",
-            "description": "This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency",
+            "description": "This enables authentication on the `call.monitor.controlUrl`.\n\nIf `controlAuthenticationEnabled` is `true`, the `call.monitor.controlUrl` will require an `Authorization: Bearer <vapi-public-api-key>` header.\n\n@default false",
             "example": false
+          }
+        }
+      },
+      "SmartDenoisingPlan": {
+        "type": "object",
+        "properties": {
+          "enabled": {
+            "type": "boolean",
+            "description": "Whether smart denoising using Krisp is enabled.",
+            "default": false
+          }
+        }
+      },
+      "FourierDenoisingPlan": {
+        "type": "object",
+        "properties": {
+          "enabled": {
+            "type": "boolean",
+            "description": "Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected.",
+            "default": false
           },
-          "inlineSpeedAlpha": {
-            "type": "string",
-            "description": "This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha",
-            "example": null
+          "mediaDetectionEnabled": {
+            "type": "boolean",
+            "description": "Whether automatic media detection is enabled. When enabled, the filter will automatically\ndetect consistent background TV/music/radio and switch to more aggressive filtering settings.\nOnly applies when enabled is true.",
+            "example": true,
+            "default": true
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ChunkPlan"
-              }
-            ]
+          "staticThreshold": {
+            "type": "number",
+            "description": "Static threshold in dB used as fallback when no baseline is established.",
+            "example": -35,
+            "minimum": -80,
+            "maximum": 0,
+            "default": -35
+          },
+          "baselineOffsetDb": {
+            "type": "number",
+            "description": "How far below the rolling baseline to filter audio, in dB.\nLower values (e.g., -10) are more aggressive, higher values (e.g., -20) are more conservative.",
+            "example": -15,
+            "minimum": -30,
+            "maximum": -5,
+            "default": -15
+          },
+          "windowSizeMs": {
+            "type": "number",
+            "description": "Rolling window size in milliseconds for calculating the audio baseline.\nLarger windows adapt more slowly but are more stable.",
+            "example": 3000,
+            "minimum": 1000,
+            "maximum": 30000,
+            "default": 3000
+          },
+          "baselinePercentile": {
+            "type": "number",
+            "description": "Percentile to use for baseline calculation (1-99).\nHigher percentiles (e.g., 85) focus on louder speech, lower percentiles (e.g., 50) include quieter speech.",
+            "example": 85,
+            "minimum": 1,
+            "maximum": 99,
+            "default": 85
           }
-        },
-        "required": [
-          "provider",
-          "voiceId"
-        ]
+        }
       },
-      "FallbackSmallestAIVoice": {
+      "BackgroundSpeechDenoisingPlan": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "smallest-ai"
-            ]
-          },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
-            "oneOf": [
-              {
-                "type": "string",
-                "enum": [
-                  "emily",
-                  "jasmine",
-                  "arman",
-                  "james",
-                  "mithali",
-                  "aravind",
-                  "raj",
-                  "diya",
-                  "raman",
-                  "ananya",
-                  "isha",
-                  "william",
-                  "aarav",
-                  "monika",
-                  "niharika",
-                  "deepika",
-                  "raghav",
-                  "kajal",
-                  "radhika",
-                  "mansi",
-                  "nisha",
-                  "saurabh",
-                  "pooja",
-                  "saina",
-                  "sanya"
-                ],
-                "title": "Preset Voice Options"
-              },
+          "smartDenoisingPlan": {
+            "description": "Whether smart denoising using Krisp is enabled.",
+            "allOf": [
               {
-                "type": "string",
-                "title": "Smallest AI Voice ID"
+                "$ref": "#/components/schemas/SmartDenoisingPlan"
               }
             ]
           },
-          "model": {
-            "type": "string",
-            "description": "Smallest AI voice model to use. Defaults to 'lightning' when not specified.",
-            "enum": [
-              "lightning"
-            ]
-          },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.",
-            "example": null
-          },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+          "fourierDenoisingPlan": {
+            "description": "Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected.\n\nThis can be combined with smart denoising, and will be run afterwards.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/FourierDenoisingPlan"
               }
             ]
           }
-        },
-        "required": [
-          "provider",
-          "voiceId"
-        ]
+        }
       },
-      "FallbackTavusVoice": {
+      "KeypadInputPlan": {
         "type": "object",
         "properties": {
-          "provider": {
+          "enabled": {
+            "type": "boolean",
+            "description": "This keeps track of whether the user has enabled keypad input.\nBy default, it is off.\n\n@default false"
+          },
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is the time in seconds to wait before processing the input.\nIf the input is not received within this time, the input will be ignored.\nIf set to \"off\", the input will be processed when the user enters a delimiter or immediately if no delimiter is used.\n\n@default 2",
+            "minimum": 0,
+            "maximum": 10
+          },
+          "delimiters": {
             "type": "string",
-            "description": "This is the voice provider that will be used.",
+            "description": "This is the delimiter(s) that will be used to process the input.\nCan be '#', '*', or an empty array.",
             "enum": [
-              "tavus"
+              "#",
+              "*",
+              ""
             ]
+          }
+        }
+      },
+      "WorkflowUserEditable": {
+        "type": "object",
+        "properties": {
+          "nodes": {
+            "type": "array",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ConversationNode",
+                  "title": "ConversationNode"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolNode",
+                  "title": "ToolNode"
+                }
+              ]
+            }
           },
-          "voiceId": {
-            "description": "This is the provider-specific ID that will be used.",
+          "model": {
+            "description": "This is the model for the workflow.\n\nThis can be overridden at node level using `nodes[n].model`.",
             "oneOf": [
               {
-                "type": "string",
-                "enum": [
-                  "r52da2535a"
-                ],
-                "title": "Preset Voice Options"
+                "$ref": "#/components/schemas/WorkflowOpenAIModel",
+                "title": "WorkflowOpenAIModel"
               },
               {
-                "type": "string",
-                "title": "Tavus Voice ID"
-              }
-            ]
-          },
-          "personaId": {
-            "type": "string",
-            "description": "This is the unique identifier for the persona that the replica will use in the conversation."
-          },
-          "callbackUrl": {
-            "type": "string",
-            "description": "This is the url that will receive webhooks with updates regarding the conversation state."
-          },
-          "conversationName": {
-            "type": "string",
-            "description": "This is the name for the conversation."
-          },
-          "conversationalContext": {
-            "type": "string",
-            "description": "This is the context that will be appended to any context provided in the persona, if one is provided."
-          },
-          "customGreeting": {
-            "type": "string",
-            "description": "This is the custom greeting that the replica will give once a participant joines the conversation."
-          },
-          "properties": {
-            "description": "These are optional properties used to customize the conversation.",
-            "allOf": [
+                "$ref": "#/components/schemas/WorkflowAnthropicModel",
+                "title": "WorkflowAnthropicModel"
+              },
               {
-                "$ref": "#/components/schemas/TavusConversationProperties"
+                "$ref": "#/components/schemas/WorkflowGoogleModel",
+                "title": "WorkflowGoogleModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowCustomModel",
+                "title": "WorkflowCustomModel"
               }
             ]
           },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
-            "allOf": [
+          "transcriber": {
+            "description": "This is the transcriber for the workflow.\n\nThis can be overridden at node level using `nodes[n].transcriber`.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/AssemblyAITranscriber",
+                "title": "AssemblyAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/AzureSpeechTranscriber",
+                "title": "AzureSpeechTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CustomTranscriber",
+                "title": "CustomTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramTranscriber",
+                "title": "DeepgramTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsTranscriber",
+                "title": "ElevenLabsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GladiaTranscriber",
+                "title": "GladiaTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleTranscriber",
+                "title": "GoogleTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
+                "title": "SpeechmaticsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/TalkscriberTranscriber",
+                "title": "TalkscriberTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAITranscriber",
+                "title": "OpenAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaTranscriber",
+                "title": "CartesiaTranscriber"
               }
             ]
-          }
-        },
-        "required": [
-          "provider",
-          "voiceId"
-        ]
-      },
-      "FallbackVapiVoice": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "vapi"
-            ]
           },
-          "voiceId": {
-            "type": "string",
-            "description": "The voices provided by Vapi",
-            "enum": [
-              "Elliot",
-              "Rohan",
-              "Lily",
-              "Savannah",
-              "Hana",
-              "Neha",
-              "Cole",
-              "Harry",
-              "Paige",
-              "Spencer"
+          "voice": {
+            "description": "This is the voice for the workflow.\n\nThis can be overridden at node level using `nodes[n].voice`.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AzureVoice",
+                "title": "AzureVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaVoice",
+                "title": "CartesiaVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CustomVoice",
+                "title": "CustomVoice"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramVoice",
+                "title": "DeepgramVoice"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsVoice",
+                "title": "ElevenLabsVoice"
+              },
+              {
+                "$ref": "#/components/schemas/HumeVoice",
+                "title": "HumeVoice"
+              },
+              {
+                "$ref": "#/components/schemas/LMNTVoice",
+                "title": "LMNTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/NeuphonicVoice",
+                "title": "NeuphonicVoice"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoice",
+                "title": "OpenAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/PlayHTVoice",
+                "title": "PlayHTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/RimeAIVoice",
+                "title": "RimeAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SmallestAIVoice",
+                "title": "SmallestAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/TavusVoice",
+                "title": "TavusVoice"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoice",
+                "title": "VapiVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SesameVoice",
+                "title": "SesameVoice"
+              },
+              {
+                "$ref": "#/components/schemas/InworldVoice",
+                "title": "InworldVoice"
+              },
+              {
+                "$ref": "#/components/schemas/MinimaxVoice",
+                "title": "MinimaxVoice"
+              }
             ]
           },
-          "speed": {
-            "type": "number",
-            "description": "This is the speed multiplier that will be used.\n\n@default 1",
-            "minimum": 0.25,
-            "maximum": 2,
-            "default": 1
-          },
-          "language": {
-            "type": "string",
-            "description": "This is the language code (ISO 639-1) that will be used.\n\n@default 'en-US'",
-            "enum": [
-              "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"
+          "observabilityPlan": {
+            "description": "This is the plan for observability of workflow's calls.\n\nCurrently, only Langfuse is supported.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
+                "title": "Langfuse"
+              }
             ],
-            "default": "en-US"
-          },
-          "chunkPlan": {
-            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/ChunkPlan"
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
               }
             ]
-          }
-        },
-        "required": [
-          "provider",
-          "voiceId"
-        ]
-      },
-      "TransportConfigurationTwilio": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "twilio"
+          },
+          "backgroundSound": {
+            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
+            "oneOf": [
+              {
+                "type": "enum",
+                "enum": [
+                  "off",
+                  "office"
+                ],
+                "example": "office"
+              },
+              {
+                "type": "string",
+                "format": "uri",
+                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
+              }
             ]
           },
-          "timeout": {
-            "type": "number",
-            "description": "The integer number of seconds that we should allow the phone to ring before assuming there is no answer.\nThe default is `60` seconds and the maximum is `600` seconds.\nFor some call flows, we will add a 5-second buffer to the timeout value you provide.\nFor this reason, a timeout value of 10 seconds could result in an actual timeout closer to 15 seconds.\nYou can set this to a short time, such as `15` seconds, to hang up before reaching an answering machine or voicemail.\n\n@default 60",
-            "minimum": 1,
-            "maximum": 600,
-            "example": 60
+          "hooks": {
+            "type": "array",
+            "description": "This is a set of actions that will be performed on certain events.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CallHookCallEnding",
+                  "title": "CallHookCallEnding"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookAssistantSpeechInterrupted",
+                  "title": "CallHookAssistantSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechInterrupted",
+                  "title": "CallHookCustomerSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechTimeout",
+                  "title": "CallHookCustomerSpeechTimeout"
+                }
+              ]
+            }
           },
-          "record": {
-            "type": "boolean",
-            "description": "Whether to record the call.\nCan be `true` to record the phone call, or `false` to not.\nThe default is `false`.\n\n@default false",
-            "example": false
+          "credentials": {
+            "type": "array",
+            "description": "These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "title": "AnthropicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "title": "AnyscaleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "title": "AssemblyAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
+                  "title": "AzureCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "title": "AzureOpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "title": "ByoSipTrunkCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "title": "CartesiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "title": "CerebrasCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "title": "CloudflareCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "title": "CustomLLMCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "title": "DeepgramCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "title": "DeepInfraCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "title": "DeepSeekCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "title": "ElevenLabsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
+                  "title": "GcpCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "title": "GladiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "title": "GhlCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "title": "GoogleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
+                  "title": "GroqCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
+                  "title": "HumeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "title": "InflectionAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "title": "LangfuseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
+                  "title": "LmntCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
+                  "title": "MakeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
+                  "title": "MistralCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "title": "NeuphonicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "title": "OpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "title": "OpenRouterCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "title": "PerplexityAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "title": "PlayHTCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "title": "RimeAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "title": "RunpodCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
+                  "title": "S3Credential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "title": "SmallestAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "title": "SpeechmaticsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "title": "SupabaseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
+                  "title": "TavusCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "title": "TogetherAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "title": "TrieveCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "title": "TwilioCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
+                  "title": "VonageCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "title": "WebhookCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
+                  "title": "XAiCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "title": "GoogleCalendarOAuth2ClientCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "title": "SlackOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "title": "GoHighLevelMCPCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInworldCredentialDTO",
+                  "title": "InworldCredential"
+                }
+              ],
+              "discriminator": {
+                "propertyName": "provider",
+                "mapping": {
+                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
+                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
+                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
+                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
+                  "make": "#/components/schemas/CreateMakeCredentialDTO",
+                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "s3": "#/components/schemas/CreateS3CredentialDTO",
+                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
+                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
+                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
+                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
+                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
+                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "inworld": "#/components/schemas/CreateInworldCredentialDTO",
+                  "minimax": "#/components/schemas/CreateMinimaxCredentialDTO"
+                }
+              }
+            }
           },
-          "recordingChannels": {
-            "type": "string",
-            "description": "The number of channels in the final recording.\nCan be: `mono` or `dual`.\nThe default is `mono`.\n`mono` records both legs of the call in a single channel of the recording file.\n`dual` records each leg to a separate channel of the recording file.\nThe first channel of a dual-channel recording contains the parent call and the second channel contains the child call.\n\n@default 'mono'",
-            "enum": [
-              "mono",
-              "dual"
-            ],
-            "example": "mono"
-          }
-        },
-        "required": [
-          "provider"
-        ]
-      },
-      "CreateAnthropicCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+          "name": {
             "type": "string",
-            "enum": [
-              "anthropic"
-            ]
+            "maxLength": 80
           },
-          "apiKey": {
-            "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+          "edges": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Edge"
+            }
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreateAnyscaleCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+          "globalPrompt": {
             "type": "string",
-            "enum": [
-              "anyscale"
-            ]
+            "maxLength": 5000
           },
-          "apiKey": {
-            "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. tool.server\n2. workflow.server / assistant.server\n3. phoneNumber.server\n4. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreateAssemblyAICredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "assembly-ai"
+          "compliancePlan": {
+            "description": "This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CompliancePlan"
+              }
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "analysisPlan": {
+            "description": "This is the plan for analysis of workflow's calls. Stored in `call.analysis`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AnalysisPlan"
+              }
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "AzureBlobStorageBucketPlan": {
-        "type": "object",
-        "properties": {
-          "connectionString": {
-            "type": "string",
-            "description": "This is the blob storage connection string for the Azure resource."
+          "artifactPlan": {
+            "description": "This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ArtifactPlan"
+              }
+            ]
           },
-          "containerName": {
-            "type": "string",
-            "description": "This is the container name for the Azure blob storage."
+          "startSpeakingPlan": {
+            "description": "This is the plan for when the workflow nodes should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StartSpeakingPlan"
+              }
+            ]
           },
-          "path": {
-            "type": "string",
-            "description": "This is the path where call artifacts will be stored.\n\nUsage:\n- To store call artifacts in a specific folder, set this to the full path. Eg. \"/folder-name1/folder-name2\".\n- To store call artifacts in the root of the bucket, leave this blank.\n\n@default \"/\""
+          "stopSpeakingPlan": {
+            "description": "This is the plan for when workflow nodes should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StopSpeakingPlan"
+              }
+            ]
+          },
+          "monitorPlan": {
+            "description": "This is the plan for real-time monitoring of the workflow's calls.\n\nUsage:\n- To enable live listening of the workflow's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the workflow's calls, set `monitorPlan.controlEnabled` to `true`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/MonitorPlan"
+              }
+            ]
+          },
+          "backgroundSpeechDenoisingPlan": {
+            "description": "This enables filtering of noise and background speech while the user is talking.\n\nFeatures:\n- Smart denoising using Krisp\n- Fourier denoising\n\nBoth can be used together. Order of precedence:\n- Smart denoising\n- Fourier denoising",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/BackgroundSpeechDenoisingPlan"
+              }
+            ]
+          },
+          "credentialIds": {
+            "description": "These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "keypadInputPlan": {
+            "description": "This is the plan for keypad input handling during workflow calls.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/KeypadInputPlan"
+              }
+            ]
           }
         },
         "required": [
-          "connectionString",
-          "containerName"
+          "nodes",
+          "name",
+          "edges"
         ]
       },
-      "CreateAzureCredentialDTO": {
+      "VapiModel": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "azure"
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
+          },
+          "tools": {
+            "type": "array",
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
+              ]
+            }
+          },
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
+              }
             ]
           },
-          "service": {
+          "knowledgeBaseId": {
             "type": "string",
-            "description": "This is the service being used in Azure.",
-            "enum": [
-              "speech",
-              "blob_storage"
-            ],
-            "default": "speech"
+            "description": "This is the ID of the knowledge base the model will use."
           },
-          "region": {
+          "provider": {
             "type": "string",
-            "description": "This is the region of the Azure resource.",
             "enum": [
-              "australia",
-              "canadaeast",
-              "canadacentral",
-              "eastus2",
-              "eastus",
-              "france",
-              "india",
-              "japaneast",
-              "japanwest",
-              "uaenorth",
-              "northcentralus",
-              "norway",
-              "southcentralus",
-              "swedencentral",
-              "switzerland",
-              "uk",
-              "westus",
-              "westus3"
+              "vapi"
             ]
           },
-          "apiKey": {
+          "workflowId": {
             "type": "string",
-            "description": "This is not returned in the API.",
-            "maxLength": 10000
+            "description": "This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead."
           },
-          "bucketPlan": {
-            "description": "This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.",
+          "workflow": {
+            "description": "This is the workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/AzureBlobStorageBucketPlan"
+                "$ref": "#/components/schemas/WorkflowUserEditable"
               }
             ]
           },
-          "name": {
+          "model": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b"
+          },
+          "temperature": {
+            "type": "number",
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
+            "maximum": 2
+          },
+          "maxTokens": {
+            "type": "number",
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
+          },
+          "emotionRecognitionEnabled": {
+            "type": "boolean",
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
+          },
+          "numFastTurns": {
+            "type": "number",
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
           }
         },
         "required": [
           "provider",
-          "service"
+          "model"
         ]
       },
-      "CreateAzureOpenAICredentialDTO": {
+      "XaiModel": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "azure-openai"
-            ]
-          },
-          "region": {
-            "type": "string",
-            "enum": [
-              "australia",
-              "canadaeast",
-              "canadacentral",
-              "eastus2",
-              "eastus",
-              "france",
-              "india",
-              "japaneast",
-              "japanwest",
-              "uaenorth",
-              "northcentralus",
-              "norway",
-              "southcentralus",
-              "swedencentral",
-              "switzerland",
-              "uk",
-              "westus",
-              "westus3"
-            ]
+          "messages": {
+            "description": "This is the starting state for the conversation.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
           },
-          "models": {
+          "tools": {
             "type": "array",
-            "enum": [
-              "gpt-4o-2024-11-20",
-              "gpt-4o-2024-08-06",
-              "gpt-4o-mini-2024-07-18",
-              "gpt-4o-2024-05-13",
-              "gpt-4-turbo-2024-04-09",
-              "gpt-4-0125-preview",
-              "gpt-4-1106-preview",
-              "gpt-4-0613",
-              "gpt-35-turbo-0125",
-              "gpt-35-turbo-1106"
-            ],
-            "example": [
-              "gpt-4-0125-preview",
-              "gpt-4-0613"
-            ],
+            "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.",
             "items": {
-              "type": "string",
-              "enum": [
-                "gpt-4o-2024-11-20",
-                "gpt-4o-2024-08-06",
-                "gpt-4o-mini-2024-07-18",
-                "gpt-4o-2024-05-13",
-                "gpt-4-turbo-2024-04-09",
-                "gpt-4-0125-preview",
-                "gpt-4-1106-preview",
-                "gpt-4-0613",
-                "gpt-35-turbo-0125",
-                "gpt-35-turbo-1106"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                  "title": "ApiRequestTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateBashToolDTO",
+                  "title": "BashTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateComputerToolDTO",
+                  "title": "ComputerTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                  "title": "DtmfTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                  "title": "EndCallTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                  "title": "FunctionTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                  "title": "GoHighLevelCalendarAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                  "title": "GoHighLevelCalendarEventCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                  "title": "GoHighLevelContactCreateTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                  "title": "GoHighLevelContactGetTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                  "title": "GoogleCalendarCheckAvailabilityTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                  "title": "GoogleCalendarCreateEventTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                  "title": "GoogleSheetsRowAppendTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMcpToolDTO",
+                  "title": "McpTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateQueryToolDTO",
+                  "title": "QueryTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                  "title": "SlackSendMessageTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmsToolDTO",
+                  "title": "SmsTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                  "title": "TextEditorTool"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                  "title": "TransferCallTool"
+                }
               ]
             }
           },
-          "openAIKey": {
-            "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+          "toolIds": {
+            "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "ocpApimSubscriptionKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "knowledgeBase": {
+            "description": "These are the options for the knowledge base.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO",
+                "title": "Custom"
+              }
+            ]
           },
-          "openAIEndpoint": {
+          "knowledgeBaseId": {
             "type": "string",
-            "maxLength": 10000
+            "description": "This is the ID of the knowledge base the model will use."
           },
-          "name": {
+          "model": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "region",
-          "models",
-          "openAIKey",
-          "openAIEndpoint"
-        ]
-      },
-      "SipTrunkGateway": {
-        "type": "object",
-        "properties": {
-          "ip": {
+            "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b",
+            "enum": [
+              "grok-beta",
+              "grok-2",
+              "grok-3"
+            ]
+          },
+          "provider": {
             "type": "string",
-            "description": "This is the address of the gateway. It can be an IPv4 address like 1.1.1.1 or a fully qualified domain name like my-sip-trunk.pstn.twilio.com."
+            "enum": [
+              "xai"
+            ]
           },
-          "port": {
+          "temperature": {
             "type": "number",
-            "description": "This is the port number of the gateway. Default is 5060.\n\n@default 5060",
-            "minimum": 1,
-            "maximum": 65535
+            "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.",
+            "minimum": 0,
+            "maximum": 2
           },
-          "netmask": {
+          "maxTokens": {
             "type": "number",
-            "description": "This is the netmask of the gateway. Defaults to 32.\n\n@default 32",
-            "minimum": 24,
-            "maximum": 32
-          },
-          "inboundEnabled": {
-            "type": "boolean",
-            "description": "This is whether inbound calls are allowed from this gateway. Default is true.\n\n@default true"
+            "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.",
+            "minimum": 50,
+            "maximum": 10000
           },
-          "outboundEnabled": {
+          "emotionRecognitionEnabled": {
             "type": "boolean",
-            "description": "This is whether outbound calls should be sent to this gateway. Default is true.\n\nNote, if netmask is less than 32, it doesn't affect the outbound IPs that are tried. 1 attempt is made to `ip:port`.\n\n@default true"
-          },
-          "outboundProtocol": {
-            "type": "string",
-            "description": "This is the protocol to use for SIP signaling outbound calls. Default is udp.\n\n@default udp",
-            "enum": [
-              "tls/srtp",
-              "tcp",
-              "tls",
-              "udp"
-            ]
+            "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false"
           },
-          "optionsPingEnabled": {
-            "type": "boolean",
-            "description": "This is whether to send options ping to the gateway. This can be used to check if the gateway is reachable. Default is false.\n\nThis is useful for high availability setups where you want to check if the gateway is reachable before routing calls to it. Note, if no gateway for a trunk is reachable, outbound calls will be rejected.\n\n@default false"
+          "numFastTurns": {
+            "type": "number",
+            "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0",
+            "minimum": 0
           }
         },
         "required": [
-          "ip"
+          "model",
+          "provider"
         ]
       },
-      "SipTrunkOutboundSipRegisterPlan": {
+      "ExactReplacement": {
         "type": "object",
         "properties": {
-          "domain": {
-            "type": "string"
+          "type": {
+            "type": "string",
+            "description": "This is the exact replacement type. You can use this to replace a specific word or phrase with a different word or phrase.\n\nUsage:\n- Replace \"hello\" with \"hi\": { type: 'exact', key: 'hello', value: 'hi' }\n- Replace \"good morning\" with \"good day\": { type: 'exact', key: 'good morning', value: 'good day' }\n- Replace a specific name: { type: 'exact', key: 'John Doe', value: 'Jane Smith' }\n- Replace an acronym: { type: 'exact', key: 'AI', value: 'Artificial Intelligence' }\n- Replace a company name with its phonetic pronunciation: { type: 'exact', key: 'Vapi', value: 'Vappy' }",
+            "enum": [
+              "exact"
+            ]
           },
-          "username": {
-            "type": "string"
+          "replaceAllEnabled": {
+            "type": "boolean",
+            "description": "This option let's you control whether to replace all instances of the key or only the first one. By default, it only replaces the first instance.\nExamples:\n- For { type: 'exact', key: 'hello', value: 'hi', replaceAllEnabled: false }. Before: \"hello world, hello universe\" | After: \"hi world, hello universe\"\n- For { type: 'exact', key: 'hello', value: 'hi', replaceAllEnabled: true }. Before: \"hello world, hello universe\" | After: \"hi world, hi universe\"\n@default false",
+            "default": false
           },
-          "realm": {
-            "type": "string"
+          "key": {
+            "type": "string",
+            "description": "This is the key to replace."
+          },
+          "value": {
+            "type": "string",
+            "description": "This is the value that will replace the match.",
+            "maxLength": 1000
           }
-        }
+        },
+        "required": [
+          "type",
+          "key",
+          "value"
+        ]
       },
-      "SipTrunkOutboundAuthenticationPlan": {
+      "RegexReplacement": {
         "type": "object",
         "properties": {
-          "authPassword": {
+          "type": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the regex replacement type. You can use this to replace a word or phrase that matches a pattern.\n\nUsage:\n- Replace all numbers with \"some number\": { type: 'regex', regex: '\\\\d+', value: 'some number' }\n- Replace email addresses with \"[EMAIL]\": { type: 'regex', regex: '\\\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\\\.[A-Z|a-z]{2,}\\\\b', value: '[EMAIL]' }\n- Replace phone numbers with a formatted version: { type: 'regex', regex: '(\\\\d{3})(\\\\d{3})(\\\\d{4})', value: '($1) $2-$3' }\n- Replace all instances of \"color\" or \"colour\" with \"hue\": { type: 'regex', regex: 'colou?r', value: 'hue' }\n- Capitalize the first letter of every sentence: { type: 'regex', regex: '(?<=\\\\. |^)[a-z]', value: (match) => match.toUpperCase() }",
+            "enum": [
+              "regex"
+            ]
           },
-          "authUsername": {
-            "type": "string"
+          "regex": {
+            "type": "string",
+            "description": "This is the regex pattern to replace.\n\nNote:\n- This works by using the `string.replace` method in Node.JS. Eg. `\"hello there\".replace(/hello/g, \"hi\")` will return `\"hi there\"`.\n\nHot tip:\n- In JavaScript, escape `\\` when sending the regex pattern. Eg. `\"hello\\sthere\"` will be sent over the wire as `\"hellosthere\"`. Send `\"hello\\\\sthere\"` instead."
           },
-          "sipRegisterPlan": {
-            "description": "This can be used to configure if SIP register is required by the SIP trunk. If not provided, no SIP registration will be attempted.",
+          "options": {
+            "description": "These are the options for the regex replacement. Defaults to all disabled.\n\n@default []",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/RegexOption"
+            }
+          },
+          "value": {
+            "type": "string",
+            "description": "This is the value that will replace the match.",
+            "maxLength": 1000
+          }
+        },
+        "required": [
+          "type",
+          "regex",
+          "value"
+        ]
+      },
+      "FormatPlan": {
+        "type": "object",
+        "properties": {
+          "enabled": {
+            "type": "boolean",
+            "description": "This determines whether the chunk is formatted before being sent to the voice provider. This helps with enunciation. This includes phone numbers, emails and addresses. Default `true`.\n\nUsage:\n- To rely on the voice provider's formatting logic, set this to `false`.\n\nIf `voice.chunkPlan.enabled` is `false`, this is automatically `false` since there's no chunk to format.\n\n@default true",
+            "example": true
+          },
+          "numberToDigitsCutoff": {
+            "type": "number",
+            "description": "This is the cutoff after which a number is converted to individual digits instead of being spoken as words.\n\nExample:\n- If cutoff 2025, \"12345\" is converted to \"1 2 3 4 5\" while \"1200\" is converted to \"twelve hundred\".\n\nUsage:\n- If your use case doesn't involve IDs like zip codes, set this to a high value.\n- If your use case involves IDs that are shorter than 5 digits, set this to a lower value.\n\n@default 2025",
+            "minimum": 0,
+            "example": 2025
+          },
+          "replacements": {
+            "type": "array",
+            "description": "These are the custom replacements you can make to the chunk before it is sent to the voice provider.\n\nUsage:\n- To replace a specific word or phrase with a different word or phrase, use the `ExactReplacement` type. Eg. `{ type: 'exact', key: 'hello', value: 'hi' }`\n- To replace a word or phrase that matches a pattern, use the `RegexReplacement` type. Eg. `{ type: 'regex', regex: '\\\\b[a-zA-Z]{5}\\\\b', value: 'hi' }`\n\n@default []",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ExactReplacement",
+                  "title": "ExactReplacement"
+                },
+                {
+                  "$ref": "#/components/schemas/RegexReplacement",
+                  "title": "RegexReplacement"
+                }
+              ]
+            }
+          },
+          "formattersEnabled": {
+            "type": "array",
+            "description": "List of formatters to apply. If not provided, all default formatters will be applied.\nIf provided, only the specified formatters will be applied.\nNote: Some essential formatters like angle bracket removal will always be applied.\n@default undefined",
+            "enum": [
+              "markdown",
+              "asterisk",
+              "quote",
+              "dash",
+              "newline",
+              "colon",
+              "acronym",
+              "dollarAmount",
+              "email",
+              "date",
+              "time",
+              "distance",
+              "unit",
+              "percentage",
+              "phoneNumber",
+              "number",
+              "stripAsterisk"
+            ],
+            "items": {
+              "type": "string",
+              "enum": [
+                "markdown",
+                "asterisk",
+                "quote",
+                "dash",
+                "newline",
+                "colon",
+                "acronym",
+                "dollarAmount",
+                "email",
+                "date",
+                "time",
+                "distance",
+                "unit",
+                "percentage",
+                "phoneNumber",
+                "number",
+                "stripAsterisk"
+              ]
+            }
+          }
+        }
+      },
+      "ChunkPlan": {
+        "type": "object",
+        "properties": {
+          "enabled": {
+            "type": "boolean",
+            "description": "This determines whether the model output is chunked before being sent to the voice provider. Default `true`.\n\nUsage:\n- To rely on the voice provider's audio generation logic, set this to `false`.\n- If seeing issues with quality, set this to `true`.\n\nIf disabled, Vapi-provided audio control tokens like <flush /> will not work.\n\n@default true",
+            "example": true
+          },
+          "minCharacters": {
+            "type": "number",
+            "description": "This is the minimum number of characters in a chunk.\n\nUsage:\n- To increase quality, set this to a higher value.\n- To decrease latency, set this to a lower value.\n\n@default 30",
+            "minimum": 1,
+            "maximum": 80,
+            "example": 30
+          },
+          "punctuationBoundaries": {
+            "type": "array",
+            "description": "These are the punctuations that are considered valid boundaries for a chunk to be created.\n\nUsage:\n- To increase quality, constrain to fewer boundaries.\n- To decrease latency, enable all.\n\nDefault is automatically set to balance the trade-off between quality and latency based on the provider.",
+            "enum": [
+              "。",
+              "，",
+              ".",
+              "!",
+              "?",
+              ";",
+              ")",
+              "،",
+              "۔",
+              "।",
+              "॥",
+              "|",
+              "||",
+              ",",
+              ":"
+            ],
+            "example": [
+              "。",
+              "，",
+              ".",
+              "!",
+              "?",
+              ";",
+              "،",
+              "۔",
+              "।",
+              "॥",
+              "|",
+              "||",
+              ",",
+              ":"
+            ],
+            "items": {
+              "type": "string",
+              "enum": [
+                "。",
+                "，",
+                ".",
+                "!",
+                "?",
+                ";",
+                ")",
+                "،",
+                "۔",
+                "।",
+                "॥",
+                "|",
+                "||",
+                ",",
+                ":"
+              ]
+            }
+          },
+          "formatPlan": {
+            "description": "This is the plan for formatting the chunk before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/SipTrunkOutboundSipRegisterPlan"
+                "$ref": "#/components/schemas/FormatPlan"
               }
             ]
           }
         }
       },
-      "SbcConfiguration": {
+      "FallbackPlan": {
         "type": "object",
-        "properties": {}
+        "properties": {
+          "voices": {
+            "type": "array",
+            "description": "This is the list of voices to fallback to in the event that the primary voice provider fails.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/FallbackAzureVoice",
+                  "title": "Azure"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackCartesiaVoice",
+                  "title": "Cartesia"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackHumeVoice",
+                  "title": "Hume"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackCustomVoice",
+                  "title": "CustomVoice"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackDeepgramVoice",
+                  "title": "Deepgram"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackElevenLabsVoice",
+                  "title": "ElevenLabs"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackVapiVoice",
+                  "title": "Vapi"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackLMNTVoice",
+                  "title": "LMNT"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackOpenAIVoice",
+                  "title": "OpenAI"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackPlayHTVoice",
+                  "title": "PlayHT"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackRimeAIVoice",
+                  "title": "RimeAI"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackSmallestAIVoice",
+                  "title": "Smallest AI"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackTavusVoice",
+                  "title": "TavusVoice"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackNeuphonicVoice",
+                  "title": "Neuphonic"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackSesameVoice",
+                  "title": "Sesame"
+                },
+                {
+                  "$ref": "#/components/schemas/FallbackInworldVoice",
+                  "title": "Inworld"
+                }
+              ]
+            }
+          }
+        },
+        "required": [
+          "voices"
+        ]
       },
-      "CreateByoSipTrunkCredentialDTO": {
+      "AzureVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
-            "description": "This can be used to bring your own SIP trunks or to connect to a Carrier.",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "byo-sip-trunk"
+              "azure"
             ]
           },
-          "gateways": {
-            "description": "This is the list of SIP trunk's gateways.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/SipTrunkGateway"
-            }
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "andrew",
+                  "brian",
+                  "emma"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "Azure Voice ID"
+              }
+            ]
           },
-          "outboundAuthenticationPlan": {
-            "description": "This can be used to configure the outbound authentication if required by the SIP trunk.",
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/SipTrunkOutboundAuthenticationPlan"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
           },
-          "outboundLeadingPlusEnabled": {
-            "type": "boolean",
-            "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false"
-          },
-          "techPrefix": {
-            "type": "string",
-            "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.",
-            "maxLength": 10000
-          },
-          "sipDiversionHeader": {
-            "type": "string",
-            "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.",
-            "maxLength": 10000
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.5,
+            "maximum": 2
           },
-          "sbcConfiguration": {
-            "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.",
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/SbcConfiguration"
+                "$ref": "#/components/schemas/FallbackPlan"
               }
             ]
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
           }
         },
         "required": [
-          "gateways"
+          "provider",
+          "voiceId"
         ]
       },
-      "CreateCartesiaCredentialDTO": {
+      "CartesiaExperimentalControls": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "cartesia"
+          "speed": {
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "slowest",
+                  "slow",
+                  "normal",
+                  "fast",
+                  "fastest"
+                ],
+                "example": "normal"
+              },
+              {
+                "type": "number",
+                "minimum": -1,
+                "maximum": 1,
+                "example": 0.5
+              }
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
-          },
-          "name": {
+          "emotion": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "anger:lowest",
+              "anger:low",
+              "anger:high",
+              "anger:highest",
+              "positivity:lowest",
+              "positivity:low",
+              "positivity:high",
+              "positivity:highest",
+              "surprise:lowest",
+              "surprise:low",
+              "surprise:high",
+              "surprise:highest",
+              "sadness:lowest",
+              "sadness:low",
+              "sadness:high",
+              "sadness:highest",
+              "curiosity:lowest",
+              "curiosity:low",
+              "curiosity:high",
+              "curiosity:highest"
+            ],
+            "example": [
+              "happiness:high"
+            ]
           }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
+        }
       },
-      "CloudflareR2BucketPlan": {
+      "CartesiaVoice": {
         "type": "object",
         "properties": {
-          "accessKeyId": {
-            "type": "string",
-            "description": "Cloudflare R2 Access key ID."
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "secretAccessKey": {
+          "provider": {
             "type": "string",
-            "description": "Cloudflare R2 access key secret. This is not returned in the API."
+            "description": "This is the voice provider that will be used.",
+            "enum": [
+              "cartesia"
+            ]
           },
-          "url": {
+          "voiceId": {
             "type": "string",
-            "description": "Cloudflare R2 base url."
+            "description": "The ID of the particular voice you want to use."
           },
-          "name": {
+          "model": {
             "type": "string",
-            "description": "This is the name of the bucket."
+            "description": "This is the model that will be used. This is optional and will default to the correct model for the voiceId.",
+            "enum": [
+              "sonic-2",
+              "sonic-english",
+              "sonic-multilingual",
+              "sonic-preview",
+              "sonic"
+            ],
+            "example": "sonic-english"
           },
-          "path": {
+          "language": {
             "type": "string",
-            "description": "This is the path where call artifacts will be stored.\n\nUsage:\n- To store call artifacts in a specific folder, set this to the full path. Eg. \"/folder-name1/folder-name2\".\n- To store call artifacts in the root of the bucket, leave this blank.\n\n@default \"/\""
+            "description": "This is the language that will be used. This is optional and will default to the correct language for the voiceId.",
+            "enum": [
+              "en",
+              "de",
+              "es",
+              "fr",
+              "ja",
+              "pt",
+              "zh",
+              "hi",
+              "it",
+              "ko",
+              "nl",
+              "pl",
+              "ru",
+              "sv",
+              "tr"
+            ],
+            "example": "en"
+          },
+          "experimentalControls": {
+            "description": "Experimental controls for Cartesia voice generation",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CartesiaExperimentalControls"
+              }
+            ]
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
-          "name"
+          "provider",
+          "voiceId"
         ]
       },
-      "CreateCloudflareCredentialDTO": {
+      "CustomVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported.",
             "enum": [
-              "cloudflare"
-            ],
-            "description": "Credential provider. Only allowed value is cloudflare"
-          },
-          "accountId": {
-            "type": "string",
-            "description": "Cloudflare Account Id."
-          },
-          "apiKey": {
-            "type": "string",
-            "description": "Cloudflare API Key / Token."
+              "custom-voice"
+            ]
           },
-          "accountEmail": {
-            "type": "string",
-            "description": "Cloudflare Account Email."
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
           },
-          "bucketPlan": {
-            "description": "This is the bucket plan that can be provided to store call artifacts in R2",
+          "server": {
+            "description": "This is where the voice request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"message\": {\n    \"type\": \"voice-request\",\n    \"text\": \"Hello, world!\",\n    \"sampleRate\": 24000,\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected: 1-channel 16-bit raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport:\n```\nresponse.on('data', (chunk: Buffer) => {\n  outputStream.write(chunk);\n});\n```",
             "allOf": [
               {
-                "$ref": "#/components/schemas/CloudflareR2BucketPlan"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
-          "provider"
+          "provider",
+          "server"
         ]
       },
-      "OAuth2AuthenticationPlan": {
+      "DeepgramVoice": {
         "type": "object",
         "properties": {
-          "type": {
-            "type": "string",
-            "enum": [
-              "oauth2",
-              "aws-sts"
-            ]
-          },
-          "url": {
-            "type": "string",
-            "description": "This is the OAuth2 URL."
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "clientId": {
+          "provider": {
             "type": "string",
-            "description": "This is the OAuth2 client ID."
+            "description": "This is the voice provider that will be used.",
+            "enum": [
+              "deepgram"
+            ]
           },
-          "clientSecret": {
+          "voiceId": {
             "type": "string",
-            "description": "This is the OAuth2 client secret."
+            "description": "This is the provider-specific ID that will be used.",
+            "enum": [
+              "asteria",
+              "luna",
+              "stella",
+              "athena",
+              "hera",
+              "orion",
+              "arcas",
+              "perseus",
+              "angus",
+              "orpheus",
+              "helios",
+              "zeus",
+              "thalia",
+              "andromeda",
+              "helena",
+              "apollo",
+              "arcas",
+              "aries",
+              "amalthea",
+              "asteria",
+              "athena",
+              "atlas",
+              "aurora",
+              "callista",
+              "cora",
+              "cordelia",
+              "delia",
+              "draco",
+              "electra",
+              "harmonia",
+              "hera",
+              "hermes",
+              "hyperion",
+              "iris",
+              "janus",
+              "juno",
+              "jupiter",
+              "luna",
+              "mars",
+              "minerva",
+              "neptune",
+              "odysseus",
+              "ophelia",
+              "orion",
+              "orpheus",
+              "pandora",
+              "phoebe",
+              "pluto",
+              "saturn",
+              "selene",
+              "theia",
+              "vesta",
+              "zeus"
+            ],
+            "title": "This is the Deepgram Voice ID"
           },
-          "scope": {
-            "type": "string",
-            "description": "This is the scope of the OAuth2 token.",
-            "maxLength": 1000
-          }
-        },
-        "required": [
-          "type",
-          "url",
-          "clientId",
-          "clientSecret"
-        ]
-      },
-      "CreateCustomLLMCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+          "model": {
             "type": "string",
+            "description": "This is the model that will be used. Defaults to 'aura-2' when not specified.",
             "enum": [
-              "custom-llm"
-            ]
+              "aura",
+              "aura-2"
+            ],
+            "example": "aura-2"
           },
-          "apiKey": {
-            "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+          "mipOptOut": {
+            "type": "boolean",
+            "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false",
+            "example": false,
+            "default": false
           },
-          "authenticationPlan": {
-            "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey",
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreateDeepgramCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "deepgram"
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
             ]
-          },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
-          },
-          "apiUrl": {
-            "type": "string",
-            "description": "This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com."
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
           }
         },
         "required": [
           "provider",
-          "apiKey"
+          "voiceId"
         ]
       },
-      "CreateDeepInfraCredentialDTO": {
+      "ElevenLabsPronunciationDictionaryLocator": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "deepinfra"
-            ]
-          },
-          "apiKey": {
+          "pronunciationDictionaryId": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the ID of the pronunciation dictionary to use.",
+            "title": "This is the ElevenLabs Pronunciation Dictionary ID"
           },
-          "name": {
+          "versionId": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "This is the version ID of the pronunciation dictionary to use.",
+            "title": "This is the ElevenLabs Pronunciation Dictionary Version ID"
           }
         },
         "required": [
-          "provider",
-          "apiKey"
+          "pronunciationDictionaryId",
+          "versionId"
         ]
       },
-      "CreateDeepSeekCredentialDTO": {
+      "ElevenLabsVoice": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "deep-seek"
-            ]
-          },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreateElevenLabsCredentialDTO": {
-        "type": "object",
-        "properties": {
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
               "11labs"
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "GcpKey": {
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string",
-            "description": "This is the type of the key. Most likely, this is \"service_account\"."
-          },
-          "projectId": {
-            "type": "string",
-            "description": "This is the ID of the Google Cloud project associated with this key."
-          },
-          "privateKeyId": {
-            "type": "string",
-            "description": "This is the unique identifier for the private key."
-          },
-          "privateKey": {
-            "type": "string",
-            "description": "This is the private key in PEM format.\n\nNote: This is not returned in the API."
-          },
-          "clientEmail": {
-            "type": "string",
-            "description": "This is the email address associated with the service account."
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "burt",
+                  "marissa",
+                  "andrea",
+                  "sarah",
+                  "phillip",
+                  "steve",
+                  "joseph",
+                  "myra",
+                  "paula",
+                  "ryan",
+                  "drew",
+                  "paul",
+                  "mrb",
+                  "matilda",
+                  "mark"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "11Labs Voice ID"
+              }
+            ]
           },
-          "clientId": {
-            "type": "string",
-            "description": "This is the unique identifier for the client."
+          "stability": {
+            "type": "number",
+            "description": "Defines the stability for voice settings.",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0.5
           },
-          "authUri": {
-            "type": "string",
-            "description": "This is the URI for the auth provider's authorization endpoint."
+          "similarityBoost": {
+            "type": "number",
+            "description": "Defines the similarity boost for voice settings.",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0.75
           },
-          "tokenUri": {
-            "type": "string",
-            "description": "This is the URI for the auth provider's token endpoint."
+          "style": {
+            "type": "number",
+            "description": "Defines the style for voice settings.",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0
           },
-          "authProviderX509CertUrl": {
-            "type": "string",
-            "description": "This is the URL of the public x509 certificate for the auth provider."
+          "useSpeakerBoost": {
+            "type": "boolean",
+            "description": "Defines the use speaker boost for voice settings.",
+            "example": false
           },
-          "clientX509CertUrl": {
-            "type": "string",
-            "description": "This is the URL of the public x509 certificate for the client."
+          "speed": {
+            "type": "number",
+            "description": "Defines the speed for voice settings.",
+            "minimum": 0.7,
+            "maximum": 1.2,
+            "example": 0.9
           },
-          "universeDomain": {
-            "type": "string",
-            "description": "This is the domain associated with the universe this service account belongs to."
-          }
-        },
-        "required": [
-          "type",
-          "projectId",
-          "privateKeyId",
-          "privateKey",
-          "clientEmail",
-          "clientId",
-          "authUri",
-          "tokenUri",
-          "authProviderX509CertUrl",
-          "clientX509CertUrl",
-          "universeDomain"
-        ]
-      },
-      "BucketPlan": {
-        "type": "object",
-        "properties": {
-          "name": {
-            "type": "string",
-            "description": "This is the name of the bucket."
+          "optimizeStreamingLatency": {
+            "type": "number",
+            "description": "Defines the optimize streaming latency for voice settings. Defaults to 3.",
+            "minimum": 0,
+            "maximum": 4,
+            "example": 3
           },
-          "region": {
-            "type": "string",
-            "description": "This is the region of the bucket.\n\nUsage:\n- If `credential.type` is `aws`, then this is required.\n- If `credential.type` is `gcp`, then this is optional since GCP allows buckets to be accessed without a region but region is required for data residency requirements. Read here: https://cloud.google.com/storage/docs/request-endpoints"
+          "enableSsmlParsing": {
+            "type": "boolean",
+            "description": "This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency.\n\n@default false",
+            "example": false
           },
-          "path": {
-            "type": "string",
-            "description": "This is the path where call artifacts will be stored.\n\nUsage:\n- To store call artifacts in a specific folder, set this to the full path. Eg. \"/folder-name1/folder-name2\".\n- To store call artifacts in the root of the bucket, leave this blank.\n\n@default \"/\""
+          "autoMode": {
+            "type": "boolean",
+            "description": "Defines the auto mode for voice settings. Defaults to false.",
+            "example": false
           },
-          "hmacAccessKey": {
+          "model": {
             "type": "string",
-            "description": "This is the HMAC access key offered by GCP for interoperability with S3 clients. Here is the guide on how to create: https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console\n\nUsage:\n- If `credential.type` is `gcp`, then this is required.\n- If `credential.type` is `aws`, then this is not required since credential.awsAccessKeyId is used instead."
+            "description": "This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified.",
+            "enum": [
+              "eleven_multilingual_v2",
+              "eleven_turbo_v2",
+              "eleven_turbo_v2_5",
+              "eleven_flash_v2",
+              "eleven_flash_v2_5",
+              "eleven_monolingual_v1"
+            ],
+            "example": "eleven_turbo_v2_5"
           },
-          "hmacSecret": {
-            "type": "string",
-            "description": "This is the secret for the HMAC access key. Here is the guide on how to create: https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console\n\nUsage:\n- If `credential.type` is `gcp`, then this is required.\n- If `credential.type` is `aws`, then this is not required since credential.awsSecretAccessKey is used instead.\n\nNote: This is not returned in the API."
-          }
-        },
-        "required": [
-          "name"
-        ]
-      },
-      "CreateGcpCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+          "language": {
             "type": "string",
-            "enum": [
-              "gcp"
-            ]
+            "description": "This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports language enforcement. For other models, an error will be returned if language code is provided."
           },
-          "gcpKey": {
-            "description": "This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details/<service-account-id>/keys.\n\nThe schema is identical to the JSON that GCP outputs.",
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/GcpKey"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
           },
-          "bucketPlan": {
-            "description": "This is the bucket plan that can be provided to store call artifacts in GCP.",
+          "pronunciationDictionaryLocators": {
+            "description": "This is the pronunciation dictionary locators to use.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ElevenLabsPronunciationDictionaryLocator"
+            }
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/BucketPlan"
+                "$ref": "#/components/schemas/FallbackPlan"
               }
             ]
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
           }
         },
         "required": [
           "provider",
-          "gcpKey"
+          "voiceId"
         ]
       },
-      "CreateGladiaCredentialDTO": {
+      "HumeVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "gladia"
+              "hume"
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreateGoHighLevelCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+          "model": {
             "type": "string",
+            "description": "This is the model that will be used.",
             "enum": [
-              "gohighlevel"
-            ]
+              "octave"
+            ],
+            "example": "octave"
           },
-          "apiKey": {
+          "voiceId": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The ID of the particular voice you want to use."
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreateGroqCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "groq"
+          "isCustomHumeVoice": {
+            "type": "boolean",
+            "description": "Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.",
+            "example": false
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
             ]
           },
-          "apiKey": {
+          "description": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "Natural language instructions describing how the synthesized speech should sound, including but not limited to tone, intonation, pacing, and accent (e.g., 'a soft, gentle voice with a strong British accent').\n\nIf a Voice is specified in the request, this description serves as acting instructions.\nIf no Voice is specified, a new voice is generated based on this description."
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "apiKey"
+          "voiceId"
         ]
       },
-      "CreateLangfuseCredentialDTO": {
+      "LMNTVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "langfuse"
+              "lmnt"
             ]
           },
-          "publicKey": {
-            "type": "string",
-            "description": "The public key for Langfuse project. Eg: pk-lf-..."
-          },
-          "apiKey": {
-            "type": "string",
-            "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API."
-          },
-          "apiUrl": {
-            "type": "string",
-            "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com"
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "amy",
+                  "ansel",
+                  "autumn",
+                  "ava",
+                  "brandon",
+                  "caleb",
+                  "cassian",
+                  "chloe",
+                  "dalton",
+                  "daniel",
+                  "dustin",
+                  "elowen",
+                  "evander",
+                  "huxley",
+                  "james",
+                  "juniper",
+                  "kennedy",
+                  "lauren",
+                  "leah",
+                  "lily",
+                  "lucas",
+                  "magnus",
+                  "miles",
+                  "morgan",
+                  "natalie",
+                  "nathan",
+                  "noah",
+                  "nyssa",
+                  "oliver",
+                  "paige",
+                  "ryan",
+                  "sadie",
+                  "sophie",
+                  "stella",
+                  "terrence",
+                  "tyler",
+                  "vesper",
+                  "violet",
+                  "warrick",
+                  "zain",
+                  "zeke",
+                  "zoe"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "LMNT Voice ID"
+              }
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "publicKey",
-          "apiKey",
-          "apiUrl"
-        ]
-      },
-      "CreateLmntCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.25,
+            "maximum": 2,
+            "example": null
+          },
+          "language": {
+            "description": "Two letter ISO 639-1 language code. Use \"auto\" for auto-detection.",
             "enum": [
-              "lmnt"
+              "aa",
+              "ab",
+              "ae",
+              "af",
+              "ak",
+              "am",
+              "an",
+              "ar",
+              "as",
+              "av",
+              "ay",
+              "az",
+              "ba",
+              "be",
+              "bg",
+              "bh",
+              "bi",
+              "bm",
+              "bn",
+              "bo",
+              "br",
+              "bs",
+              "ca",
+              "ce",
+              "ch",
+              "co",
+              "cr",
+              "cs",
+              "cu",
+              "cv",
+              "cy",
+              "da",
+              "de",
+              "dv",
+              "dz",
+              "ee",
+              "el",
+              "en",
+              "eo",
+              "es",
+              "et",
+              "eu",
+              "fa",
+              "ff",
+              "fi",
+              "fj",
+              "fo",
+              "fr",
+              "fy",
+              "ga",
+              "gd",
+              "gl",
+              "gn",
+              "gu",
+              "gv",
+              "ha",
+              "he",
+              "hi",
+              "ho",
+              "hr",
+              "ht",
+              "hu",
+              "hy",
+              "hz",
+              "ia",
+              "id",
+              "ie",
+              "ig",
+              "ii",
+              "ik",
+              "io",
+              "is",
+              "it",
+              "iu",
+              "ja",
+              "jv",
+              "ka",
+              "kg",
+              "ki",
+              "kj",
+              "kk",
+              "kl",
+              "km",
+              "kn",
+              "ko",
+              "kr",
+              "ks",
+              "ku",
+              "kv",
+              "kw",
+              "ky",
+              "la",
+              "lb",
+              "lg",
+              "li",
+              "ln",
+              "lo",
+              "lt",
+              "lu",
+              "lv",
+              "mg",
+              "mh",
+              "mi",
+              "mk",
+              "ml",
+              "mn",
+              "mr",
+              "ms",
+              "mt",
+              "my",
+              "na",
+              "nb",
+              "nd",
+              "ne",
+              "ng",
+              "nl",
+              "nn",
+              "no",
+              "nr",
+              "nv",
+              "ny",
+              "oc",
+              "oj",
+              "om",
+              "or",
+              "os",
+              "pa",
+              "pi",
+              "pl",
+              "ps",
+              "pt",
+              "qu",
+              "rm",
+              "rn",
+              "ro",
+              "ru",
+              "rw",
+              "sa",
+              "sc",
+              "sd",
+              "se",
+              "sg",
+              "si",
+              "sk",
+              "sl",
+              "sm",
+              "sn",
+              "so",
+              "sq",
+              "sr",
+              "ss",
+              "st",
+              "su",
+              "sv",
+              "sw",
+              "ta",
+              "te",
+              "tg",
+              "th",
+              "ti",
+              "tk",
+              "tl",
+              "tn",
+              "to",
+              "tr",
+              "ts",
+              "tt",
+              "tw",
+              "ty",
+              "ug",
+              "uk",
+              "ur",
+              "uz",
+              "ve",
+              "vi",
+              "vo",
+              "wa",
+              "wo",
+              "xh",
+              "yi",
+              "yue",
+              "yo",
+              "za",
+              "zh",
+              "zu",
+              "auto"
+            ],
+            "example": "en",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "aa",
+                  "ab",
+                  "ae",
+                  "af",
+                  "ak",
+                  "am",
+                  "an",
+                  "ar",
+                  "as",
+                  "av",
+                  "ay",
+                  "az",
+                  "ba",
+                  "be",
+                  "bg",
+                  "bh",
+                  "bi",
+                  "bm",
+                  "bn",
+                  "bo",
+                  "br",
+                  "bs",
+                  "ca",
+                  "ce",
+                  "ch",
+                  "co",
+                  "cr",
+                  "cs",
+                  "cu",
+                  "cv",
+                  "cy",
+                  "da",
+                  "de",
+                  "dv",
+                  "dz",
+                  "ee",
+                  "el",
+                  "en",
+                  "eo",
+                  "es",
+                  "et",
+                  "eu",
+                  "fa",
+                  "ff",
+                  "fi",
+                  "fj",
+                  "fo",
+                  "fr",
+                  "fy",
+                  "ga",
+                  "gd",
+                  "gl",
+                  "gn",
+                  "gu",
+                  "gv",
+                  "ha",
+                  "he",
+                  "hi",
+                  "ho",
+                  "hr",
+                  "ht",
+                  "hu",
+                  "hy",
+                  "hz",
+                  "ia",
+                  "id",
+                  "ie",
+                  "ig",
+                  "ii",
+                  "ik",
+                  "io",
+                  "is",
+                  "it",
+                  "iu",
+                  "ja",
+                  "jv",
+                  "ka",
+                  "kg",
+                  "ki",
+                  "kj",
+                  "kk",
+                  "kl",
+                  "km",
+                  "kn",
+                  "ko",
+                  "kr",
+                  "ks",
+                  "ku",
+                  "kv",
+                  "kw",
+                  "ky",
+                  "la",
+                  "lb",
+                  "lg",
+                  "li",
+                  "ln",
+                  "lo",
+                  "lt",
+                  "lu",
+                  "lv",
+                  "mg",
+                  "mh",
+                  "mi",
+                  "mk",
+                  "ml",
+                  "mn",
+                  "mr",
+                  "ms",
+                  "mt",
+                  "my",
+                  "na",
+                  "nb",
+                  "nd",
+                  "ne",
+                  "ng",
+                  "nl",
+                  "nn",
+                  "no",
+                  "nr",
+                  "nv",
+                  "ny",
+                  "oc",
+                  "oj",
+                  "om",
+                  "or",
+                  "os",
+                  "pa",
+                  "pi",
+                  "pl",
+                  "ps",
+                  "pt",
+                  "qu",
+                  "rm",
+                  "rn",
+                  "ro",
+                  "ru",
+                  "rw",
+                  "sa",
+                  "sc",
+                  "sd",
+                  "se",
+                  "sg",
+                  "si",
+                  "sk",
+                  "sl",
+                  "sm",
+                  "sn",
+                  "so",
+                  "sq",
+                  "sr",
+                  "ss",
+                  "st",
+                  "su",
+                  "sv",
+                  "sw",
+                  "ta",
+                  "te",
+                  "tg",
+                  "th",
+                  "ti",
+                  "tk",
+                  "tl",
+                  "tn",
+                  "to",
+                  "tr",
+                  "ts",
+                  "tt",
+                  "tw",
+                  "ty",
+                  "ug",
+                  "uk",
+                  "ur",
+                  "uz",
+                  "ve",
+                  "vi",
+                  "vo",
+                  "wa",
+                  "wo",
+                  "xh",
+                  "yi",
+                  "yue",
+                  "yo",
+                  "za",
+                  "zh",
+                  "zu"
+                ],
+                "title": "ISO 639-1 Language Code"
+              },
+              {
+                "type": "string",
+                "enum": [
+                  "auto"
+                ],
+                "title": "Auto-detect"
+              }
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "apiKey"
+          "voiceId"
         ]
       },
-      "CreateMakeCredentialDTO": {
+      "NeuphonicVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "make"
+              "neuphonic"
             ]
           },
-          "teamId": {
-            "type": "string",
-            "description": "Team ID"
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "Neuphonic Voice ID"
+              }
+            ]
           },
-          "region": {
+          "model": {
             "type": "string",
-            "description": "Region of your application. For example: eu1, eu2, us1, us2"
+            "description": "This is the model that will be used. Defaults to 'neu_fast' if not specified.",
+            "enum": [
+              "neu_hq",
+              "neu_fast"
+            ],
+            "example": "neu_fast"
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "language": {
+            "type": "object",
+            "description": "This is the language (ISO 639-1) that is enforced for the model.",
+            "example": "en"
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.25,
+            "maximum": 2,
+            "example": null
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "teamId",
-          "region",
-          "apiKey"
+          "voiceId",
+          "language"
         ]
       },
-      "CreateOpenAICredentialDTO": {
+      "OpenAIVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
               "openai"
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.\nPlease note that ash, ballad, coral, sage, and verse may only be used with realtime models.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "alloy",
+                  "echo",
+                  "fable",
+                  "onyx",
+                  "nova",
+                  "shimmer"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "OpenAI Voice ID"
+              }
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreateOpenRouterCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+          "model": {
             "type": "string",
+            "description": "This is the model that will be used for text-to-speech.",
             "enum": [
-              "openrouter"
+              "tts-1",
+              "tts-1-hd",
+              "gpt-4o-mini-tts"
             ]
           },
-          "apiKey": {
+          "instructions": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is a prompt that allows you to control the voice of your generated audio.\nDoes not work with 'tts-1' or 'tts-1-hd' models.",
+            "maxLength": 10000
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreatePerplexityAICredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "perplexity-ai"
-            ]
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.25,
+            "maximum": 4,
+            "example": null
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "apiKey"
+          "voiceId"
         ]
       },
-      "CreatePlayHTCredentialDTO": {
+      "PlayHTVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
               "playht"
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
-          },
-          "userId": {
-            "type": "string"
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey",
-          "userId"
-        ]
-      },
-      "CreateRimeAICredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "rime-ai"
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "jennifer",
+                  "melissa",
+                  "will",
+                  "chris",
+                  "matt",
+                  "jack",
+                  "ruby",
+                  "davis",
+                  "donna",
+                  "michael"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "PlayHT Voice ID"
+              }
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.1,
+            "maximum": 5,
+            "example": null
           },
-          "name": {
+          "temperature": {
+            "type": "number",
+            "description": "A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model's default temperature will be used. The temperature parameter controls variance. Lower temperatures result in more predictable results, higher temperatures allow each run to vary more, so the voice may sound less like the baseline voice.",
+            "minimum": 0.1,
+            "maximum": 2,
+            "example": null
+          },
+          "emotion": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreateRunpodCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+            "description": "An emotion to be applied to the speech.",
+            "enum": [
+              "female_happy",
+              "female_sad",
+              "female_angry",
+              "female_fearful",
+              "female_disgust",
+              "female_surprised",
+              "male_happy",
+              "male_sad",
+              "male_angry",
+              "male_fearful",
+              "male_disgust",
+              "male_surprised"
+            ],
+            "example": null
+          },
+          "voiceGuidance": {
+            "type": "number",
+            "description": "A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared to other voices.",
+            "minimum": 1,
+            "maximum": 6,
+            "example": null
+          },
+          "styleGuidance": {
+            "type": "number",
+            "description": "A number between 1 and 30. Use lower numbers to to reduce how strong your chosen emotion will be. Higher numbers will create a very emotional performance.",
+            "minimum": 1,
+            "maximum": 30,
+            "example": null
+          },
+          "textGuidance": {
+            "type": "number",
+            "description": "A number between 1 and 2. This number influences how closely the generated speech adheres to the input text. Use lower values to create more fluid speech, but with a higher chance of deviating from the input text. Higher numbers will make the generated speech more accurate to the input text, ensuring that the words spoken align closely with the provided text.",
+            "minimum": 1,
+            "maximum": 2,
+            "example": null
+          },
+          "model": {
             "type": "string",
+            "description": "Playht voice model/engine to use.",
             "enum": [
-              "runpod"
+              "PlayHT2.0",
+              "PlayHT2.0-turbo",
+              "Play3.0-mini",
+              "PlayDialog"
             ]
           },
-          "apiKey": {
+          "language": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The language to use for the speech.",
+            "enum": [
+              "afrikaans",
+              "albanian",
+              "amharic",
+              "arabic",
+              "bengali",
+              "bulgarian",
+              "catalan",
+              "croatian",
+              "czech",
+              "danish",
+              "dutch",
+              "english",
+              "french",
+              "galician",
+              "german",
+              "greek",
+              "hebrew",
+              "hindi",
+              "hungarian",
+              "indonesian",
+              "italian",
+              "japanese",
+              "korean",
+              "malay",
+              "mandarin",
+              "polish",
+              "portuguese",
+              "russian",
+              "serbian",
+              "spanish",
+              "swedish",
+              "tagalog",
+              "thai",
+              "turkish",
+              "ukrainian",
+              "urdu",
+              "xhosa"
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "apiKey"
+          "voiceId"
         ]
       },
-      "CreateS3CredentialDTO": {
+      "RimeAIVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "s3"
-            ],
-            "description": "Credential provider. Only allowed value is s3"
+              "rime-ai"
+            ]
           },
-          "awsAccessKeyId": {
-            "type": "string",
-            "description": "AWS access key ID."
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "abbie",
+                  "allison",
+                  "ally",
+                  "alona",
+                  "amber",
+                  "ana",
+                  "antoine",
+                  "armon",
+                  "brenda",
+                  "brittany",
+                  "carol",
+                  "colin",
+                  "courtney",
+                  "elena",
+                  "elliot",
+                  "eva",
+                  "geoff",
+                  "gerald",
+                  "hank",
+                  "helen",
+                  "hera",
+                  "jen",
+                  "joe",
+                  "joy",
+                  "juan",
+                  "kendra",
+                  "kendrick",
+                  "kenneth",
+                  "kevin",
+                  "kris",
+                  "linda",
+                  "madison",
+                  "marge",
+                  "marina",
+                  "marissa",
+                  "marta",
+                  "maya",
+                  "nicholas",
+                  "nyles",
+                  "phil",
+                  "reba",
+                  "rex",
+                  "rick",
+                  "ritu",
+                  "rob",
+                  "rodney",
+                  "rohan",
+                  "rosco",
+                  "samantha",
+                  "sandy",
+                  "selena",
+                  "seth",
+                  "sharon",
+                  "stan",
+                  "tamra",
+                  "tanya",
+                  "tibur",
+                  "tj",
+                  "tyler",
+                  "viv",
+                  "yadira",
+                  "marsh",
+                  "bayou",
+                  "creek",
+                  "brook",
+                  "flower",
+                  "spore",
+                  "glacier",
+                  "gulch",
+                  "alpine",
+                  "cove",
+                  "lagoon",
+                  "tundra",
+                  "steppe",
+                  "mesa",
+                  "grove",
+                  "rainforest",
+                  "moraine",
+                  "wildflower",
+                  "peak",
+                  "boulder",
+                  "gypsum",
+                  "zest",
+                  "luna",
+                  "celeste",
+                  "orion",
+                  "ursa",
+                  "astra",
+                  "esther",
+                  "estelle",
+                  "andromeda"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "RimeAI Voice ID"
+              }
+            ]
           },
-          "awsSecretAccessKey": {
+          "model": {
             "type": "string",
-            "description": "AWS access key secret. This is not returned in the API."
+            "description": "This is the model that will be used. Defaults to 'arcana' when not specified.",
+            "enum": [
+              "arcana",
+              "mistv2",
+              "mist"
+            ],
+            "example": "arcana"
           },
-          "region": {
-            "type": "string",
-            "description": "AWS region in which the S3 bucket is located."
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.1,
+            "example": null
           },
-          "s3BucketName": {
-            "type": "string",
-            "description": "AWS S3 bucket name."
+          "pauseBetweenBrackets": {
+            "type": "boolean",
+            "description": "This is a flag that controls whether to add slight pauses using angle brackets. Example: \"Hi. <200> I'd love to have a conversation with you.\" adds a 200ms pause between the first and second sentences.",
+            "example": false
           },
-          "s3PathPrefix": {
-            "type": "string",
-            "description": "The path prefix for the uploaded recording. Ex. \"recordings/\""
+          "phonemizeBetweenBrackets": {
+            "type": "boolean",
+            "description": "This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic pronunciation) - Example: \"{h'El.o} World\" will pronounce \"Hello\" as expected.",
+            "example": false
           },
-          "name": {
+          "reduceLatency": {
+            "type": "boolean",
+            "description": "This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency",
+            "example": false
+          },
+          "inlineSpeedAlpha": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha",
+            "example": null
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "awsAccessKeyId",
-          "awsSecretAccessKey",
-          "region",
-          "s3BucketName",
-          "s3PathPrefix"
+          "voiceId"
         ]
       },
-      "SupabaseBucketPlan": {
+      "SesameVoice": {
         "type": "object",
         "properties": {
-          "region": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
+          "provider": {
             "type": "string",
-            "description": "This is the S3 Region. It should look like us-east-1\nIt should be one of the supabase regions defined in the SUPABASE_REGION enum\nCheck https://supabase.com/docs/guides/platform/regions for up to date regions",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "us-west-1",
-              "us-east-1",
-              "us-east-2",
-              "ca-central-1",
-              "eu-west-1",
-              "eu-west-2",
-              "eu-west-3",
-              "eu-central-1",
-              "eu-central-2",
-              "eu-north-1",
-              "ap-south-1",
-              "ap-southeast-1",
-              "ap-northeast-1",
-              "ap-northeast-2",
-              "ap-southeast-2",
-              "sa-east-1"
+              "sesame"
             ]
           },
-          "url": {
-            "type": "string",
-            "description": "This is the S3 compatible URL for Supabase S3\nThis should look like https://<project-ID>.supabase.co/storage/v1/s3"
-          },
-          "accessKeyId": {
+          "voiceId": {
             "type": "string",
-            "description": "This is the Supabase S3 Access Key ID.\nThe user creates this in the Supabase project Storage settings"
+            "description": "This is the provider-specific ID that will be used.",
+            "title": "Sesame Voice ID. This should be either a name (a built-in voice) or a UUID (a custom voice)."
           },
-          "secretAccessKey": {
+          "model": {
             "type": "string",
-            "description": "This is the Supabase S3 Secret Access Key.\nThe user creates this in the Supabase project Storage settings along with the access key id"
+            "description": "This is the model that will be used.",
+            "enum": [
+              "csm-1b"
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the Supabase S3 Bucket Name.\nThe user must create this in Supabase under Storage > Buckets\nA bucket that does not exist will not be checked now, but file uploads will fail"
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
           },
-          "path": {
-            "type": "string",
-            "description": "This is the Supabase S3 Bucket Folder Path.\nThe user can create this in Supabase under Storage > Buckets\nA path that does not exist will not be checked now, but file uploads will fail\nA Path is like a folder in the bucket\nEg. If the bucket is called \"my-bucket\" and the path is \"my-folder\", the full path is \"my-bucket/my-folder\""
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
-          "region",
-          "url",
-          "accessKeyId",
-          "secretAccessKey",
-          "name"
+          "provider",
+          "voiceId",
+          "model"
         ]
       },
-      "CreateSupabaseCredentialDTO": {
+      "SmallestAIVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "supabase"
-            ],
-            "description": "This is for supabase storage."
+              "smallest-ai"
+            ]
           },
-          "bucketPlan": {
-            "$ref": "#/components/schemas/SupabaseBucketPlan"
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "emily",
+                  "jasmine",
+                  "arman",
+                  "james",
+                  "mithali",
+                  "aravind",
+                  "raj",
+                  "diya",
+                  "raman",
+                  "ananya",
+                  "isha",
+                  "william",
+                  "aarav",
+                  "monika",
+                  "niharika",
+                  "deepika",
+                  "raghav",
+                  "kajal",
+                  "radhika",
+                  "mansi",
+                  "nisha",
+                  "saurabh",
+                  "pooja",
+                  "saina",
+                  "sanya"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "Smallest AI Voice ID"
+              }
+            ]
           },
-          "name": {
+          "model": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "Smallest AI voice model to use. Defaults to 'lightning' when not specified.",
+            "enum": [
+              "lightning"
+            ]
+          },
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "example": null
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
-          "provider"
+          "provider",
+          "voiceId"
         ]
       },
-      "CreateSmallestAICredentialDTO": {
+      "TavusConversationProperties": {
         "type": "object",
         "properties": {
-          "provider": {
+          "maxCallDuration": {
+            "type": "number",
+            "description": "The maximum duration of the call in seconds. The default `maxCallDuration` is 3600 seconds (1 hour).\nOnce the time limit specified by this parameter has been reached, the conversation will automatically shut down."
+          },
+          "participantLeftTimeout": {
+            "type": "number",
+            "description": "The duration in seconds after which the call will be automatically shut down once the last participant leaves."
+          },
+          "participantAbsentTimeout": {
+            "type": "number",
+            "description": "Starting from conversation creation, the duration in seconds after which the call will be automatically shut down if no participant joins the call.\nDefault is 300 seconds (5 minutes)."
+          },
+          "enableRecording": {
+            "type": "boolean",
+            "description": "If true, the user will be able to record the conversation."
+          },
+          "enableTranscription": {
+            "type": "boolean",
+            "description": "If true, the user will be able to transcribe the conversation.\nYou can find more instructions on displaying transcriptions if you are using your custom DailyJS components here.\nYou need to have an event listener on Daily that listens for `app-messages`."
+          },
+          "applyGreenscreen": {
+            "type": "boolean",
+            "description": "If true, the background will be replaced with a greenscreen (RGB values: `[0, 255, 155]`).\nYou can use WebGL on the frontend to make the greenscreen transparent or change its color."
+          },
+          "language": {
             "type": "string",
-            "enum": [
-              "smallest-ai"
-            ]
+            "description": "The language of the conversation. Please provide the **full language name**, not the two-letter code.\nIf you are using your own TTS voice, please ensure it supports the language you provide.\nIf you are using a stock replica or default persona, please note that only ElevenLabs and Cartesia supported languages are available.\nYou can find a full list of supported languages for Cartesia here, for ElevenLabs here, and for PlayHT here."
           },
-          "apiKey": {
+          "recordingS3BucketName": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The name of the S3 bucket where the recording will be stored."
           },
-          "name": {
+          "recordingS3BucketRegion": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "The region of the S3 bucket where the recording will be stored."
+          },
+          "awsAssumeRoleArn": {
+            "type": "string",
+            "description": "The ARN of the role that will be assumed to access the S3 bucket."
           }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
+        }
       },
-      "CreateTavusCredentialDTO": {
+      "TavusVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
               "tavus"
             ]
           },
-          "apiKey": {
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "r52da2535a"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "Tavus Voice ID"
+              }
+            ]
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
+          },
+          "personaId": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the unique identifier for the persona that the replica will use in the conversation."
           },
-          "name": {
+          "callbackUrl": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreateTogetherAICredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+            "description": "This is the url that will receive webhooks with updates regarding the conversation state."
+          },
+          "conversationName": {
             "type": "string",
-            "enum": [
-              "together-ai"
-            ]
+            "description": "This is the name for the conversation."
           },
-          "apiKey": {
+          "conversationalContext": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the context that will be appended to any context provided in the persona, if one is provided."
           },
-          "name": {
+          "customGreeting": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "This is the custom greeting that the replica will give once a participant joines the conversation."
+          },
+          "properties": {
+            "description": "These are optional properties used to customize the conversation.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/TavusConversationProperties"
+              }
+            ]
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "apiKey"
+          "voiceId"
         ]
       },
-      "CreateTwilioCredentialDTO": {
+      "VapiVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "twilio"
+              "vapi"
             ]
           },
-          "authToken": {
+          "voiceId": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The voices provided by Vapi",
+            "enum": [
+              "Elliot",
+              "Kylie",
+              "Rohan",
+              "Lily",
+              "Savannah",
+              "Hana",
+              "Neha",
+              "Cole",
+              "Harry",
+              "Paige",
+              "Spencer"
+            ]
           },
-          "accountSid": {
-            "type": "string"
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.\n\n@default 1",
+            "minimum": 0.25,
+            "maximum": 2,
+            "default": 1
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
+          },
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "authToken",
-          "accountSid"
+          "voiceId"
         ]
       },
-      "CreateVonageCredentialDTO": {
+      "InworldVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "vonage"
+              "inworld"
             ]
           },
-          "apiSecret": {
+          "voiceId": {
             "type": "string",
-            "description": "This is not returned in the API."
-          },
-          "apiKey": {
-            "type": "string"
+            "description": "Available voices by language:\n• en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus\n• zh: Yichen, Xiaoyin, Xinyi, Jing\n• nl: Erik, Katrien, Lennart, Lore\n• fr: Alain, Hélène, Mathieu, Étienne\n• de: Johanna, Josef\n• it: Gianni, Orietta\n• ja: Asuka, Satoshi\n• ko: Hyunwoo, Minji, Seojun, Yoona\n• pl: Szymon, Wojciech\n• pt: Heitor, Maitê\n• es: Diego, Lupita, Miguel, Rafael",
+            "maxLength": 120,
+            "title": "Inworld Voice ID",
+            "enum": [
+              "Alex",
+              "Ashley",
+              "Craig",
+              "Deborah",
+              "Dennis",
+              "Edward",
+              "Elizabeth",
+              "Hades",
+              "Julia",
+              "Pixie",
+              "Mark",
+              "Olivia",
+              "Priya",
+              "Ronald",
+              "Sarah",
+              "Shaun",
+              "Theodore",
+              "Timothy",
+              "Wendy",
+              "Dominus",
+              "Yichen",
+              "Xiaoyin",
+              "Xinyi",
+              "Jing",
+              "Erik",
+              "Katrien",
+              "Lennart",
+              "Lore",
+              "Alain",
+              "Hélène",
+              "Mathieu",
+              "Étienne",
+              "Johanna",
+              "Josef",
+              "Gianni",
+              "Orietta",
+              "Asuka",
+              "Satoshi",
+              "Hyunwoo",
+              "Minji",
+              "Seojun",
+              "Yoona",
+              "Szymon",
+              "Wojciech",
+              "Heitor",
+              "Maitê",
+              "Diego",
+              "Lupita",
+              "Miguel",
+              "Rafael"
+            ],
+            "example": "Alex"
           },
-          "name": {
+          "model": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiSecret",
-          "apiKey"
-        ]
-      },
-      "CreateWebhookCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+            "description": "This is the model that will be used.",
+            "enum": [
+              "inworld-tts-1"
+            ],
+            "default": "inworld-tts-1"
+          },
+          "languageCode": {
             "type": "string",
+            "description": "Language code for Inworld TTS synthesis",
+            "default": "en",
             "enum": [
-              "webhook"
+              "en",
+              "zh",
+              "ko",
+              "nl",
+              "fr",
+              "es",
+              "ja",
+              "de",
+              "it",
+              "pl",
+              "pt"
             ]
           },
-          "authenticationPlan": {
-            "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749.",
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "authenticationPlan"
+          "voiceId"
         ]
       },
-      "CreateXAiCredentialDTO": {
+      "MinimaxVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
-            "description": "This is the api key for Grok in XAi's console. Get it from here: https://console.x.ai",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "xai"
+              "minimax"
             ]
           },
-          "apiKey": {
+          "voiceId": {
             "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+            "description": "This is the provider-specific ID that will be used. Use a voice from MINIMAX_PREDEFINED_VOICES or a custom cloned voice ID.",
+            "title": "This is the Minimax Voice ID"
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
-      },
-      "CreateGoogleCalendarOAuth2ClientCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+          "model": {
             "type": "string",
+            "description": "This is the model that will be used. Options are 'speech-02-hd' and 'speech-02-turbo'.\nspeech-02-hd is optimized for high-fidelity applications like voiceovers and audiobooks.\nspeech-02-turbo is designed for real-time applications with low latency.\n\n@default \"speech-02-turbo\"",
             "enum": [
-              "google.calendar.oauth2-client"
-            ]
+              "speech-02-hd",
+              "speech-02-turbo"
+            ],
+            "example": "speech-02-turbo",
+            "default": "speech-02-turbo"
           },
-          "name": {
+          "emotion": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider"
-        ]
-      },
-      "CreateGoogleCalendarOAuth2AuthorizationCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
+            "description": "The emotion to use for the voice. If not provided, will use auto-detect mode.\nOptions include: 'happy', 'sad', 'angry', 'fearful', 'surprised', 'disgusted', 'neutral'",
+            "example": "happy"
+          },
+          "pitch": {
+            "type": "number",
+            "description": "Voice pitch adjustment. Range from -12 to 12 semitones.\n@default 0",
+            "minimum": -12,
+            "maximum": 12,
+            "example": 0,
+            "default": 0
+          },
+          "speed": {
+            "type": "number",
+            "description": "Voice speed adjustment. Range from 0.5 to 2.0.\n@default 1.0",
+            "minimum": 0.5,
+            "maximum": 2,
+            "example": 1,
+            "default": 1
+          },
+          "volume": {
+            "type": "number",
+            "description": "Voice volume adjustment. Range from 0.5 to 2.0.\n@default 1.0",
+            "minimum": 0.5,
+            "maximum": 2,
+            "example": 1,
+            "default": 1
+          },
+          "region": {
             "type": "string",
+            "description": "The region for Minimax API. Defaults to \"worldwide\".",
             "enum": [
-              "google.calendar.oauth2-authorization"
-            ]
+              "worldwide",
+              "china"
+            ],
+            "default": "worldwide"
           },
-          "authorizationId": {
-            "type": "string",
-            "description": "The authorization ID for the OAuth2 authorization"
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "fallbackPlan": {
+            "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/FallbackPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "authorizationId"
+          "voiceId"
         ]
       },
-      "CreateGoogleSheetsOAuth2AuthorizationCredentialDTO": {
+      "FallbackAzureVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "google.sheets.oauth2-authorization"
+              "azure"
             ]
           },
-          "authorizationId": {
-            "type": "string",
-            "description": "The authorization ID for the OAuth2 authorization"
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "andrew",
+                  "brian",
+                  "emma"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "Azure Voice ID"
+              }
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.5,
+            "maximum": 2
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "authorizationId"
+          "voiceId"
         ]
       },
-      "CreateSlackOAuth2AuthorizationCredentialDTO": {
+      "FallbackCartesiaVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "slack.oauth2-authorization"
+              "cartesia"
             ]
           },
-          "authorizationId": {
+          "voiceId": {
             "type": "string",
-            "description": "The authorization ID for the OAuth2 authorization"
+            "description": "The ID of the particular voice you want to use."
           },
-          "name": {
+          "model": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        },
-        "required": [
-          "provider",
-          "authorizationId"
-        ]
-      },
-      "TransferAssistantHookAction": {
-        "type": "object",
-        "properties": {
-          "type": {
+            "description": "This is the model that will be used. This is optional and will default to the correct model for the voiceId.",
+            "enum": [
+              "sonic-2",
+              "sonic-english",
+              "sonic-multilingual",
+              "sonic-preview",
+              "sonic"
+            ],
+            "example": "sonic-english"
+          },
+          "language": {
             "type": "string",
-            "description": "This is the type of action - must be \"transfer\"",
+            "description": "This is the language that will be used. This is optional and will default to the correct language for the voiceId.",
             "enum": [
-              "transfer"
-            ]
+              "en",
+              "de",
+              "es",
+              "fr",
+              "ja",
+              "pt",
+              "zh",
+              "hi",
+              "it",
+              "ko",
+              "nl",
+              "pl",
+              "ru",
+              "sv",
+              "tr"
+            ],
+            "example": "en"
           },
-          "destination": {
-            "description": "This is the destination details for the transfer - can be a phone number or SIP URI",
-            "oneOf": [
+          "experimentalControls": {
+            "description": "Experimental controls for Cartesia voice generation",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
+                "$ref": "#/components/schemas/CartesiaExperimentalControls"
+              }
+            ]
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
           }
         },
         "required": [
-          "type"
+          "provider",
+          "voiceId"
         ]
       },
-      "GoogleVoicemailDetectionPlan": {
+      "FallbackCustomVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
-            "description": "This is the provider to use for voicemail detection.",
+            "description": "This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported.",
             "enum": [
-              "google"
+              "custom-voice"
             ]
           },
-          "voicemailExpectedDurationSeconds": {
-            "type": "number",
-            "description": "This is how long should we listen in order to determine if we were sent to voicemail or not?\n\n@default 15",
-            "minimum": 5,
-            "maximum": 60,
-            "default": 25
-          }
-        },
-        "required": [
-          "provider",
-          "voicemailExpectedDurationSeconds"
-        ]
-      },
-      "OpenAIVoicemailDetectionPlan": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the provider to use for voicemail detection.",
-            "enum": [
-              "openai"
+          "server": {
+            "description": "This is where the voice request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"message\": {\n    \"type\": \"voice-request\",\n    \"text\": \"Hello, world!\",\n    \"sampleRate\": 24000,\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected: 1-channel 16-bit raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport:\n```\nresponse.on('data', (chunk: Buffer) => {\n  outputStream.write(chunk);\n});\n```",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
             ]
           },
-          "voicemailExpectedDurationSeconds": {
-            "type": "number",
-            "description": "This is how long should we listen in order to determine if we were sent to voicemail or not?\n\n@default 15",
-            "minimum": 5,
-            "maximum": 60,
-            "default": 25
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
           }
         },
         "required": [
           "provider",
-          "voicemailExpectedDurationSeconds"
+          "server"
         ]
       },
-      "TwilioVoicemailDetectionPlan": {
+      "FallbackDeepgramVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
-            "description": "This is the provider to use for voicemail detection.",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "twilio"
+              "deepgram"
             ]
           },
-          "voicemailDetectionTypes": {
-            "type": "array",
-            "description": "These are the AMD messages from Twilio that are considered as voicemail. Default is ['machine_end_beep', 'machine_end_silence'].\n\n@default {Array} ['machine_end_beep', 'machine_end_silence']",
+          "voiceId": {
+            "type": "string",
+            "description": "This is the provider-specific ID that will be used.",
             "enum": [
-              "machine_start",
-              "human",
-              "fax",
-              "unknown",
-              "machine_end_beep",
-              "machine_end_silence",
-              "machine_end_other"
-            ],
-            "example": [
-              "machine_end_beep",
-              "machine_end_silence"
-            ],
-            "items": {
-              "type": "string",
-              "enum": [
-                "machine_start",
-                "human",
-                "fax",
-                "unknown",
-                "machine_end_beep",
-                "machine_end_silence",
-                "machine_end_other"
-              ]
-            }
-          },
-          "enabled": {
-            "type": "boolean",
-            "description": "This sets whether the assistant should detect voicemail. Defaults to true.\n\n@default true"
-          },
-          "machineDetectionTimeout": {
-            "type": "number",
-            "description": "The number of seconds that Twilio should attempt to perform answering machine detection before timing out and returning AnsweredBy as unknown. Default is 30 seconds.\n\nIncreasing this value will provide the engine more time to make a determination. This can be useful when DetectMessageEnd is provided in the MachineDetection parameter and there is an expectation of long answering machine greetings that can exceed 30 seconds.\n\nDecreasing this value will reduce the amount of time the engine has to make a determination. This can be particularly useful when the Enable option is provided in the MachineDetection parameter and you want to limit the time for initial detection.\n\nCheck the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info.\n\n@default 30",
-            "minimum": 3,
-            "maximum": 59
-          },
-          "machineDetectionSpeechThreshold": {
-            "type": "number",
-            "description": "The number of milliseconds that is used as the measuring stick for the length of the speech activity. Durations lower than this value will be interpreted as a human, longer as a machine. Default is 2400 milliseconds.\n\nIncreasing this value will reduce the chance of a False Machine (detected machine, actually human) for a long human greeting (e.g., a business greeting) but increase the time it takes to detect a machine.\n\nDecreasing this value will reduce the chances of a False Human (detected human, actually machine) for short voicemail greetings. The value of this parameter may need to be reduced by more than 1000ms to detect very short voicemail greetings. A reduction of that significance can result in increased False Machine detections. Adjusting the MachineDetectionSpeechEndThreshold is likely the better approach for short voicemails. Decreasing MachineDetectionSpeechThreshold will also reduce the time it takes to detect a machine.\n\nCheck the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info.\n\n@default 2400",
-            "minimum": 1000,
-            "maximum": 6000
-          },
-          "machineDetectionSpeechEndThreshold": {
-            "type": "number",
-            "description": "The number of milliseconds of silence after speech activity at which point the speech activity is considered complete. Default is 1200 milliseconds.\n\nIncreasing this value will typically be used to better address the short voicemail greeting scenarios. For short voicemails, there is typically 1000-2000ms of audio followed by 1200-2400ms of silence and then additional audio before the beep. Increasing the MachineDetectionSpeechEndThreshold to ~2500ms will treat the 1200-2400ms of silence as a gap in the greeting but not the end of the greeting and will result in a machine detection. The downsides of such a change include:\n- Increasing the delay for human detection by the amount you increase this parameter, e.g., a change of 1200ms to 2500ms increases human detection delay by 1300ms.\n- Cases where a human has two utterances separated by a period of silence (e.g. a \"Hello\", then 2000ms of silence, and another \"Hello\") may be interpreted as a machine.\n\nDecreasing this value will result in faster human detection. The consequence is that it can lead to increased False Human (detected human, actually machine) detections because a silence gap in a voicemail greeting (not necessarily just in short voicemail scenarios) can be incorrectly interpreted as the end of speech.\n\nCheck the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info.\n\n@default 1200",
-            "minimum": 500,
-            "maximum": 5000
-          },
-          "machineDetectionSilenceTimeout": {
-            "type": "number",
-            "description": "The number of milliseconds of initial silence after which an unknown AnsweredBy result will be returned. Default is 5000 milliseconds.\n\nIncreasing this value will result in waiting for a longer period of initial silence before returning an 'unknown' AMD result.\n\nDecreasing this value will result in waiting for a shorter period of initial silence before returning an 'unknown' AMD result.\n\nCheck the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info.\n\n@default 5000",
-            "minimum": 2000,
-            "maximum": 10000
-          }
-        },
-        "required": [
-          "provider"
-        ]
-      },
-      "CompliancePlan": {
-        "type": "object",
-        "properties": {
-          "hipaaEnabled": {
-            "type": "boolean",
-            "description": "When this is enabled, no logs, recordings, or transcriptions will be stored.\nAt the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.",
-            "example": {
-              "hipaaEnabled": false
-            }
+              "asteria",
+              "luna",
+              "stella",
+              "athena",
+              "hera",
+              "orion",
+              "arcas",
+              "perseus",
+              "angus",
+              "orpheus",
+              "helios",
+              "zeus",
+              "thalia",
+              "andromeda",
+              "helena",
+              "apollo",
+              "arcas",
+              "aries",
+              "amalthea",
+              "asteria",
+              "athena",
+              "atlas",
+              "aurora",
+              "callista",
+              "cora",
+              "cordelia",
+              "delia",
+              "draco",
+              "electra",
+              "harmonia",
+              "hera",
+              "hermes",
+              "hyperion",
+              "iris",
+              "janus",
+              "juno",
+              "jupiter",
+              "luna",
+              "mars",
+              "minerva",
+              "neptune",
+              "odysseus",
+              "ophelia",
+              "orion",
+              "orpheus",
+              "pandora",
+              "phoebe",
+              "pluto",
+              "saturn",
+              "selene",
+              "theia",
+              "vesta",
+              "zeus"
+            ],
+            "title": "This is the Deepgram Voice ID"
           },
-          "pciEnabled": {
-            "type": "boolean",
-            "description": "When this is enabled, the user will be restricted to use PCI-compliant providers, and no logs or transcripts are stored.\nAt the end of the call, you will receive an end-of-call-report message to store on your server. Defaults to false.",
-            "example": {
-              "pciEnabled": false
-            }
-          }
-        }
-      },
-      "StructuredDataPlan": {
-        "type": "object",
-        "properties": {
-          "messages": {
-            "description": "These are the messages used to generate the structured data.\n\n@default: ```\n[\n  {\n    \"role\": \"system\",\n    \"content\": \"You are an expert data extractor. You will be given a transcript of a call. Extract structured data per the JSON Schema. DO NOT return anything except the structured data.\\n\\nJson Schema:\\\\n{{schema}}\\n\\nOnly respond with the JSON.\"\n  },\n  {\n    \"role\": \"user\",\n    \"content\": \"Here is the transcript:\\n\\n{{transcript}}\\n\\n\"\n  }\n]```\n\nYou can customize by providing any messages you want.\n\nHere are the template variables available:\n- {{transcript}}: the transcript of the call from `call.artifact.transcript`- {{systemPrompt}}: the system prompt of the call from `assistant.model.messages[type=system].content`- {{schema}}: the schema of the structured data from `structuredDataPlan.schema`",
-            "type": "array",
-            "items": {
-              "type": "object"
-            }
+          "model": {
+            "type": "string",
+            "description": "This is the model that will be used. Defaults to 'aura-2' when not specified.",
+            "enum": [
+              "aura",
+              "aura-2"
+            ],
+            "example": "aura-2"
           },
-          "enabled": {
+          "mipOptOut": {
             "type": "boolean",
-            "description": "This determines whether structured data is generated and stored in `call.analysis.structuredData`. Defaults to false.\n\nUsage:\n- If you want to extract structured data, set this to true and provide a `schema`.\n\n@default false"
-          },
-          "schema": {
-            "description": "This is the schema of the structured data. The output is stored in `call.analysis.structuredData`.\n\nComplete guide on JSON Schema can be found [here](https://ajv.js.org/json-schema.html#json-data-type).",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/JsonSchema"
-              }
-            ]
-          },
-          "timeoutSeconds": {
-            "type": "number",
-            "description": "This is how long the request is tried before giving up. When request times out, `call.analysis.structuredData` will be empty.\n\nUsage:\n- To guarantee the structured data is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond.\n\n@default 5 seconds",
-            "minimum": 1,
-            "maximum": 60
-          }
-        }
-      },
-      "StructuredDataMultiPlan": {
-        "type": "object",
-        "properties": {
-          "key": {
-            "type": "string",
-            "description": "This is the key of the structured data plan in the catalog."
+            "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false",
+            "example": false,
+            "default": false
           },
-          "plan": {
-            "description": "This is an individual structured data plan in the catalog.",
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/StructuredDataPlan"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
           }
         },
         "required": [
-          "key",
-          "plan"
+          "provider",
+          "voiceId"
         ]
       },
-      "SuccessEvaluationPlan": {
+      "FallbackElevenLabsVoice": {
         "type": "object",
         "properties": {
-          "rubric": {
-            "type": "string",
-            "enum": [
-              "NumericScale",
-              "DescriptiveScale",
-              "Checklist",
-              "Matrix",
-              "PercentageScale",
-              "LikertScale",
-              "AutomaticRubric",
-              "PassFail"
-            ],
-            "description": "This enforces the rubric of the evaluation. The output is stored in `call.analysis.successEvaluation`.\n\nOptions include:\n- 'NumericScale': A scale of 1 to 10.\n- 'DescriptiveScale': A scale of Excellent, Good, Fair, Poor.\n- 'Checklist': A checklist of criteria and their status.\n- 'Matrix': A grid that evaluates multiple criteria across different performance levels.\n- 'PercentageScale': A scale of 0% to 100%.\n- 'LikertScale': A scale of Strongly Agree, Agree, Neutral, Disagree, Strongly Disagree.\n- 'AutomaticRubric': Automatically break down evaluation into several criteria, each with its own score.\n- 'PassFail': A simple 'true' if call passed, 'false' if not.\n\nDefault is 'PassFail'."
-          },
-          "messages": {
-            "description": "These are the messages used to generate the success evaluation.\n\n@default: ```\n[\n  {\n    \"role\": \"system\",\n    \"content\": \"You are an expert call evaluator. You will be given a transcript of a call and the system prompt of the AI participant. Determine if the call was successful based on the objectives inferred from the system prompt. DO NOT return anything except the result.\\n\\nRubric:\\\\n{{rubric}}\\n\\nOnly respond with the result.\"\n  },\n  {\n    \"role\": \"user\",\n    \"content\": \"Here is the transcript:\\n\\n{{transcript}}\\n\\n\"\n  },\n  {\n    \"role\": \"user\",\n    \"content\": \"Here was the system prompt of the call:\\n\\n{{systemPrompt}}\\n\\n\"\n  }\n]```\n\nYou can customize by providing any messages you want.\n\nHere are the template variables available:\n- {{transcript}}: the transcript of the call from `call.artifact.transcript`- {{systemPrompt}}: the system prompt of the call from `assistant.model.messages[type=system].content`- {{rubric}}: the rubric of the success evaluation from `successEvaluationPlan.rubric`",
-            "type": "array",
-            "items": {
-              "type": "object"
-            }
-          },
-          "enabled": {
+          "cachingEnabled": {
             "type": "boolean",
-            "description": "This determines whether a success evaluation is generated and stored in `call.analysis.successEvaluation`. Defaults to true.\n\nUsage:\n- If you want to disable the success evaluation, set this to false.\n\n@default true"
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "timeoutSeconds": {
-            "type": "number",
-            "description": "This is how long the request is tried before giving up. When request times out, `call.analysis.successEvaluation` will be empty.\n\nUsage:\n- To guarantee the success evaluation is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond.\n\n@default 5 seconds",
-            "minimum": 1,
-            "maximum": 60
-          }
-        }
-      },
-      "AnalysisPlan": {
-        "type": "object",
-        "properties": {
-          "summaryPlan": {
-            "description": "This is the plan for generating the summary of the call. This outputs to `call.analysis.summary`.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SummaryPlan"
-              }
+          "provider": {
+            "type": "string",
+            "description": "This is the voice provider that will be used.",
+            "enum": [
+              "11labs"
             ]
           },
-          "structuredDataPlan": {
-            "description": "This is the plan for generating the structured data from the call. This outputs to `call.analysis.structuredData`.",
-            "allOf": [
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/StructuredDataPlan"
+                "type": "string",
+                "enum": [
+                  "burt",
+                  "marissa",
+                  "andrea",
+                  "sarah",
+                  "phillip",
+                  "steve",
+                  "joseph",
+                  "myra",
+                  "paula",
+                  "ryan",
+                  "drew",
+                  "paul",
+                  "mrb",
+                  "matilda",
+                  "mark"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "11Labs Voice ID"
               }
             ]
           },
-          "structuredDataMultiPlan": {
-            "description": "This is an array of structured data plan catalogs. Each entry includes a `key` and a `plan` for generating the structured data from the call. This outputs to `call.analysis.structuredDataMulti`.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/StructuredDataMultiPlan"
-            }
+          "stability": {
+            "type": "number",
+            "description": "Defines the stability for voice settings.",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0.5
           },
-          "successEvaluationPlan": {
-            "description": "This is the plan for generating the success evaluation of the call. This outputs to `call.analysis.successEvaluation`.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SuccessEvaluationPlan"
-              }
-            ]
-          }
-        }
-      },
-      "MessagePlan": {
-        "type": "object",
-        "properties": {
-          "idleMessages": {
-            "description": "This are the messages that the assistant will speak when the user hasn't responded for `idleTimeoutSeconds`. Each time the timeout is triggered, a random message will be chosen from this array.\n\nUsage:\n- If user gets distracted and doesn't respond for a while, this can be used to grab their attention.\n- If the transcriber doesn't pick up what the user said, this can be used to ask the user to repeat themselves. (From the perspective of the assistant, the conversation is idle since it didn't \"hear\" any user messages.)\n\n@default null (no idle message is spoken)",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "maxLength": 1000
-            }
+          "similarityBoost": {
+            "type": "number",
+            "description": "Defines the similarity boost for voice settings.",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0.75
           },
-          "idleMessageMaxSpokenCount": {
+          "style": {
             "type": "number",
-            "description": "This determines the maximum number of times `idleMessages` can be spoken during the call.\n\n@default 3",
-            "minimum": 1,
-            "maximum": 10
+            "description": "Defines the style for voice settings.",
+            "minimum": 0,
+            "maximum": 1,
+            "example": 0
           },
-          "idleMessageResetCountOnUserSpeechEnabled": {
+          "useSpeakerBoost": {
             "type": "boolean",
-            "description": "This determines whether the idle message count is reset whenever the user speaks.\n\n@default false"
+            "description": "Defines the use speaker boost for voice settings.",
+            "example": false
           },
-          "idleTimeoutSeconds": {
+          "speed": {
             "type": "number",
-            "description": "This is the timeout in seconds before a message from `idleMessages` is spoken. The clock starts when the assistant finishes speaking and remains active until the user speaks.\n\n@default 10",
-            "minimum": 5,
-            "maximum": 60
+            "description": "Defines the speed for voice settings.",
+            "minimum": 0.7,
+            "maximum": 1.2,
+            "example": 0.9
           },
-          "silenceTimeoutMessage": {
-            "type": "string",
-            "description": "This is the message that the assistant will say if the call ends due to silence.\n\nIf unspecified, it will hang up without saying anything.",
-            "maxLength": 1000
-          }
-        }
-      },
-      "AssistantCustomEndpointingRule": {
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string",
-            "description": "This endpointing rule is based on the last assistant message before customer started speaking.\n\nFlow:\n- Assistant speaks\n- Customer starts speaking\n- Customer transcription comes in\n- This rule is evaluated on the last assistant message\n- If a match is found based on `regex`, the endpointing timeout is set to `timeoutSeconds`\n\nUsage:\n- If you have yes/no questions in your use case like \"are you interested in a loan?\", you can set a shorter timeout.\n- If you have questions where the customer may pause to look up information like \"what's my account number?\", you can set a longer timeout.",
-            "enum": [
-              "assistant"
-            ]
+          "optimizeStreamingLatency": {
+            "type": "number",
+            "description": "Defines the optimize streaming latency for voice settings. Defaults to 3.",
+            "minimum": 0,
+            "maximum": 4,
+            "example": 3
           },
-          "regex": {
-            "type": "string",
-            "description": "This is the regex pattern to match.\n\nNote:\n- This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test(\"hello there\")` will return `true`.\n\nHot tip:\n- In JavaScript, escape `\\` when sending the regex pattern. Eg. `\"hello\\sthere\"` will be sent over the wire as `\"hellosthere\"`. Send `\"hello\\\\sthere\"` instead.\n- `RegExp.test` does substring matching, so `/cat/.test(\"I love cats\")` will return `true`. To do full string matching, send \"^cat$\"."
+          "enableSsmlParsing": {
+            "type": "boolean",
+            "description": "This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency.\n\n@default false",
+            "example": false
           },
-          "regexOptions": {
-            "description": "These are the options for the regex match. Defaults to all disabled.\n\n@default []",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/RegexOption"
-            }
+          "autoMode": {
+            "type": "boolean",
+            "description": "Defines the auto mode for voice settings. Defaults to false.",
+            "example": false
           },
-          "timeoutSeconds": {
-            "type": "number",
-            "description": "This is the endpointing timeout in seconds, if the rule is matched.",
-            "minimum": 0,
-            "maximum": 15
-          }
-        },
-        "required": [
-          "type",
-          "regex",
-          "timeoutSeconds"
-        ]
-      },
-      "CustomerCustomEndpointingRule": {
-        "type": "object",
-        "properties": {
-          "type": {
+          "model": {
             "type": "string",
-            "description": "This endpointing rule is based on current customer message as they are speaking.\n\nFlow:\n- Assistant speaks\n- Customer starts speaking\n- Customer transcription comes in\n- This rule is evaluated on the current customer transcription\n- If a match is found based on `regex`, the endpointing timeout is set to `timeoutSeconds`\n\nUsage:\n- If you want to wait longer while customer is speaking numbers, you can set a longer timeout.",
+            "description": "This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified.",
             "enum": [
-              "customer"
-            ]
+              "eleven_multilingual_v2",
+              "eleven_turbo_v2",
+              "eleven_turbo_v2_5",
+              "eleven_flash_v2",
+              "eleven_flash_v2_5",
+              "eleven_monolingual_v1"
+            ],
+            "example": "eleven_turbo_v2_5"
           },
-          "regex": {
+          "language": {
             "type": "string",
-            "description": "This is the regex pattern to match.\n\nNote:\n- This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test(\"hello there\")` will return `true`.\n\nHot tip:\n- In JavaScript, escape `\\` when sending the regex pattern. Eg. `\"hello\\sthere\"` will be sent over the wire as `\"hellosthere\"`. Send `\"hello\\\\sthere\"` instead.\n- `RegExp.test` does substring matching, so `/cat/.test(\"I love cats\")` will return `true`. To do full string matching, send \"^cat$\"."
+            "description": "This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports language enforcement. For other models, an error will be returned if language code is provided."
           },
-          "regexOptions": {
-            "description": "These are the options for the regex match. Defaults to all disabled.\n\n@default []",
+          "pronunciationDictionaryLocators": {
+            "description": "This is the pronunciation dictionary locators to use.",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/RegexOption"
+              "$ref": "#/components/schemas/ElevenLabsPronunciationDictionaryLocator"
             }
           },
-          "timeoutSeconds": {
-            "type": "number",
-            "description": "This is the endpointing timeout in seconds, if the rule is matched.",
-            "minimum": 0,
-            "maximum": 15
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
           }
         },
         "required": [
-          "type",
-          "regex",
-          "timeoutSeconds"
+          "provider",
+          "voiceId"
         ]
       },
-      "BothCustomEndpointingRule": {
+      "FallbackHumeVoice": {
         "type": "object",
         "properties": {
-          "type": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
+          "provider": {
             "type": "string",
-            "description": "This endpointing rule is based on both the last assistant message and the current customer message as they are speaking.\n\nFlow:\n- Assistant speaks\n- Customer starts speaking\n- Customer transcription comes in\n- This rule is evaluated on the last assistant message and the current customer transcription\n- If assistant message matches `assistantRegex` AND customer message matches `customerRegex`, the endpointing timeout is set to `timeoutSeconds`\n\nUsage:\n- If you want to wait longer while customer is speaking numbers, you can set a longer timeout.",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "both"
+              "hume"
             ]
           },
-          "assistantRegex": {
+          "model": {
             "type": "string",
-            "description": "This is the regex pattern to match the assistant's message.\n\nNote:\n- This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test(\"hello there\")` will return `true`.\n\nHot tip:\n- In JavaScript, escape `\\` when sending the regex pattern. Eg. `\"hello\\sthere\"` will be sent over the wire as `\"hellosthere\"`. Send `\"hello\\\\sthere\"` instead.\n- `RegExp.test` does substring matching, so `/cat/.test(\"I love cats\")` will return `true`. To do full string matching, send \"^cat$\"."
-          },
-          "assistantRegexOptions": {
-            "description": "These are the options for the assistant's message regex match. Defaults to all disabled.\n\n@default []",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/RegexOption"
-            }
+            "description": "This is the model that will be used.",
+            "enum": [
+              "octave"
+            ],
+            "example": "octave"
           },
-          "customerRegex": {
-            "type": "string"
+          "voiceId": {
+            "type": "string",
+            "description": "The ID of the particular voice you want to use."
           },
-          "customerRegexOptions": {
-            "description": "These are the options for the customer's message regex match. Defaults to all disabled.\n\n@default []",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/RegexOption"
-            }
+          "isCustomHumeVoice": {
+            "type": "boolean",
+            "description": "Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.",
+            "example": false
           },
-          "timeoutSeconds": {
-            "type": "number",
-            "description": "This is the endpointing timeout in seconds, if the rule is matched.",
-            "minimum": 0,
-            "maximum": 15
-          }
-        },
-        "required": [
-          "type",
-          "assistantRegex",
-          "customerRegex",
-          "timeoutSeconds"
-        ]
-      },
-      "VapiSmartEndpointingPlan": {
-        "type": "object",
-        "properties": {
-          "provider": {
+          "description": {
             "type": "string",
-            "description": "This is the provider for the smart endpointing plan.",
-            "enum": [
-              "vapi",
-              "livekit"
-            ],
-            "example": "vapi"
+            "description": "Natural language instructions describing how the synthesized speech should sound, including but not limited to tone, intonation, pacing, and accent (e.g., 'a soft, gentle voice with a strong British accent').\n\nIf a Voice is specified in the request, this description serves as acting instructions.\nIf no Voice is specified, a new voice is generated based on this description."
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
           }
         },
         "required": [
-          "provider"
+          "provider",
+          "voiceId"
         ]
       },
-      "LivekitSmartEndpointingPlan": {
+      "FallbackLMNTVoice": {
         "type": "object",
         "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
           "provider": {
             "type": "string",
-            "description": "This is the provider for the smart endpointing plan.",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "vapi",
-              "livekit"
-            ],
-            "example": "livekit"
+              "lmnt"
+            ]
           },
-          "waitFunction": {
-            "type": "string",
-            "description": "This expression describes how long the bot will wait to start speaking based on the likelihood that the user has reached an endpoint.\n\nThis is a millisecond valued function. It maps probabilities (real numbers on [0,1]) to milliseconds that the bot should wait before speaking ([0, \\infty]). Any negative values that are returned are set to zero (the bot can't start talking in the past).\n\nA probability of zero represents very high confidence that the caller has stopped speaking, and would like the bot to speak to them. A probability of one represents very high confidence that the caller is still speaking.\n\nUnder the hood, this is parsed into a mathjs expression. Whatever you use to write your expression needs to be valid with respect to mathjs\n\n@default \"70 + 4000 * x\"",
-            "examples": [
-              "70 + 4000 * x",
-              "200 + 8000 * x",
-              "4000 * (1 - cos(pi * x))"
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "amy",
+                  "ansel",
+                  "autumn",
+                  "ava",
+                  "brandon",
+                  "caleb",
+                  "cassian",
+                  "chloe",
+                  "dalton",
+                  "daniel",
+                  "dustin",
+                  "elowen",
+                  "evander",
+                  "huxley",
+                  "james",
+                  "juniper",
+                  "kennedy",
+                  "lauren",
+                  "leah",
+                  "lily",
+                  "lucas",
+                  "magnus",
+                  "miles",
+                  "morgan",
+                  "natalie",
+                  "nathan",
+                  "noah",
+                  "nyssa",
+                  "oliver",
+                  "paige",
+                  "ryan",
+                  "sadie",
+                  "sophie",
+                  "stella",
+                  "terrence",
+                  "tyler",
+                  "vesper",
+                  "violet",
+                  "warrick",
+                  "zain",
+                  "zeke",
+                  "zoe"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "LMNT Voice ID"
+              }
             ]
-          }
-        },
-        "required": [
-          "provider"
-        ]
-      },
-      "TranscriptionEndpointingPlan": {
-        "type": "object",
-        "properties": {
-          "onPunctuationSeconds": {
-            "type": "number",
-            "description": "The minimum number of seconds to wait after transcription ending with punctuation before sending a request to the model. Defaults to 0.1.\n\nThis setting exists because the transcriber punctuates the transcription when it's more confident that customer has completed a thought.\n\n@default 0.1",
-            "minimum": 0,
-            "maximum": 3,
-            "example": 0.1
           },
-          "onNoPunctuationSeconds": {
+          "speed": {
             "type": "number",
-            "description": "The minimum number of seconds to wait after transcription ending without punctuation before sending a request to the model. Defaults to 1.5.\n\nThis setting exists to catch the cases where the transcriber was not confident enough to punctuate the transcription, but the customer is done and has been silent for a long time.\n\n@default 1.5",
-            "minimum": 0,
-            "maximum": 3,
-            "example": 1.5
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.25,
+            "maximum": 2,
+            "example": null
           },
-          "onNumberSeconds": {
-            "type": "number",
-            "description": "The minimum number of seconds to wait after transcription ending with a number before sending a request to the model. Defaults to 0.4.\n\nThis setting exists because the transcriber will sometimes punctuate the transcription ending with a number, even though the customer hasn't uttered the full number. This happens commonly for long numbers when the customer reads the number in chunks.\n\n@default 0.5",
-            "minimum": 0,
-            "maximum": 3,
-            "example": 0.5
-          }
-        }
-      },
-      "StartSpeakingPlan": {
-        "type": "object",
-        "properties": {
-          "waitSeconds": {
-            "type": "number",
-            "description": "This is how long assistant waits before speaking. Defaults to 0.4.\n\nThis is the minimum it will wait but if there is latency is the pipeline, this minimum will be exceeded. This is intended as a stopgap in case the pipeline is moving too fast.\n\nExample:\n- If model generates tokens and voice generates bytes within 100ms, the pipeline still waits 300ms before outputting speech.\n\nUsage:\n- If the customer is taking long pauses, set this to a higher value.\n- If the assistant is accidentally jumping in too much, set this to a higher value.\n\n@default 0.4",
-            "minimum": 0,
-            "maximum": 5,
-            "example": 0.4
-          },
-          "smartEndpointingEnabled": {
-            "type": "object",
-            "example": false,
-            "deprecated": true
-          },
-          "smartEndpointingPlan": {
-            "description": "This is the plan for smart endpointing. Pick between Vapi smart endpointing or LiveKit smart endpointing (or nothing). We strongly recommend using livekit endpointing when working in English. LiveKit endpointing is not supported in other languages, yet.\n\nIf this is set, it will override and take precedence over `transcriptionEndpointingPlan`.\nThis plan will still be overridden by any matching `customEndpointingRules`.",
+          "language": {
+            "description": "Two letter ISO 639-1 language code. Use \"auto\" for auto-detection.",
+            "enum": [
+              "aa",
+              "ab",
+              "ae",
+              "af",
+              "ak",
+              "am",
+              "an",
+              "ar",
+              "as",
+              "av",
+              "ay",
+              "az",
+              "ba",
+              "be",
+              "bg",
+              "bh",
+              "bi",
+              "bm",
+              "bn",
+              "bo",
+              "br",
+              "bs",
+              "ca",
+              "ce",
+              "ch",
+              "co",
+              "cr",
+              "cs",
+              "cu",
+              "cv",
+              "cy",
+              "da",
+              "de",
+              "dv",
+              "dz",
+              "ee",
+              "el",
+              "en",
+              "eo",
+              "es",
+              "et",
+              "eu",
+              "fa",
+              "ff",
+              "fi",
+              "fj",
+              "fo",
+              "fr",
+              "fy",
+              "ga",
+              "gd",
+              "gl",
+              "gn",
+              "gu",
+              "gv",
+              "ha",
+              "he",
+              "hi",
+              "ho",
+              "hr",
+              "ht",
+              "hu",
+              "hy",
+              "hz",
+              "ia",
+              "id",
+              "ie",
+              "ig",
+              "ii",
+              "ik",
+              "io",
+              "is",
+              "it",
+              "iu",
+              "ja",
+              "jv",
+              "ka",
+              "kg",
+              "ki",
+              "kj",
+              "kk",
+              "kl",
+              "km",
+              "kn",
+              "ko",
+              "kr",
+              "ks",
+              "ku",
+              "kv",
+              "kw",
+              "ky",
+              "la",
+              "lb",
+              "lg",
+              "li",
+              "ln",
+              "lo",
+              "lt",
+              "lu",
+              "lv",
+              "mg",
+              "mh",
+              "mi",
+              "mk",
+              "ml",
+              "mn",
+              "mr",
+              "ms",
+              "mt",
+              "my",
+              "na",
+              "nb",
+              "nd",
+              "ne",
+              "ng",
+              "nl",
+              "nn",
+              "no",
+              "nr",
+              "nv",
+              "ny",
+              "oc",
+              "oj",
+              "om",
+              "or",
+              "os",
+              "pa",
+              "pi",
+              "pl",
+              "ps",
+              "pt",
+              "qu",
+              "rm",
+              "rn",
+              "ro",
+              "ru",
+              "rw",
+              "sa",
+              "sc",
+              "sd",
+              "se",
+              "sg",
+              "si",
+              "sk",
+              "sl",
+              "sm",
+              "sn",
+              "so",
+              "sq",
+              "sr",
+              "ss",
+              "st",
+              "su",
+              "sv",
+              "sw",
+              "ta",
+              "te",
+              "tg",
+              "th",
+              "ti",
+              "tk",
+              "tl",
+              "tn",
+              "to",
+              "tr",
+              "ts",
+              "tt",
+              "tw",
+              "ty",
+              "ug",
+              "uk",
+              "ur",
+              "uz",
+              "ve",
+              "vi",
+              "vo",
+              "wa",
+              "wo",
+              "xh",
+              "yi",
+              "yue",
+              "yo",
+              "za",
+              "zh",
+              "zu",
+              "auto"
+            ],
+            "example": "en",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/VapiSmartEndpointingPlan",
-                "title": "Vapi"
+                "type": "string",
+                "enum": [
+                  "aa",
+                  "ab",
+                  "ae",
+                  "af",
+                  "ak",
+                  "am",
+                  "an",
+                  "ar",
+                  "as",
+                  "av",
+                  "ay",
+                  "az",
+                  "ba",
+                  "be",
+                  "bg",
+                  "bh",
+                  "bi",
+                  "bm",
+                  "bn",
+                  "bo",
+                  "br",
+                  "bs",
+                  "ca",
+                  "ce",
+                  "ch",
+                  "co",
+                  "cr",
+                  "cs",
+                  "cu",
+                  "cv",
+                  "cy",
+                  "da",
+                  "de",
+                  "dv",
+                  "dz",
+                  "ee",
+                  "el",
+                  "en",
+                  "eo",
+                  "es",
+                  "et",
+                  "eu",
+                  "fa",
+                  "ff",
+                  "fi",
+                  "fj",
+                  "fo",
+                  "fr",
+                  "fy",
+                  "ga",
+                  "gd",
+                  "gl",
+                  "gn",
+                  "gu",
+                  "gv",
+                  "ha",
+                  "he",
+                  "hi",
+                  "ho",
+                  "hr",
+                  "ht",
+                  "hu",
+                  "hy",
+                  "hz",
+                  "ia",
+                  "id",
+                  "ie",
+                  "ig",
+                  "ii",
+                  "ik",
+                  "io",
+                  "is",
+                  "it",
+                  "iu",
+                  "ja",
+                  "jv",
+                  "ka",
+                  "kg",
+                  "ki",
+                  "kj",
+                  "kk",
+                  "kl",
+                  "km",
+                  "kn",
+                  "ko",
+                  "kr",
+                  "ks",
+                  "ku",
+                  "kv",
+                  "kw",
+                  "ky",
+                  "la",
+                  "lb",
+                  "lg",
+                  "li",
+                  "ln",
+                  "lo",
+                  "lt",
+                  "lu",
+                  "lv",
+                  "mg",
+                  "mh",
+                  "mi",
+                  "mk",
+                  "ml",
+                  "mn",
+                  "mr",
+                  "ms",
+                  "mt",
+                  "my",
+                  "na",
+                  "nb",
+                  "nd",
+                  "ne",
+                  "ng",
+                  "nl",
+                  "nn",
+                  "no",
+                  "nr",
+                  "nv",
+                  "ny",
+                  "oc",
+                  "oj",
+                  "om",
+                  "or",
+                  "os",
+                  "pa",
+                  "pi",
+                  "pl",
+                  "ps",
+                  "pt",
+                  "qu",
+                  "rm",
+                  "rn",
+                  "ro",
+                  "ru",
+                  "rw",
+                  "sa",
+                  "sc",
+                  "sd",
+                  "se",
+                  "sg",
+                  "si",
+                  "sk",
+                  "sl",
+                  "sm",
+                  "sn",
+                  "so",
+                  "sq",
+                  "sr",
+                  "ss",
+                  "st",
+                  "su",
+                  "sv",
+                  "sw",
+                  "ta",
+                  "te",
+                  "tg",
+                  "th",
+                  "ti",
+                  "tk",
+                  "tl",
+                  "tn",
+                  "to",
+                  "tr",
+                  "ts",
+                  "tt",
+                  "tw",
+                  "ty",
+                  "ug",
+                  "uk",
+                  "ur",
+                  "uz",
+                  "ve",
+                  "vi",
+                  "vo",
+                  "wa",
+                  "wo",
+                  "xh",
+                  "yi",
+                  "yue",
+                  "yo",
+                  "za",
+                  "zh",
+                  "zu"
+                ],
+                "title": "ISO 639-1 Language Code"
               },
               {
-                "$ref": "#/components/schemas/LivekitSmartEndpointingPlan",
-                "title": "Livekit"
+                "type": "string",
+                "enum": [
+                  "auto"
+                ],
+                "title": "Auto-detect"
               }
             ]
           },
-          "customEndpointingRules": {
-            "type": "array",
-            "description": "These are the custom endpointing rules to set an endpointing timeout based on a regex on the customer's speech or the assistant's last message.\n\nUsage:\n- If you have yes/no questions like \"are you interested in a loan?\", you can set a shorter timeout.\n- If you have questions where the customer may pause to look up information like \"what's my account number?\", you can set a longer timeout.\n- If you want to wait longer while customer is enumerating a list of numbers, you can set a longer timeout.\n\nThese rules have the highest precedence and will override both `smartEndpointingPlan` and `transcriptionEndpointingPlan` when a rule is matched.\n\nThe rules are evaluated in order and the first one that matches will be used.\n\nOrder of precedence for endpointing:\n1. customEndpointingRules (if any match)\n2. smartEndpointingPlan (if set)\n3. transcriptionEndpointingPlan\n\n@default []",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/AssistantCustomEndpointingRule",
-                  "title": "Assistant"
-                },
-                {
-                  "$ref": "#/components/schemas/CustomerCustomEndpointingRule",
-                  "title": "Customer"
-                },
-                {
-                  "$ref": "#/components/schemas/BothCustomEndpointingRule",
-                  "title": "Both"
-                }
-              ]
-            }
-          },
-          "transcriptionEndpointingPlan": {
-            "description": "This determines how a customer speech is considered done (endpointing) using the transcription of customer's speech.\n\nOnce an endpoint is triggered, the request is sent to `assistant.model`.\n\nNote: This plan is only used if `smartEndpointingPlan` is not set. If both are provided, `smartEndpointingPlan` takes precedence.\nThis plan will also be overridden by any matching `customEndpointingRules`.",
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TranscriptionEndpointingPlan"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
           }
-        }
-      },
-      "StopSpeakingPlan": {
-        "type": "object",
-        "properties": {
-          "numWords": {
-            "type": "number",
-            "description": "This is the number of words that the customer has to say before the assistant will stop talking.\n\nWords like \"stop\", \"actually\", \"no\", etc. will always interrupt immediately regardless of this value.\n\nWords like \"okay\", \"yeah\", \"right\" will never interrupt.\n\nWhen set to 0, `voiceSeconds` is used in addition to the transcriptions to determine the customer has started speaking.\n\nDefaults to 0.\n\n@default 0",
-            "minimum": 0,
-            "maximum": 10,
-            "example": 0
-          },
-          "voiceSeconds": {
-            "type": "number",
-            "description": "This is the seconds customer has to speak before the assistant stops talking. This uses the VAD (Voice Activity Detection) spike to determine if the customer has started speaking.\n\nConsiderations:\n- A lower value might be more responsive but could potentially pick up non-speech sounds.\n- A higher value reduces false positives but might slightly delay the detection of speech onset.\n\nThis is only used if `numWords` is set to 0.\n\nDefaults to 0.2\n\n@default 0.2",
-            "minimum": 0,
-            "maximum": 0.5,
-            "example": 0.2
-          },
-          "backoffSeconds": {
-            "type": "number",
-            "description": "This is the seconds to wait before the assistant will start talking again after being interrupted.\n\nDefaults to 1.\n\n@default 1",
-            "minimum": 0,
-            "maximum": 10,
-            "example": 1
-          },
-          "acknowledgementPhrases": {
-            "description": "These are the phrases that will never interrupt the assistant, even if numWords threshold is met.\nThese are typically acknowledgement or backchanneling phrases.",
-            "example": [
-              "i understand",
-              "i see",
-              "i got it",
-              "i hear you",
-              "im listening",
-              "im with you",
-              "right",
-              "okay",
-              "ok",
-              "sure",
-              "alright",
-              "got it",
-              "understood",
-              "yeah",
-              "yes",
-              "uh-huh",
-              "mm-hmm",
-              "gotcha",
-              "mhmm",
-              "ah",
-              "yeah okay",
-              "yeah sure"
-            ],
-            "default": [
-              "i understand",
-              "i see",
-              "i got it",
-              "i hear you",
-              "im listening",
-              "im with you",
-              "right",
-              "okay",
-              "ok",
-              "sure",
-              "alright",
-              "got it",
-              "understood",
-              "yeah",
-              "yes",
-              "uh-huh",
-              "mm-hmm",
-              "gotcha",
-              "mhmm",
-              "ah",
-              "yeah okay",
-              "yeah sure"
-            ],
-            "type": "array",
-            "items": {
-              "type": "string",
-              "maxLength": 240
-            }
-          },
-          "interruptionPhrases": {
-            "description": "These are the phrases that will always interrupt the assistant immediately, regardless of numWords.\nThese are typically phrases indicating disagreement or desire to stop.",
-            "example": [
-              "stop",
-              "shut",
-              "up",
-              "enough",
-              "quiet",
-              "silence",
-              "but",
-              "dont",
-              "not",
-              "no",
-              "hold",
-              "wait",
-              "cut",
-              "pause",
-              "nope",
-              "nah",
-              "nevermind",
-              "never",
-              "bad",
-              "actually"
-            ],
-            "default": [
-              "stop",
-              "shut",
-              "up",
-              "enough",
-              "quiet",
-              "silence",
-              "but",
-              "dont",
-              "not",
-              "no",
-              "hold",
-              "wait",
-              "cut",
-              "pause",
-              "nope",
-              "nah",
-              "nevermind",
-              "never",
-              "bad",
-              "actually"
-            ],
-            "type": "array",
-            "items": {
-              "type": "string",
-              "maxLength": 240
-            }
-          }
-        }
+        },
+        "required": [
+          "provider",
+          "voiceId"
+        ]
       },
-      "MonitorPlan": {
+      "FallbackNeuphonicVoice": {
         "type": "object",
         "properties": {
-          "listenEnabled": {
+          "cachingEnabled": {
             "type": "boolean",
-            "description": "This determines whether the assistant's calls allow live listening. Defaults to true.\n\nFetch `call.monitor.listenUrl` to get the live listening URL.\n\n@default true",
-            "example": false
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "controlEnabled": {
-            "type": "boolean",
-            "description": "This determines whether the assistant's calls allow live control. Defaults to true.\n\nFetch `call.monitor.controlUrl` to get the live control URL.\n\nTo use, send any control message via a POST request to `call.monitor.controlUrl`. Here are the types of controls supported: https://docs.vapi.ai/api-reference/messages/client-inbound-message\n\n@default true",
-            "example": false
-          }
-        }
-      },
-      "AssistantHookFilter": {
-        "type": "object",
-        "properties": {
-          "type": {
+          "provider": {
             "type": "string",
-            "description": "This is the type of filter - currently only \"oneOf\" is supported",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "oneOf"
-            ],
-            "maxLength": 1000
+              "neuphonic"
+            ]
           },
-          "key": {
-            "type": "string",
-            "description": "This is the key to filter on (e.g. \"call.endedReason\")",
-            "maxLength": 1000
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "Neuphonic Voice ID"
+              }
+            ]
           },
-          "oneOf": {
-            "description": "This is the array of possible values to match against",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "maxLength": 1000
-            }
-          }
-        },
-        "required": [
-          "type",
-          "key",
-          "oneOf"
-        ]
-      },
-      "AssistantHookActionBase": {
-        "type": "object",
-        "properties": {}
-      },
-      "AssistantHooks": {
-        "type": "object",
-        "properties": {
-          "on": {
+          "model": {
             "type": "string",
-            "description": "This is the event that triggers this hook",
+            "description": "This is the model that will be used. Defaults to 'neu_fast' if not specified.",
             "enum": [
-              "call.ending"
+              "neu_hq",
+              "neu_fast"
             ],
-            "maxLength": 1000
+            "example": "neu_fast"
           },
-          "filters": {
-            "description": "This is the set of filters that must match for the hook to trigger",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/AssistantHookFilter"
-            }
+          "language": {
+            "type": "object",
+            "description": "This is the language (ISO 639-1) that is enforced for the model.",
+            "example": "en"
           },
-          "do": {
-            "description": "This is the set of actions to perform when the hook triggers",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/AssistantHookActionBase"
-            }
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.25,
+            "maximum": 2,
+            "example": null
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
           }
         },
         "required": [
-          "on",
-          "do"
+          "provider",
+          "voiceId",
+          "language"
         ]
       },
-      "KeypadInputPlan": {
+      "FallbackOpenAIVoice": {
         "type": "object",
         "properties": {
-          "enabled": {
+          "cachingEnabled": {
             "type": "boolean",
-            "description": "This keeps track of whether the user has enabled keypad input.\nBy default, it is off.\n\n@default false"
-          },
-          "timeoutSeconds": {
-            "type": "number",
-            "description": "This is the time in seconds to wait before processing the input.\nIf the input is not received within this time, the input will be ignored.\nIf set to \"off\", the input will be processed when the user enters a delimiter or immediately if no delimiter is used.\n\n@default 2",
-            "minimum": 0,
-            "maximum": 10
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "delimiters": {
+          "provider": {
             "type": "string",
-            "description": "This is the delimiter(s) that will be used to process the input.\nCan be '#', '*', or an empty array.",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "#",
-              "*",
-              ""
+              "openai"
             ]
-          }
-        }
-      },
-      "CreateAssistantDTO": {
-        "type": "object",
-        "properties": {
-          "transcriber": {
-            "description": "These are the options for the assistant's transcriber.",
+          },
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.\nPlease note that ash, ballad, coral, sage, and verse may only be used with realtime models.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/AssemblyAITranscriber",
-                "title": "AssemblyAI"
-              },
-              {
-                "$ref": "#/components/schemas/AzureSpeechTranscriber",
-                "title": "Azure"
-              },
-              {
-                "$ref": "#/components/schemas/CustomTranscriber",
-                "title": "CustomTranscriber"
-              },
-              {
-                "$ref": "#/components/schemas/DeepgramTranscriber",
-                "title": "Deepgram"
-              },
-              {
-                "$ref": "#/components/schemas/ElevenLabsTranscriber",
-                "title": "ElevenLabs"
-              },
-              {
-                "$ref": "#/components/schemas/GladiaTranscriber",
-                "title": "Gladia"
-              },
-              {
-                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
-                "title": "Speechmatics"
-              },
-              {
-                "$ref": "#/components/schemas/TalkscriberTranscriber",
-                "title": "Talkscriber"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleTranscriber",
-                "title": "Google"
+                "type": "string",
+                "enum": [
+                  "alloy",
+                  "echo",
+                  "fable",
+                  "onyx",
+                  "nova",
+                  "shimmer"
+                ],
+                "title": "Preset Voice Options"
               },
               {
-                "$ref": "#/components/schemas/OpenAITranscriber",
-                "title": "OpenAI"
+                "type": "string",
+                "title": "OpenAI Voice ID"
               }
             ]
           },
           "model": {
-            "description": "These are the options for the assistant's LLM.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/AnyscaleModel",
-                "title": "Anyscale"
-              },
-              {
-                "$ref": "#/components/schemas/AnthropicModel",
-                "title": "Anthropic"
-              },
-              {
-                "$ref": "#/components/schemas/CerebrasModel",
-                "title": "Cerebras"
-              },
-              {
-                "$ref": "#/components/schemas/CustomLLMModel",
-                "title": "CustomLLM"
-              },
-              {
-                "$ref": "#/components/schemas/DeepInfraModel",
-                "title": "DeepInfra"
-              },
-              {
-                "$ref": "#/components/schemas/DeepSeekModel",
-                "title": "DeepSeek"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleModel",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/GroqModel",
-                "title": "Groq"
-              },
-              {
-                "$ref": "#/components/schemas/InflectionAIModel",
-                "title": "InflectionAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIModel",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenRouterModel",
-                "title": "OpenRouter"
-              },
-              {
-                "$ref": "#/components/schemas/PerplexityAIModel",
-                "title": "PerplexityAI"
-              },
-              {
-                "$ref": "#/components/schemas/TogetherAIModel",
-                "title": "Together"
-              },
-              {
-                "$ref": "#/components/schemas/VapiModel",
-                "title": "Vapi"
-              },
-              {
-                "$ref": "#/components/schemas/XaiModel",
-                "title": "XAI"
-              }
+            "type": "string",
+            "description": "This is the model that will be used for text-to-speech.",
+            "enum": [
+              "tts-1",
+              "tts-1-hd",
+              "gpt-4o-mini-tts"
             ]
           },
-          "voice": {
-            "description": "These are the options for the assistant's voice.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/AzureVoice",
-                "title": "Azure"
-              },
-              {
-                "$ref": "#/components/schemas/CartesiaVoice",
-                "title": "Cartesia"
-              },
-              {
-                "$ref": "#/components/schemas/CustomVoice",
-                "title": "CustomVoice"
-              },
-              {
-                "$ref": "#/components/schemas/DeepgramVoice",
-                "title": "Deepgram"
-              },
-              {
-                "$ref": "#/components/schemas/ElevenLabsVoice",
-                "title": "ElevenLabs"
-              },
-              {
-                "$ref": "#/components/schemas/HumeVoice",
-                "title": "Hume"
-              },
-              {
-                "$ref": "#/components/schemas/LMNTVoice",
-                "title": "LMNT"
-              },
-              {
-                "$ref": "#/components/schemas/NeuphonicVoice",
-                "title": "Neuphonic"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIVoice",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/PlayHTVoice",
-                "title": "PlayHT"
-              },
-              {
-                "$ref": "#/components/schemas/RimeAIVoice",
-                "title": "RimeAI"
-              },
-              {
-                "$ref": "#/components/schemas/SmallestAIVoice",
-                "title": "SmallestAI"
-              },
-              {
-                "$ref": "#/components/schemas/TavusVoice",
-                "title": "TavusVoice"
-              },
-              {
-                "$ref": "#/components/schemas/VapiVoice",
-                "title": "Vapi"
-              }
-            ],
-            "default": {
-              "provider": "playht",
-              "voiceId": "jennifer"
-            }
-          },
-          "firstMessage": {
+          "instructions": {
             "type": "string",
-            "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.",
-            "example": "Hello! How can I help you today?"
+            "description": "This is a prompt that allows you to control the voice of your generated audio.\nDoes not work with 'tts-1' or 'tts-1-hd' models.",
+            "maxLength": 10000
           },
-          "firstMessageInterruptionsEnabled": {
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.25,
+            "maximum": 4,
+            "example": null
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChunkPlan"
+              }
+            ]
+          }
+        },
+        "required": [
+          "provider",
+          "voiceId"
+        ]
+      },
+      "FallbackPlayHTVoice": {
+        "type": "object",
+        "properties": {
+          "cachingEnabled": {
             "type": "boolean",
-            "default": false
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "firstMessageMode": {
+          "provider": {
             "type": "string",
-            "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "assistant-speaks-first",
-              "assistant-speaks-first-with-model-generated-message",
-              "assistant-waits-for-user"
-            ],
-            "example": "assistant-speaks-first"
+              "playht"
+            ]
           },
-          "voicemailDetection": {
-            "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.",
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan",
-                "title": "OpenAI"
+                "type": "string",
+                "enum": [
+                  "jennifer",
+                  "melissa",
+                  "will",
+                  "chris",
+                  "matt",
+                  "jack",
+                  "ruby",
+                  "davis",
+                  "donna",
+                  "michael"
+                ],
+                "title": "Preset Voice Options"
               },
               {
-                "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan",
-                "title": "Twilio"
+                "type": "string",
+                "title": "PlayHT Voice ID"
               }
             ]
           },
-          "clientMessages": {
-            "type": "array",
-            "enum": [
-              "conversation-update",
-              "function-call",
-              "function-call-result",
-              "hang",
-              "language-changed",
-              "metadata",
-              "model-output",
-              "speech-update",
-              "status-update",
-              "transcript",
-              "tool-calls",
-              "tool-calls-result",
-              "transfer-update",
-              "user-interrupted",
-              "voice-input",
-              "workflow.node.started"
-            ],
-            "example": [
-              "conversation-update",
-              "function-call",
-              "hang",
-              "model-output",
-              "speech-update",
-              "status-update",
-              "transfer-update",
-              "transcript",
-              "tool-calls",
-              "user-interrupted",
-              "voice-input",
-              "workflow.node.started"
-            ],
-            "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.",
-            "items": {
-              "type": "string",
-              "enum": [
-                "conversation-update",
-                "function-call",
-                "function-call-result",
-                "hang",
-                "language-changed",
-                "metadata",
-                "model-output",
-                "speech-update",
-                "status-update",
-                "transcript",
-                "tool-calls",
-                "tool-calls-result",
-                "transfer-update",
-                "user-interrupted",
-                "voice-input",
-                "workflow.node.started"
-              ]
-            }
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.1,
+            "maximum": 5,
+            "example": null
           },
-          "serverMessages": {
-            "type": "array",
+          "temperature": {
+            "type": "number",
+            "description": "A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model's default temperature will be used. The temperature parameter controls variance. Lower temperatures result in more predictable results, higher temperatures allow each run to vary more, so the voice may sound less like the baseline voice.",
+            "minimum": 0.1,
+            "maximum": 2,
+            "example": null
+          },
+          "emotion": {
+            "type": "string",
+            "description": "An emotion to be applied to the speech.",
             "enum": [
-              "conversation-update",
-              "end-of-call-report",
-              "function-call",
-              "hang",
-              "language-changed",
-              "language-change-detected",
-              "model-output",
-              "phone-call-control",
-              "speech-update",
-              "status-update",
-              "transcript",
-              "transcript[transcriptType=\"final\"]",
-              "tool-calls",
-              "transfer-destination-request",
-              "transfer-update",
-              "user-interrupted",
-              "voice-input"
-            ],
-            "example": [
-              "conversation-update",
-              "end-of-call-report",
-              "function-call",
-              "hang",
-              "speech-update",
-              "status-update",
-              "tool-calls",
-              "transfer-destination-request",
-              "user-interrupted"
+              "female_happy",
+              "female_sad",
+              "female_angry",
+              "female_fearful",
+              "female_disgust",
+              "female_surprised",
+              "male_happy",
+              "male_sad",
+              "male_angry",
+              "male_fearful",
+              "male_disgust",
+              "male_surprised"
             ],
-            "description": "These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema.",
-            "items": {
-              "type": "string",
-              "enum": [
-                "conversation-update",
-                "end-of-call-report",
-                "function-call",
-                "hang",
-                "language-changed",
-                "language-change-detected",
-                "model-output",
-                "phone-call-control",
-                "speech-update",
-                "status-update",
-                "transcript",
-                "transcript[transcriptType=\"final\"]",
-                "tool-calls",
-                "transfer-destination-request",
-                "transfer-update",
-                "user-interrupted",
-                "voice-input"
-              ]
-            }
+            "example": null
           },
-          "silenceTimeoutSeconds": {
+          "voiceGuidance": {
             "type": "number",
-            "description": "How many seconds of silence to wait before ending the call. Defaults to 30.\n\n@default 30",
-            "minimum": 10,
-            "maximum": 3600,
-            "example": 30
+            "description": "A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared to other voices.",
+            "minimum": 1,
+            "maximum": 6,
+            "example": null
           },
-          "maxDurationSeconds": {
+          "styleGuidance": {
             "type": "number",
-            "description": "This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended.\n\n@default 600 (10 minutes)",
-            "minimum": 10,
-            "maximum": 43200,
-            "example": 600
-          },
-          "backgroundSound": {
-            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
-            "maxLength": 1000,
-            "oneOf": [
-              {
-                "type": "enum",
-                "enum": [
-                  "off",
-                  "office"
-                ],
-                "example": "office"
-              },
-              {
-                "type": "string",
-                "format": "uri",
-                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
-              }
-            ]
+            "description": "A number between 1 and 30. Use lower numbers to to reduce how strong your chosen emotion will be. Higher numbers will create a very emotional performance.",
+            "minimum": 1,
+            "maximum": 30,
+            "example": null
           },
-          "backgroundDenoisingEnabled": {
-            "type": "boolean",
-            "description": "This enables filtering of noise and background speech while the user is talking.\n\nDefault `false` while in beta.\n\n@default false",
-            "example": false
+          "textGuidance": {
+            "type": "number",
+            "description": "A number between 1 and 2. This number influences how closely the generated speech adheres to the input text. Use lower values to create more fluid speech, but with a higher chance of deviating from the input text. Higher numbers will make the generated speech more accurate to the input text, ensuring that the words spoken align closely with the provided text.",
+            "minimum": 1,
+            "maximum": 2,
+            "example": null
           },
-          "modelOutputInMessagesEnabled": {
-            "type": "boolean",
-            "description": "This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech.\n\nDefault `false` while in beta.\n\n@default false",
-            "example": false
+          "model": {
+            "type": "string",
+            "description": "Playht voice model/engine to use.",
+            "enum": [
+              "PlayHT2.0",
+              "PlayHT2.0-turbo",
+              "Play3.0-mini",
+              "PlayDialog"
+            ]
           },
-          "transportConfigurations": {
-            "type": "array",
-            "description": "These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TransportConfigurationTwilio",
-                  "title": "Twilio"
-                }
-              ]
-            }
+          "language": {
+            "type": "string",
+            "description": "The language to use for the speech.",
+            "enum": [
+              "afrikaans",
+              "albanian",
+              "amharic",
+              "arabic",
+              "bengali",
+              "bulgarian",
+              "catalan",
+              "croatian",
+              "czech",
+              "danish",
+              "dutch",
+              "english",
+              "french",
+              "galician",
+              "german",
+              "greek",
+              "hebrew",
+              "hindi",
+              "hungarian",
+              "indonesian",
+              "italian",
+              "japanese",
+              "korean",
+              "malay",
+              "mandarin",
+              "polish",
+              "portuguese",
+              "russian",
+              "serbian",
+              "spanish",
+              "swedish",
+              "tagalog",
+              "thai",
+              "turkish",
+              "ukrainian",
+              "urdu",
+              "xhosa"
+            ]
           },
-          "observabilityPlan": {
-            "description": "This is the plan for observability configuration of assistant's calls.\nCurrently supports Langfuse for tracing and monitoring.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
-                "title": "Langfuse"
-              }
-            ],
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
+          }
+        },
+        "required": [
+          "provider",
+          "voiceId"
+        ]
+      },
+      "FallbackRimeAIVoice": {
+        "type": "object",
+        "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "credentials": {
-            "type": "array",
-            "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
-                  "title": "AnthropicCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
-                  "title": "AnyscaleCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
-                  "title": "AssemblyAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
-                  "title": "AzureCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
-                  "title": "AzureOpenAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
-                  "title": "ByoSipTrunkCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
-                  "title": "CartesiaCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
-                  "title": "CerebrasCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
-                  "title": "CloudflareCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
-                  "title": "CustomLLMCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
-                  "title": "DeepgramCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
-                  "title": "DeepInfraCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
-                  "title": "DeepSeekCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
-                  "title": "ElevenLabsCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
-                  "title": "GcpCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
-                  "title": "GladiaCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
-                  "title": "GhlCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
-                  "title": "GoogleCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
-                  "title": "GroqCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
-                  "title": "HumeCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
-                  "title": "InflectionAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
-                  "title": "LangfuseCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
-                  "title": "LmntCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
-                  "title": "MakeCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
-                  "title": "MistralCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
-                  "title": "NeuphonicCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
-                  "title": "OpenAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
-                  "title": "OpenRouterCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
-                  "title": "PerplexityAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
-                  "title": "PlayHTCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
-                  "title": "RimeAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
-                  "title": "RunpodCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
-                  "title": "S3Credential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
-                  "title": "SmallestAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
-                  "title": "SpeechmaticsCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
-                  "title": "SupabaseCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
-                  "title": "TavusCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
-                  "title": "TogetherAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
-                  "title": "TrieveCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
-                  "title": "TwilioCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
-                  "title": "VonageCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
-                  "title": "WebhookCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
-                  "title": "XAiCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
-                  "title": "GoogleCalendarOAuth2ClientCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
-                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
-                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
-                  "title": "SlackOAuth2AuthorizationCredential"
-                }
-              ],
-              "discriminator": {
-                "propertyName": "provider",
-                "mapping": {
-                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
-                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
-                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
-                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
-                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
-                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
-                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
-                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
-                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
-                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
-                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
-                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
-                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
-                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
-                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
-                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
-                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
-                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
-                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
-                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
-                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
-                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
-                  "make": "#/components/schemas/CreateMakeCredentialDTO",
-                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
-                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
-                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
-                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
-                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
-                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
-                  "s3": "#/components/schemas/CreateS3CredentialDTO",
-                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
-                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
-                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
-                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
-                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
-                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
-                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
-                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
-                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
-                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
-                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
-                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
-                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
-                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
-                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
-                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
-                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO"
-                }
+          "provider": {
+            "type": "string",
+            "description": "This is the voice provider that will be used.",
+            "enum": [
+              "rime-ai"
+            ]
+          },
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
+              {
+                "type": "string",
+                "enum": [
+                  "abbie",
+                  "allison",
+                  "ally",
+                  "alona",
+                  "amber",
+                  "ana",
+                  "antoine",
+                  "armon",
+                  "brenda",
+                  "brittany",
+                  "carol",
+                  "colin",
+                  "courtney",
+                  "elena",
+                  "elliot",
+                  "eva",
+                  "geoff",
+                  "gerald",
+                  "hank",
+                  "helen",
+                  "hera",
+                  "jen",
+                  "joe",
+                  "joy",
+                  "juan",
+                  "kendra",
+                  "kendrick",
+                  "kenneth",
+                  "kevin",
+                  "kris",
+                  "linda",
+                  "madison",
+                  "marge",
+                  "marina",
+                  "marissa",
+                  "marta",
+                  "maya",
+                  "nicholas",
+                  "nyles",
+                  "phil",
+                  "reba",
+                  "rex",
+                  "rick",
+                  "ritu",
+                  "rob",
+                  "rodney",
+                  "rohan",
+                  "rosco",
+                  "samantha",
+                  "sandy",
+                  "selena",
+                  "seth",
+                  "sharon",
+                  "stan",
+                  "tamra",
+                  "tanya",
+                  "tibur",
+                  "tj",
+                  "tyler",
+                  "viv",
+                  "yadira",
+                  "marsh",
+                  "bayou",
+                  "creek",
+                  "brook",
+                  "flower",
+                  "spore",
+                  "glacier",
+                  "gulch",
+                  "alpine",
+                  "cove",
+                  "lagoon",
+                  "tundra",
+                  "steppe",
+                  "mesa",
+                  "grove",
+                  "rainforest",
+                  "moraine",
+                  "wildflower",
+                  "peak",
+                  "boulder",
+                  "gypsum",
+                  "zest",
+                  "luna",
+                  "celeste",
+                  "orion",
+                  "ursa",
+                  "astra",
+                  "esther",
+                  "estelle",
+                  "andromeda"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "RimeAI Voice ID"
               }
-            }
+            ]
           },
-          "name": {
+          "model": {
             "type": "string",
-            "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.",
-            "maxLength": 40
+            "description": "This is the model that will be used. Defaults to 'arcana' when not specified.",
+            "enum": [
+              "arcana",
+              "mistv2",
+              "mist"
+            ],
+            "example": "arcana"
           },
-          "voicemailMessage": {
-            "type": "string",
-            "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.",
-            "maxLength": 1000
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "minimum": 0.1,
+            "example": null
           },
-          "endCallMessage": {
-            "type": "string",
-            "description": "This is the message that the assistant will say if it ends the call.\n\nIf unspecified, it will hang up without saying anything.",
-            "maxLength": 1000
+          "pauseBetweenBrackets": {
+            "type": "boolean",
+            "description": "This is a flag that controls whether to add slight pauses using angle brackets. Example: \"Hi. <200> I'd love to have a conversation with you.\" adds a 200ms pause between the first and second sentences.",
+            "example": false
           },
-          "endCallPhrases": {
-            "description": "This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "maxLength": 140,
-              "minLength": 2
-            }
+          "phonemizeBetweenBrackets": {
+            "type": "boolean",
+            "description": "This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic pronunciation) - Example: \"{h'El.o} World\" will pronounce \"Hello\" as expected.",
+            "example": false
           },
-          "compliancePlan": {
-            "$ref": "#/components/schemas/CompliancePlan"
+          "reduceLatency": {
+            "type": "boolean",
+            "description": "This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency",
+            "example": false
           },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the assistant."
+          "inlineSpeedAlpha": {
+            "type": "string",
+            "description": "This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha",
+            "example": null
           },
-          "analysisPlan": {
-            "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.",
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/AnalysisPlan"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
+          }
+        },
+        "required": [
+          "provider",
+          "voiceId"
+        ]
+      },
+      "FallbackSesameVoice": {
+        "type": "object",
+        "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "artifactPlan": {
-            "description": "This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.\n\nNote: `recordingEnabled` is currently at the root level. It will be moved to `artifactPlan` in the future, but will remain backwards compatible.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ArtifactPlan"
-              }
+          "provider": {
+            "type": "string",
+            "description": "This is the voice provider that will be used.",
+            "enum": [
+              "sesame"
             ]
           },
-          "messagePlan": {
-            "description": "This is the plan for static predefined messages that can be spoken by the assistant during the call, like `idleMessages`.\n\nNote: `firstMessage`, `voicemailMessage`, and `endCallMessage` are currently at the root level. They will be moved to `messagePlan` in the future, but will remain backwards compatible.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/MessagePlan"
-              }
+          "voiceId": {
+            "type": "string",
+            "description": "This is the provider-specific ID that will be used.",
+            "title": "Sesame Voice ID. This should be either a name (a built-in voice) or a UUID (a custom voice)."
+          },
+          "model": {
+            "type": "string",
+            "description": "This is the model that will be used.",
+            "enum": [
+              "csm-1b"
             ]
           },
-          "startSpeakingPlan": {
-            "description": "This is the plan for when the assistant should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/StartSpeakingPlan"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
+          }
+        },
+        "required": [
+          "provider",
+          "voiceId",
+          "model"
+        ]
+      },
+      "FallbackSmallestAIVoice": {
+        "type": "object",
+        "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "stopSpeakingPlan": {
-            "description": "This is the plan for when assistant should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/StopSpeakingPlan"
-              }
+          "provider": {
+            "type": "string",
+            "description": "This is the voice provider that will be used.",
+            "enum": [
+              "smallest-ai"
             ]
           },
-          "monitorPlan": {
-            "description": "This is the plan for real-time monitoring of the assistant's calls.\n\nUsage:\n- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`.\n\nNote, `serverMessages`, `clientMessages`, `serverUrl` and `serverUrlSecret` are currently at the root level but will be moved to `monitorPlan` in the future. Will remain backwards compatible",
-            "allOf": [
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/MonitorPlan"
+                "type": "string",
+                "enum": [
+                  "emily",
+                  "jasmine",
+                  "arman",
+                  "james",
+                  "mithali",
+                  "aravind",
+                  "raj",
+                  "diya",
+                  "raman",
+                  "ananya",
+                  "isha",
+                  "william",
+                  "aarav",
+                  "monika",
+                  "niharika",
+                  "deepika",
+                  "raghav",
+                  "kajal",
+                  "radhika",
+                  "mansi",
+                  "nisha",
+                  "saurabh",
+                  "pooja",
+                  "saina",
+                  "sanya"
+                ],
+                "title": "Preset Voice Options"
+              },
+              {
+                "type": "string",
+                "title": "Smallest AI Voice ID"
               }
             ]
           },
-          "credentialIds": {
-            "description": "These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "model": {
+            "type": "string",
+            "description": "Smallest AI voice model to use. Defaults to 'lightning' when not specified.",
+            "enum": [
+              "lightning"
+            ]
           },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl",
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.",
+            "example": null
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
-          },
-          "hooks": {
-            "description": "This is a set of actions that will be performed on certain events.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/AssistantHooks"
-            }
-          },
-          "keypadInputPlan": {
-            "$ref": "#/components/schemas/KeypadInputPlan"
           }
-        }
+        },
+        "required": [
+          "provider",
+          "voiceId"
+        ]
       },
-      "AssistantOverrides": {
+      "FallbackTavusVoice": {
         "type": "object",
         "properties": {
-          "transcriber": {
-            "description": "These are the options for the assistant's transcriber.",
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
+          },
+          "provider": {
+            "type": "string",
+            "description": "This is the voice provider that will be used.",
+            "enum": [
+              "tavus"
+            ]
+          },
+          "voiceId": {
+            "description": "This is the provider-specific ID that will be used.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/AssemblyAITranscriber",
-                "title": "AssemblyAI"
-              },
-              {
-                "$ref": "#/components/schemas/AzureSpeechTranscriber",
-                "title": "Azure"
-              },
-              {
-                "$ref": "#/components/schemas/CustomTranscriber",
-                "title": "CustomTranscriber"
-              },
-              {
-                "$ref": "#/components/schemas/DeepgramTranscriber",
-                "title": "Deepgram"
-              },
-              {
-                "$ref": "#/components/schemas/ElevenLabsTranscriber",
-                "title": "ElevenLabs"
-              },
-              {
-                "$ref": "#/components/schemas/GladiaTranscriber",
-                "title": "Gladia"
-              },
-              {
-                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
-                "title": "Speechmatics"
-              },
-              {
-                "$ref": "#/components/schemas/TalkscriberTranscriber",
-                "title": "Talkscriber"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleTranscriber",
-                "title": "Google"
+                "type": "string",
+                "enum": [
+                  "r52da2535a"
+                ],
+                "title": "Preset Voice Options"
               },
               {
-                "$ref": "#/components/schemas/OpenAITranscriber",
-                "title": "OpenAI"
+                "type": "string",
+                "title": "Tavus Voice ID"
               }
             ]
           },
-          "model": {
-            "description": "These are the options for the assistant's LLM.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/AnyscaleModel",
-                "title": "Anyscale"
-              },
-              {
-                "$ref": "#/components/schemas/AnthropicModel",
-                "title": "Anthropic"
-              },
-              {
-                "$ref": "#/components/schemas/CerebrasModel",
-                "title": "Cerebras"
-              },
-              {
-                "$ref": "#/components/schemas/CustomLLMModel",
-                "title": "CustomLLM"
-              },
-              {
-                "$ref": "#/components/schemas/DeepInfraModel",
-                "title": "DeepInfra"
-              },
-              {
-                "$ref": "#/components/schemas/DeepSeekModel",
-                "title": "DeepSeek"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleModel",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/GroqModel",
-                "title": "Groq"
-              },
-              {
-                "$ref": "#/components/schemas/InflectionAIModel",
-                "title": "InflectionAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIModel",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenRouterModel",
-                "title": "OpenRouter"
-              },
-              {
-                "$ref": "#/components/schemas/PerplexityAIModel",
-                "title": "PerplexityAI"
-              },
-              {
-                "$ref": "#/components/schemas/TogetherAIModel",
-                "title": "Together"
-              },
-              {
-                "$ref": "#/components/schemas/VapiModel",
-                "title": "Vapi"
-              },
+          "personaId": {
+            "type": "string",
+            "description": "This is the unique identifier for the persona that the replica will use in the conversation."
+          },
+          "callbackUrl": {
+            "type": "string",
+            "description": "This is the url that will receive webhooks with updates regarding the conversation state."
+          },
+          "conversationName": {
+            "type": "string",
+            "description": "This is the name for the conversation."
+          },
+          "conversationalContext": {
+            "type": "string",
+            "description": "This is the context that will be appended to any context provided in the persona, if one is provided."
+          },
+          "customGreeting": {
+            "type": "string",
+            "description": "This is the custom greeting that the replica will give once a participant joines the conversation."
+          },
+          "properties": {
+            "description": "These are optional properties used to customize the conversation.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/XaiModel",
-                "title": "XAI"
+                "$ref": "#/components/schemas/TavusConversationProperties"
               }
             ]
           },
-          "voice": {
-            "description": "These are the options for the assistant's voice.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/AzureVoice",
-                "title": "Azure"
-              },
-              {
-                "$ref": "#/components/schemas/CartesiaVoice",
-                "title": "Cartesia"
-              },
-              {
-                "$ref": "#/components/schemas/CustomVoice",
-                "title": "CustomVoice"
-              },
-              {
-                "$ref": "#/components/schemas/DeepgramVoice",
-                "title": "Deepgram"
-              },
-              {
-                "$ref": "#/components/schemas/ElevenLabsVoice",
-                "title": "ElevenLabs"
-              },
-              {
-                "$ref": "#/components/schemas/HumeVoice",
-                "title": "Hume"
-              },
-              {
-                "$ref": "#/components/schemas/LMNTVoice",
-                "title": "LMNT"
-              },
-              {
-                "$ref": "#/components/schemas/NeuphonicVoice",
-                "title": "Neuphonic"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIVoice",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/PlayHTVoice",
-                "title": "PlayHT"
-              },
-              {
-                "$ref": "#/components/schemas/RimeAIVoice",
-                "title": "RimeAI"
-              },
-              {
-                "$ref": "#/components/schemas/SmallestAIVoice",
-                "title": "SmallestAI"
-              },
-              {
-                "$ref": "#/components/schemas/TavusVoice",
-                "title": "TavusVoice"
-              },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/VapiVoice",
-                "title": "Vapi"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
-            ],
-            "default": {
-              "provider": "playht",
-              "voiceId": "jennifer"
-            }
+            ]
+          }
+        },
+        "required": [
+          "provider",
+          "voiceId"
+        ]
+      },
+      "FallbackVapiVoice": {
+        "type": "object",
+        "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "firstMessage": {
+          "provider": {
             "type": "string",
-            "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.",
-            "example": "Hello! How can I help you today?"
-          },
-          "firstMessageInterruptionsEnabled": {
-            "type": "boolean",
-            "default": false
+            "description": "This is the voice provider that will be used.",
+            "enum": [
+              "vapi"
+            ]
           },
-          "firstMessageMode": {
+          "voiceId": {
             "type": "string",
-            "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'",
+            "description": "The voices provided by Vapi",
             "enum": [
-              "assistant-speaks-first",
-              "assistant-speaks-first-with-model-generated-message",
-              "assistant-waits-for-user"
-            ],
-            "example": "assistant-speaks-first"
+              "Elliot",
+              "Kylie",
+              "Rohan",
+              "Lily",
+              "Savannah",
+              "Hana",
+              "Neha",
+              "Cole",
+              "Harry",
+              "Paige",
+              "Spencer"
+            ]
           },
-          "voicemailDetection": {
-            "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan",
-                "title": "OpenAI"
-              },
+          "speed": {
+            "type": "number",
+            "description": "This is the speed multiplier that will be used.\n\n@default 1",
+            "minimum": 0.25,
+            "maximum": 2,
+            "default": 1
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan",
-                "title": "Twilio"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
+          }
+        },
+        "required": [
+          "provider",
+          "voiceId"
+        ]
+      },
+      "FallbackInworldVoice": {
+        "type": "object",
+        "properties": {
+          "cachingEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "clientMessages": {
-            "type": "array",
+          "provider": {
+            "type": "string",
+            "description": "This is the voice provider that will be used.",
             "enum": [
-              "conversation-update",
-              "function-call",
-              "function-call-result",
-              "hang",
-              "language-changed",
-              "metadata",
-              "model-output",
-              "speech-update",
-              "status-update",
-              "transcript",
-              "tool-calls",
-              "tool-calls-result",
-              "transfer-update",
-              "user-interrupted",
-              "voice-input",
-              "workflow.node.started"
-            ],
-            "example": [
-              "conversation-update",
-              "function-call",
-              "hang",
-              "model-output",
-              "speech-update",
-              "status-update",
-              "transfer-update",
-              "transcript",
-              "tool-calls",
-              "user-interrupted",
-              "voice-input",
-              "workflow.node.started"
+              "inworld"
+            ]
+          },
+          "voiceId": {
+            "type": "string",
+            "description": "Available voices by language:\n• en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus\n• zh: Yichen, Xiaoyin, Xinyi, Jing\n• nl: Erik, Katrien, Lennart, Lore\n• fr: Alain, Hélène, Mathieu, Étienne\n• de: Johanna, Josef\n• it: Gianni, Orietta\n• ja: Asuka, Satoshi\n• ko: Hyunwoo, Minji, Seojun, Yoona\n• pl: Szymon, Wojciech\n• pt: Heitor, Maitê\n• es: Diego, Lupita, Miguel, Rafael",
+            "maxLength": 120,
+            "title": "Inworld Voice ID",
+            "enum": [
+              "Alex",
+              "Ashley",
+              "Craig",
+              "Deborah",
+              "Dennis",
+              "Edward",
+              "Elizabeth",
+              "Hades",
+              "Julia",
+              "Pixie",
+              "Mark",
+              "Olivia",
+              "Priya",
+              "Ronald",
+              "Sarah",
+              "Shaun",
+              "Theodore",
+              "Timothy",
+              "Wendy",
+              "Dominus",
+              "Yichen",
+              "Xiaoyin",
+              "Xinyi",
+              "Jing",
+              "Erik",
+              "Katrien",
+              "Lennart",
+              "Lore",
+              "Alain",
+              "Hélène",
+              "Mathieu",
+              "Étienne",
+              "Johanna",
+              "Josef",
+              "Gianni",
+              "Orietta",
+              "Asuka",
+              "Satoshi",
+              "Hyunwoo",
+              "Minji",
+              "Seojun",
+              "Yoona",
+              "Szymon",
+              "Wojciech",
+              "Heitor",
+              "Maitê",
+              "Diego",
+              "Lupita",
+              "Miguel",
+              "Rafael"
             ],
-            "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.",
-            "items": {
-              "type": "string",
-              "enum": [
-                "conversation-update",
-                "function-call",
-                "function-call-result",
-                "hang",
-                "language-changed",
-                "metadata",
-                "model-output",
-                "speech-update",
-                "status-update",
-                "transcript",
-                "tool-calls",
-                "tool-calls-result",
-                "transfer-update",
-                "user-interrupted",
-                "voice-input",
-                "workflow.node.started"
-              ]
-            }
+            "example": "Alex"
           },
-          "serverMessages": {
-            "type": "array",
+          "model": {
+            "type": "string",
+            "description": "This is the model that will be used.",
             "enum": [
-              "conversation-update",
-              "end-of-call-report",
-              "function-call",
-              "hang",
-              "language-changed",
-              "language-change-detected",
-              "model-output",
-              "phone-call-control",
-              "speech-update",
-              "status-update",
-              "transcript",
-              "transcript[transcriptType=\"final\"]",
-              "tool-calls",
-              "transfer-destination-request",
-              "transfer-update",
-              "user-interrupted",
-              "voice-input"
-            ],
-            "example": [
-              "conversation-update",
-              "end-of-call-report",
-              "function-call",
-              "hang",
-              "speech-update",
-              "status-update",
-              "tool-calls",
-              "transfer-destination-request",
-              "user-interrupted"
+              "inworld-tts-1"
             ],
-            "description": "These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema.",
-            "items": {
-              "type": "string",
-              "enum": [
-                "conversation-update",
-                "end-of-call-report",
-                "function-call",
-                "hang",
-                "language-changed",
-                "language-change-detected",
-                "model-output",
-                "phone-call-control",
-                "speech-update",
-                "status-update",
-                "transcript",
-                "transcript[transcriptType=\"final\"]",
-                "tool-calls",
-                "transfer-destination-request",
-                "transfer-update",
-                "user-interrupted",
-                "voice-input"
-              ]
-            }
-          },
-          "silenceTimeoutSeconds": {
-            "type": "number",
-            "description": "How many seconds of silence to wait before ending the call. Defaults to 30.\n\n@default 30",
-            "minimum": 10,
-            "maximum": 3600,
-            "example": 30
+            "default": "inworld-tts-1"
           },
-          "maxDurationSeconds": {
-            "type": "number",
-            "description": "This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended.\n\n@default 600 (10 minutes)",
-            "minimum": 10,
-            "maximum": 43200,
-            "example": 600
+          "languageCode": {
+            "type": "string",
+            "description": "Language code for Inworld TTS synthesis",
+            "default": "en",
+            "enum": [
+              "en",
+              "zh",
+              "ko",
+              "nl",
+              "fr",
+              "es",
+              "ja",
+              "de",
+              "it",
+              "pl",
+              "pt"
+            ]
           },
-          "backgroundSound": {
-            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
-            "maxLength": 1000,
-            "oneOf": [
-              {
-                "type": "enum",
-                "enum": [
-                  "off",
-                  "office"
-                ],
-                "example": "office"
-              },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
+            "allOf": [
               {
-                "type": "string",
-                "format": "uri",
-                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
-          },
-          "backgroundDenoisingEnabled": {
+          }
+        },
+        "required": [
+          "provider",
+          "voiceId"
+        ]
+      },
+      "FallbackMinimaxVoice": {
+        "type": "object",
+        "properties": {
+          "cachingEnabled": {
             "type": "boolean",
-            "description": "This enables filtering of noise and background speech while the user is talking.\n\nDefault `false` while in beta.\n\n@default false",
-            "example": false
+            "description": "This is the flag to toggle voice caching for the assistant.",
+            "example": true,
+            "default": true
           },
-          "modelOutputInMessagesEnabled": {
-            "type": "boolean",
-            "description": "This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech.\n\nDefault `false` while in beta.\n\n@default false",
-            "example": false
+          "provider": {
+            "type": "string",
+            "description": "This is the voice provider that will be used.",
+            "enum": [
+              "minimax"
+            ]
           },
-          "transportConfigurations": {
-            "type": "array",
-            "description": "These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TransportConfigurationTwilio",
-                  "title": "Twilio"
-                }
-              ]
-            }
+          "voiceId": {
+            "type": "string",
+            "description": "This is the provider-specific ID that will be used. Use a voice from MINIMAX_PREDEFINED_VOICES or a custom cloned voice ID.",
+            "title": "This is the Minimax Voice ID"
           },
-          "observabilityPlan": {
-            "description": "This is the plan for observability configuration of assistant's calls.\nCurrently supports Langfuse for tracing and monitoring.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
-                "title": "Langfuse"
-              }
+          "model": {
+            "type": "string",
+            "description": "This is the model that will be used. Options are 'speech-02-hd' and 'speech-02-turbo'.\nspeech-02-hd is optimized for high-fidelity applications like voiceovers and audiobooks.\nspeech-02-turbo is designed for real-time applications with low latency.\n\n@default \"speech-02-turbo\"",
+            "enum": [
+              "speech-02-hd",
+              "speech-02-turbo"
+            ],
+            "example": "speech-02-turbo",
+            "default": "speech-02-turbo"
+          },
+          "emotion": {
+            "type": "string",
+            "description": "The emotion to use for the voice. If not provided, will use auto-detect mode.\nOptions include: 'happy', 'sad', 'angry', 'fearful', 'surprised', 'disgusted', 'neutral'",
+            "example": "happy"
+          },
+          "pitch": {
+            "type": "number",
+            "description": "Voice pitch adjustment. Range from -12 to 12 semitones.\n@default 0",
+            "minimum": -12,
+            "maximum": 12,
+            "example": 0,
+            "default": 0
+          },
+          "speed": {
+            "type": "number",
+            "description": "Voice speed adjustment. Range from 0.5 to 2.0.\n@default 1.0",
+            "minimum": 0.5,
+            "maximum": 2,
+            "example": 1,
+            "default": 1
+          },
+          "volume": {
+            "type": "number",
+            "description": "Voice volume adjustment. Range from 0.5 to 2.0.\n@default 1.0",
+            "minimum": 0.5,
+            "maximum": 2,
+            "example": 1,
+            "default": 1
+          },
+          "region": {
+            "type": "string",
+            "description": "The region for Minimax API. Defaults to \"worldwide\".",
+            "enum": [
+              "worldwide",
+              "china"
             ],
+            "default": "worldwide"
+          },
+          "chunkPlan": {
+            "description": "This is the plan for chunking the model output before it is sent to the voice provider.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
+                "$ref": "#/components/schemas/ChunkPlan"
               }
             ]
-          },
-          "credentials": {
-            "type": "array",
-            "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
-                  "title": "AnthropicCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
-                  "title": "AnyscaleCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
-                  "title": "AssemblyAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
-                  "title": "AzureCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
-                  "title": "AzureOpenAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
-                  "title": "ByoSipTrunkCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
-                  "title": "CartesiaCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
-                  "title": "CerebrasCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
-                  "title": "CloudflareCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
-                  "title": "CustomLLMCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
-                  "title": "DeepgramCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
-                  "title": "DeepInfraCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
-                  "title": "DeepSeekCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
-                  "title": "ElevenLabsCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
-                  "title": "GcpCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
-                  "title": "GladiaCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
-                  "title": "GhlCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
-                  "title": "GoogleCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
-                  "title": "GroqCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
-                  "title": "HumeCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
-                  "title": "InflectionAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
-                  "title": "LangfuseCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
-                  "title": "LmntCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
-                  "title": "MakeCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
-                  "title": "MistralCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
-                  "title": "NeuphonicCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
-                  "title": "OpenAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
-                  "title": "OpenRouterCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
-                  "title": "PerplexityAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
-                  "title": "PlayHTCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
-                  "title": "RimeAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
-                  "title": "RunpodCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
-                  "title": "S3Credential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
-                  "title": "SmallestAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
-                  "title": "SpeechmaticsCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
-                  "title": "SupabaseCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
-                  "title": "TavusCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
-                  "title": "TogetherAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
-                  "title": "TrieveCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
-                  "title": "TwilioCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
-                  "title": "VonageCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
-                  "title": "WebhookCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
-                  "title": "XAiCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
-                  "title": "GoogleCalendarOAuth2ClientCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
-                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
-                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
-                  "title": "SlackOAuth2AuthorizationCredential"
-                }
-              ],
-              "discriminator": {
-                "propertyName": "provider",
-                "mapping": {
-                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
-                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
-                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
-                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
-                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
-                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
-                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
-                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
-                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
-                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
-                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
-                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
-                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
-                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
-                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
-                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
-                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
-                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
-                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
-                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
-                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
-                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
-                  "make": "#/components/schemas/CreateMakeCredentialDTO",
-                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
-                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
-                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
-                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
-                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
-                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
-                  "s3": "#/components/schemas/CreateS3CredentialDTO",
-                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
-                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
-                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
-                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
-                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
-                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
-                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
-                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
-                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
-                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
-                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
-                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
-                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
-                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
-                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
-                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
-                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO"
-                }
-              }
-            }
-          },
-          "variableValues": {
-            "type": "object",
-            "description": "These are values that will be used to replace the template variables in the assistant messages and other text-based fields.\nThis uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html\n\nSo for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`.\n`{{\"now\" | date: \"%b %d, %Y, %I:%M %p\", \"America/New_York\"}}` will be replaced with the current date and time in New York.\n Some VAPI reserved defaults:\n - *customer* - the customer object"
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.",
-            "maxLength": 40
-          },
-          "voicemailMessage": {
-            "type": "string",
-            "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.",
-            "maxLength": 1000
-          },
-          "endCallMessage": {
+          }
+        },
+        "required": [
+          "provider",
+          "voiceId"
+        ]
+      },
+      "TransportConfigurationTwilio": {
+        "type": "object",
+        "properties": {
+          "provider": {
             "type": "string",
-            "description": "This is the message that the assistant will say if it ends the call.\n\nIf unspecified, it will hang up without saying anything.",
-            "maxLength": 1000
-          },
-          "endCallPhrases": {
-            "description": "This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "maxLength": 140,
-              "minLength": 2
-            }
-          },
-          "compliancePlan": {
-            "$ref": "#/components/schemas/CompliancePlan"
-          },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the assistant."
-          },
-          "analysisPlan": {
-            "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AnalysisPlan"
-              }
-            ]
-          },
-          "artifactPlan": {
-            "description": "This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.\n\nNote: `recordingEnabled` is currently at the root level. It will be moved to `artifactPlan` in the future, but will remain backwards compatible.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ArtifactPlan"
-              }
-            ]
-          },
-          "messagePlan": {
-            "description": "This is the plan for static predefined messages that can be spoken by the assistant during the call, like `idleMessages`.\n\nNote: `firstMessage`, `voicemailMessage`, and `endCallMessage` are currently at the root level. They will be moved to `messagePlan` in the future, but will remain backwards compatible.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/MessagePlan"
-              }
-            ]
-          },
-          "startSpeakingPlan": {
-            "description": "This is the plan for when the assistant should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/StartSpeakingPlan"
-              }
-            ]
-          },
-          "stopSpeakingPlan": {
-            "description": "This is the plan for when assistant should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/StopSpeakingPlan"
-              }
+            "enum": [
+              "twilio"
             ]
           },
-          "monitorPlan": {
-            "description": "This is the plan for real-time monitoring of the assistant's calls.\n\nUsage:\n- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`.\n\nNote, `serverMessages`, `clientMessages`, `serverUrl` and `serverUrlSecret` are currently at the root level but will be moved to `monitorPlan` in the future. Will remain backwards compatible",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/MonitorPlan"
-              }
-            ]
+          "timeout": {
+            "type": "number",
+            "description": "The integer number of seconds that we should allow the phone to ring before assuming there is no answer.\nThe default is `60` seconds and the maximum is `600` seconds.\nFor some call flows, we will add a 5-second buffer to the timeout value you provide.\nFor this reason, a timeout value of 10 seconds could result in an actual timeout closer to 15 seconds.\nYou can set this to a short time, such as `15` seconds, to hang up before reaching an answering machine or voicemail.\n\n@default 60",
+            "minimum": 1,
+            "maximum": 600,
+            "example": 60
           },
-          "credentialIds": {
-            "description": "These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "record": {
+            "type": "boolean",
+            "description": "Whether to record the call.\nCan be `true` to record the phone call, or `false` to not.\nThe default is `false`.\n\n@default false",
+            "example": false
           },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
+          "recordingChannels": {
+            "type": "string",
+            "description": "The number of channels in the final recording.\nCan be: `mono` or `dual`.\nThe default is `mono`.\n`mono` records both legs of the call in a single channel of the recording file.\n`dual` records each leg to a separate channel of the recording file.\nThe first channel of a dual-channel recording contains the parent call and the second channel contains the child call.\n\n@default 'mono'",
+            "enum": [
+              "mono",
+              "dual"
+            ],
+            "example": "mono"
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "CreateAnthropicCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "anthropic"
             ]
           },
-          "hooks": {
-            "description": "This is a set of actions that will be performed on certain events.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/AssistantHooks"
-            }
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "keypadInputPlan": {
-            "$ref": "#/components/schemas/KeypadInputPlan"
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
-        }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
       },
-      "SquadMemberDTO": {
+      "CreateAnyscaleCredentialDTO": {
         "type": "object",
         "properties": {
-          "assistantId": {
+          "provider": {
             "type": "string",
-            "nullable": true,
-            "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead."
-          },
-          "assistant": {
-            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CreateAssistantDTO"
-              }
+            "enum": [
+              "anyscale"
             ]
           },
-          "assistantOverrides": {
-            "description": "This can be used to override the assistant's settings and provide values for it's template variables.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AssistantOverrides"
-              }
-            ]
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "assistantDestinations": {
-            "description": "These are the others assistants that this assistant can transfer to.\n\nIf the assistant already has transfer call tool, these destinations are just appended to existing ones.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/TransferDestinationAssistant"
-            }
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
-        }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
       },
-      "CreateSquadDTO": {
+      "CreateAssemblyAICredentialDTO": {
         "type": "object",
         "properties": {
-          "name": {
+          "provider": {
             "type": "string",
-            "description": "This is the name of the squad."
+            "enum": [
+              "assembly-ai"
+            ]
           },
-          "members": {
-            "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/SquadMemberDTO"
-            }
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
           },
-          "membersOverrides": {
-            "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AssistantOverrides"
-              }
-            ]
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
         },
         "required": [
-          "members"
+          "provider",
+          "apiKey"
         ]
       },
-      "PhoneNumberHookCallRinging": {
+      "AzureBlobStorageBucketPlan": {
         "type": "object",
         "properties": {
-          "on": {
+          "connectionString": {
             "type": "string",
-            "description": "This is the event to trigger the hook on",
-            "enum": [
-              "call.ringing"
-            ],
-            "maxLength": 1000
+            "description": "This is the blob storage connection string for the Azure resource."
           },
-          "do": {
-            "type": "array",
-            "description": "This is the set of actions to perform when the hook triggers",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TransferPhoneNumberHookAction",
-                  "title": "TransferPhoneNumberHookAction"
-                },
-                {
-                  "$ref": "#/components/schemas/SayPhoneNumberHookAction",
-                  "title": "SayPhoneNumberHookAction"
-                }
-              ]
-            }
+          "containerName": {
+            "type": "string",
+            "description": "This is the container name for the Azure blob storage."
+          },
+          "path": {
+            "type": "string",
+            "description": "This is the path where call artifacts will be stored.\n\nUsage:\n- To store call artifacts in a specific folder, set this to the full path. Eg. \"/folder-name1/folder-name2\".\n- To store call artifacts in the root of the bucket, leave this blank.\n\n@default \"/\""
           }
         },
         "required": [
-          "on",
-          "do"
+          "connectionString",
+          "containerName"
         ]
       },
-      "ImportTwilioPhoneNumberDTO": {
+      "CreateAzureCredentialDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
+          "provider": {
+            "type": "string",
+            "enum": [
+              "azure"
+            ]
+          },
+          "service": {
+            "type": "string",
+            "description": "This is the service being used in Azure.",
+            "enum": [
+              "speech",
+              "blob_storage"
+            ],
+            "default": "speech"
+          },
+          "region": {
+            "type": "string",
+            "description": "This is the region of the Azure resource.",
+            "enum": [
+              "australia",
+              "canadaeast",
+              "canadacentral",
+              "eastus2",
+              "eastus",
+              "france",
+              "india",
+              "japaneast",
+              "japanwest",
+              "uaenorth",
+              "northcentralus",
+              "norway",
+              "southcentralus",
+              "swedencentral",
+              "switzerland",
+              "uk",
+              "westus",
+              "westus3"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API.",
+            "maxLength": 10000
+          },
+          "fallbackIndex": {
+            "type": "number",
+            "minimum": 1,
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order."
+          },
+          "bucketPlan": {
+            "description": "This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
+                "$ref": "#/components/schemas/AzureBlobStorageBucketPlan"
               }
             ]
           },
-          "hooks": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "service"
+        ]
+      },
+      "CreateAzureOpenAICredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "azure-openai"
+            ]
+          },
+          "region": {
+            "type": "string",
+            "enum": [
+              "australia",
+              "canadaeast",
+              "canadacentral",
+              "eastus2",
+              "eastus",
+              "france",
+              "india",
+              "japaneast",
+              "japanwest",
+              "uaenorth",
+              "northcentralus",
+              "norway",
+              "southcentralus",
+              "swedencentral",
+              "switzerland",
+              "uk",
+              "westus",
+              "westus3"
+            ]
+          },
+          "models": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "enum": [
+              "gpt-4.1-2025-04-14",
+              "gpt-4.1-mini-2025-04-14",
+              "gpt-4.1-nano-2025-04-14",
+              "gpt-4o-2024-11-20",
+              "gpt-4o-2024-08-06",
+              "gpt-4o-2024-05-13",
+              "gpt-4o-mini-2024-07-18",
+              "gpt-4-turbo-2024-04-09",
+              "gpt-4-0125-preview",
+              "gpt-4-1106-preview",
+              "gpt-4-0613",
+              "gpt-35-turbo-0125",
+              "gpt-35-turbo-1106"
+            ],
+            "example": [
+              "gpt-4-0125-preview",
+              "gpt-4-0613"
+            ],
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
-                }
+              "type": "string",
+              "enum": [
+                "gpt-4.1-2025-04-14",
+                "gpt-4.1-mini-2025-04-14",
+                "gpt-4.1-nano-2025-04-14",
+                "gpt-4o-2024-11-20",
+                "gpt-4o-2024-08-06",
+                "gpt-4o-2024-05-13",
+                "gpt-4o-mini-2024-07-18",
+                "gpt-4-turbo-2024-04-09",
+                "gpt-4-0125-preview",
+                "gpt-4-1106-preview",
+                "gpt-4-0613",
+                "gpt-35-turbo-0125",
+                "gpt-35-turbo-1106"
               ]
             }
           },
-          "twilioPhoneNumber": {
+          "openAIKey": {
             "type": "string",
-            "description": "These are the digits of the phone number you own on your Twilio.",
-            "deprecated": true
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "twilioAccountSid": {
+          "ocpApimSubscriptionKey": {
             "type": "string",
-            "description": "This is your Twilio Account SID that will be used to handle this phone number."
+            "description": "This is not returned in the API."
           },
-          "twilioAuthToken": {
+          "openAIEndpoint": {
             "type": "string",
-            "description": "This is the Twilio Auth Token that will be used to handle this phone number."
+            "maxLength": 10000
           },
           "name": {
             "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
             "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "region",
+          "models",
+          "openAIKey",
+          "openAIEndpoint"
+        ]
+      },
+      "SipTrunkGateway": {
+        "type": "object",
+        "properties": {
+          "ip": {
+            "type": "string",
+            "description": "This is the address of the gateway. It can be an IPv4 address like 1.1.1.1 or a fully qualified domain name like my-sip-trunk.pstn.twilio.com."
           },
-          "assistantId": {
+          "port": {
+            "type": "number",
+            "description": "This is the port number of the gateway. Default is 5060.\n\n@default 5060",
+            "minimum": 1,
+            "maximum": 65535
+          },
+          "netmask": {
+            "type": "number",
+            "description": "This is the netmask of the gateway. Defaults to 32.\n\n@default 32",
+            "minimum": 24,
+            "maximum": 32
+          },
+          "inboundEnabled": {
+            "type": "boolean",
+            "description": "This is whether inbound calls are allowed from this gateway. Default is true.\n\n@default true"
+          },
+          "outboundEnabled": {
+            "type": "boolean",
+            "description": "This is whether outbound calls should be sent to this gateway. Default is true.\n\nNote, if netmask is less than 32, it doesn't affect the outbound IPs that are tried. 1 attempt is made to `ip:port`.\n\n@default true"
+          },
+          "outboundProtocol": {
             "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+            "description": "This is the protocol to use for SIP signaling outbound calls. Default is udp.\n\n@default udp",
+            "enum": [
+              "tls/srtp",
+              "tcp",
+              "tls",
+              "udp"
+            ]
           },
-          "squadId": {
+          "optionsPingEnabled": {
+            "type": "boolean",
+            "description": "This is whether to send options ping to the gateway. This can be used to check if the gateway is reachable. Default is false.\n\nThis is useful for high availability setups where you want to check if the gateway is reachable before routing calls to it. Note, if no gateway for a trunk is reachable, outbound calls will be rejected.\n\n@default false"
+          }
+        },
+        "required": [
+          "ip"
+        ]
+      },
+      "SipTrunkOutboundSipRegisterPlan": {
+        "type": "object",
+        "properties": {
+          "domain": {
+            "type": "string"
+          },
+          "username": {
+            "type": "string"
+          },
+          "realm": {
+            "type": "string"
+          }
+        }
+      },
+      "SipTrunkOutboundAuthenticationPlan": {
+        "type": "object",
+        "properties": {
+          "authPassword": {
             "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+            "description": "This is not returned in the API."
           },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+          "authUsername": {
+            "type": "string"
+          },
+          "sipRegisterPlan": {
+            "description": "This can be used to configure if SIP register is required by the SIP trunk. If not provided, no SIP registration will be attempted.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/SipTrunkOutboundSipRegisterPlan"
               }
             ]
           }
-        },
-        "required": [
-          "twilioPhoneNumber",
-          "twilioAccountSid",
-          "twilioAuthToken"
-        ]
+        }
       },
-      "CreateCustomerDTO": {
+      "SbcConfiguration": {
+        "type": "object",
+        "properties": {}
+      },
+      "CreateByoSipTrunkCredentialDTO": {
         "type": "object",
         "properties": {
-          "numberE164CheckEnabled": {
+          "provider": {
+            "type": "string",
+            "description": "This can be used to bring your own SIP trunks or to connect to a Carrier.",
+            "enum": [
+              "byo-sip-trunk"
+            ]
+          },
+          "gateways": {
+            "description": "This is the list of SIP trunk's gateways.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/SipTrunkGateway"
+            }
+          },
+          "outboundAuthenticationPlan": {
+            "description": "This can be used to configure the outbound authentication if required by the SIP trunk.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SipTrunkOutboundAuthenticationPlan"
+              }
+            ]
+          },
+          "outboundLeadingPlusEnabled": {
             "type": "boolean",
-            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
-            "default": true
+            "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false"
           },
-          "extension": {
+          "techPrefix": {
             "type": "string",
-            "description": "This is the extension that will be dialed after the call is answered.",
-            "maxLength": 10,
-            "example": null
+            "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.",
+            "maxLength": 10000
           },
-          "assistantOverrides": {
-            "description": "These are the overrides for the assistant's settings and template variables specific to this customer.\nThis allows customization of the assistant's behavior for individual customers in batch calls.",
+          "sipDiversionHeader": {
+            "type": "string",
+            "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.",
+            "maxLength": 10000
+          },
+          "sbcConfiguration": {
+            "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/AssistantOverrides"
+                "$ref": "#/components/schemas/SbcConfiguration"
               }
             ]
           },
-          "number": {
+          "name": {
             "type": "string",
-            "description": "This is the number of the customer.",
-            "minLength": 3,
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
             "maxLength": 40
+          }
+        },
+        "required": [
+          "gateways"
+        ]
+      },
+      "CreateCartesiaCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "cartesia"
+            ]
           },
-          "sipUri": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the SIP URI of the customer."
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
-            "description": "This is the name of the customer. This is just for your own reference.\n\nFor SIP inbound calls, this is extracted from the `From` SIP header with format `\"Display Name\" <sip:username@domain>`.",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
             "maxLength": 40
           }
-        }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
       },
-      "SchedulePlan": {
+      "CloudflareR2BucketPlan": {
         "type": "object",
         "properties": {
-          "earliestAt": {
-            "format": "date-time",
+          "accessKeyId": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of the earliest time the call can be scheduled."
+            "description": "Cloudflare R2 Access key ID."
           },
-          "latestAt": {
-            "format": "date-time",
+          "secretAccessKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of the latest time the call can be scheduled."
+            "description": "Cloudflare R2 access key secret. This is not returned in the API."
+          },
+          "url": {
+            "type": "string",
+            "description": "Cloudflare R2 base url."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the bucket."
+          },
+          "path": {
+            "type": "string",
+            "description": "This is the path where call artifacts will be stored.\n\nUsage:\n- To store call artifacts in a specific folder, set this to the full path. Eg. \"/folder-name1/folder-name2\".\n- To store call artifacts in the root of the bucket, leave this blank.\n\n@default \"/\""
           }
         },
         "required": [
-          "earliestAt"
+          "name"
         ]
       },
-      "Call": {
+      "CreateCloudflareCredentialDTO": {
         "type": "object",
         "properties": {
-          "type": {
+          "provider": {
             "type": "string",
-            "description": "This is the type of call.",
             "enum": [
-              "inboundPhoneCall",
-              "outboundPhoneCall",
-              "webCall",
-              "vapi.websocketCall"
-            ]
+              "cloudflare"
+            ],
+            "description": "Credential provider. Only allowed value is cloudflare"
           },
-          "costs": {
-            "type": "array",
-            "description": "These are the costs of individual components of the call in USD.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TransportCost",
-                  "title": "TransportCost"
-                },
-                {
-                  "$ref": "#/components/schemas/TranscriberCost",
-                  "title": "TranscriberCost"
-                },
-                {
-                  "$ref": "#/components/schemas/ModelCost",
-                  "title": "ModelCost"
-                },
-                {
-                  "$ref": "#/components/schemas/VoiceCost",
-                  "title": "VoiceCost"
-                },
-                {
-                  "$ref": "#/components/schemas/VapiCost",
-                  "title": "VapiCost"
-                },
-                {
-                  "$ref": "#/components/schemas/VoicemailDetectionCost",
-                  "title": "VoicemailDetectionCost"
-                },
-                {
-                  "$ref": "#/components/schemas/AnalysisCost",
-                  "title": "AnalysisCost"
-                }
-              ]
-            }
+          "accountId": {
+            "type": "string",
+            "description": "Cloudflare Account Id."
           },
-          "messages": {
-            "type": "array",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/UserMessage",
-                  "title": "UserMessage"
-                },
-                {
-                  "$ref": "#/components/schemas/SystemMessage",
-                  "title": "SystemMessage"
-                },
-                {
-                  "$ref": "#/components/schemas/BotMessage",
-                  "title": "BotMessage"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolCallMessage",
-                  "title": "ToolCallMessage"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolCallResultMessage",
-                  "title": "ToolCallResultMessage"
-                }
-              ]
-            }
+          "apiKey": {
+            "type": "string",
+            "description": "Cloudflare API Key / Token."
           },
-          "phoneCallProvider": {
+          "accountEmail": {
             "type": "string",
-            "description": "This is the provider of the call.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
-            "enum": [
-              "twilio",
-              "vonage",
-              "vapi",
-              "telnyx"
+            "description": "Cloudflare Account Email."
+          },
+          "fallbackIndex": {
+            "type": "number",
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.",
+            "minimum": 1
+          },
+          "bucketPlan": {
+            "description": "This is the bucket plan that can be provided to store call artifacts in R2",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CloudflareR2BucketPlan"
+              }
             ]
           },
-          "phoneCallTransport": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "OAuth2AuthenticationPlan": {
+        "type": "object",
+        "properties": {
+          "type": {
             "type": "string",
-            "description": "This is the transport of the phone call.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
             "enum": [
-              "sip",
-              "pstn"
+              "oauth2"
             ]
           },
-          "status": {
+          "url": {
             "type": "string",
-            "description": "This is the status of the call.",
-            "enum": [
-              "scheduled",
-              "queued",
-              "ringing",
-              "in-progress",
-              "forwarding",
-              "ended"
-            ]
+            "description": "This is the OAuth2 URL."
           },
-          "endedReason": {
+          "clientId": {
+            "type": "string",
+            "description": "This is the OAuth2 client ID."
+          },
+          "clientSecret": {
+            "type": "string",
+            "description": "This is the OAuth2 client secret."
+          },
+          "scope": {
+            "type": "string",
+            "description": "This is the scope of the OAuth2 token.",
+            "maxLength": 1000
+          }
+        },
+        "required": [
+          "type",
+          "url",
+          "clientId",
+          "clientSecret"
+        ]
+      },
+      "CreateCustomLLMCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
             "type": "string",
-            "description": "This is the explanation for how the call ended.",
+            "enum": [
+              "custom-llm"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
+          },
+          "authenticationPlan": {
+            "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
+              }
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateDeepgramCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "deepgram"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "apiUrl": {
+            "type": "string",
+            "description": "This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateDeepInfraCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "deepinfra"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateDeepSeekCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "deep-seek"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateElevenLabsCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "11labs"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "GcpKey": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of the key. Most likely, this is \"service_account\"."
+          },
+          "projectId": {
+            "type": "string",
+            "description": "This is the ID of the Google Cloud project associated with this key."
+          },
+          "privateKeyId": {
+            "type": "string",
+            "description": "This is the unique identifier for the private key."
+          },
+          "privateKey": {
+            "type": "string",
+            "description": "This is the private key in PEM format.\n\nNote: This is not returned in the API."
+          },
+          "clientEmail": {
+            "type": "string",
+            "description": "This is the email address associated with the service account."
+          },
+          "clientId": {
+            "type": "string",
+            "description": "This is the unique identifier for the client."
+          },
+          "authUri": {
+            "type": "string",
+            "description": "This is the URI for the auth provider's authorization endpoint."
+          },
+          "tokenUri": {
+            "type": "string",
+            "description": "This is the URI for the auth provider's token endpoint."
+          },
+          "authProviderX509CertUrl": {
+            "type": "string",
+            "description": "This is the URL of the public x509 certificate for the auth provider."
+          },
+          "clientX509CertUrl": {
+            "type": "string",
+            "description": "This is the URL of the public x509 certificate for the client."
+          },
+          "universeDomain": {
+            "type": "string",
+            "description": "This is the domain associated with the universe this service account belongs to."
+          }
+        },
+        "required": [
+          "type",
+          "projectId",
+          "privateKeyId",
+          "privateKey",
+          "clientEmail",
+          "clientId",
+          "authUri",
+          "tokenUri",
+          "authProviderX509CertUrl",
+          "clientX509CertUrl",
+          "universeDomain"
+        ]
+      },
+      "BucketPlan": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of the bucket."
+          },
+          "region": {
+            "type": "string",
+            "description": "This is the region of the bucket.\n\nUsage:\n- If `credential.type` is `aws`, then this is required.\n- If `credential.type` is `gcp`, then this is optional since GCP allows buckets to be accessed without a region but region is required for data residency requirements. Read here: https://cloud.google.com/storage/docs/request-endpoints\n\nThis overrides the `credential.region` field if it is provided."
+          },
+          "path": {
+            "type": "string",
+            "description": "This is the path where call artifacts will be stored.\n\nUsage:\n- To store call artifacts in a specific folder, set this to the full path. Eg. \"/folder-name1/folder-name2\".\n- To store call artifacts in the root of the bucket, leave this blank.\n\n@default \"/\""
+          },
+          "hmacAccessKey": {
+            "type": "string",
+            "description": "This is the HMAC access key offered by GCP for interoperability with S3 clients. Here is the guide on how to create: https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console\n\nUsage:\n- If `credential.type` is `gcp`, then this is required.\n- If `credential.type` is `aws`, then this is not required since credential.awsAccessKeyId is used instead."
+          },
+          "hmacSecret": {
+            "type": "string",
+            "description": "This is the secret for the HMAC access key. Here is the guide on how to create: https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console\n\nUsage:\n- If `credential.type` is `gcp`, then this is required.\n- If `credential.type` is `aws`, then this is not required since credential.awsSecretAccessKey is used instead.\n\nNote: This is not returned in the API."
+          }
+        },
+        "required": [
+          "name"
+        ]
+      },
+      "CreateGcpCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "gcp"
+            ]
+          },
+          "fallbackIndex": {
+            "type": "number",
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.",
+            "minimum": 1
+          },
+          "gcpKey": {
+            "description": "This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details/<service-account-id>/keys.\n\nThe schema is identical to the JSON that GCP outputs.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/GcpKey"
+              }
+            ]
+          },
+          "region": {
+            "type": "string",
+            "description": "This is the region of the GCP resource.",
+            "maxLength": 40
+          },
+          "bucketPlan": {
+            "$ref": "#/components/schemas/BucketPlan"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "gcpKey"
+        ]
+      },
+      "CreateGladiaCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "gladia"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateGoHighLevelCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "gohighlevel"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateGroqCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "groq"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateLangfuseCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "langfuse"
+            ]
+          },
+          "publicKey": {
+            "type": "string",
+            "description": "The public key for Langfuse project. Eg: pk-lf-..."
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API."
+          },
+          "apiUrl": {
+            "type": "string",
+            "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "publicKey",
+          "apiKey",
+          "apiUrl"
+        ]
+      },
+      "CreateLmntCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "lmnt"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateMakeCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "make"
+            ]
+          },
+          "teamId": {
+            "type": "string",
+            "description": "Team ID"
+          },
+          "region": {
+            "type": "string",
+            "description": "Region of your application. For example: eu1, eu2, us1, us2"
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "teamId",
+          "region",
+          "apiKey"
+        ]
+      },
+      "CreateOpenAICredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "openai"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateOpenRouterCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "openrouter"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreatePerplexityAICredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "perplexity-ai"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreatePlayHTCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "playht"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "userId": {
+            "type": "string"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey",
+          "userId"
+        ]
+      },
+      "CreateRimeAICredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "rime-ai"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateRunpodCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "runpod"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateS3CredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "s3"
+            ],
+            "description": "Credential provider. Only allowed value is s3"
+          },
+          "awsAccessKeyId": {
+            "type": "string",
+            "description": "AWS access key ID."
+          },
+          "awsSecretAccessKey": {
+            "type": "string",
+            "description": "AWS access key secret. This is not returned in the API."
+          },
+          "region": {
+            "type": "string",
+            "description": "AWS region in which the S3 bucket is located."
+          },
+          "s3BucketName": {
+            "type": "string",
+            "description": "AWS S3 bucket name."
+          },
+          "s3PathPrefix": {
+            "type": "string",
+            "description": "The path prefix for the uploaded recording. Ex. \"recordings/\""
+          },
+          "fallbackIndex": {
+            "type": "number",
+            "minimum": 1,
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "awsAccessKeyId",
+          "awsSecretAccessKey",
+          "region",
+          "s3BucketName",
+          "s3PathPrefix"
+        ]
+      },
+      "SupabaseBucketPlan": {
+        "type": "object",
+        "properties": {
+          "region": {
+            "type": "string",
+            "description": "This is the S3 Region. It should look like us-east-1\nIt should be one of the supabase regions defined in the SUPABASE_REGION enum\nCheck https://supabase.com/docs/guides/platform/regions for up to date regions",
+            "enum": [
+              "us-west-1",
+              "us-east-1",
+              "us-east-2",
+              "ca-central-1",
+              "eu-west-1",
+              "eu-west-2",
+              "eu-west-3",
+              "eu-central-1",
+              "eu-central-2",
+              "eu-north-1",
+              "ap-south-1",
+              "ap-southeast-1",
+              "ap-northeast-1",
+              "ap-northeast-2",
+              "ap-southeast-2",
+              "sa-east-1"
+            ]
+          },
+          "url": {
+            "type": "string",
+            "description": "This is the S3 compatible URL for Supabase S3\nThis should look like https://<project-ID>.supabase.co/storage/v1/s3"
+          },
+          "accessKeyId": {
+            "type": "string",
+            "description": "This is the Supabase S3 Access Key ID.\nThe user creates this in the Supabase project Storage settings"
+          },
+          "secretAccessKey": {
+            "type": "string",
+            "description": "This is the Supabase S3 Secret Access Key.\nThe user creates this in the Supabase project Storage settings along with the access key id"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the Supabase S3 Bucket Name.\nThe user must create this in Supabase under Storage > Buckets\nA bucket that does not exist will not be checked now, but file uploads will fail"
+          },
+          "path": {
+            "type": "string",
+            "description": "This is the Supabase S3 Bucket Folder Path.\nThe user can create this in Supabase under Storage > Buckets\nA path that does not exist will not be checked now, but file uploads will fail\nA Path is like a folder in the bucket\nEg. If the bucket is called \"my-bucket\" and the path is \"my-folder\", the full path is \"my-bucket/my-folder\""
+          }
+        },
+        "required": [
+          "region",
+          "url",
+          "accessKeyId",
+          "secretAccessKey",
+          "name"
+        ]
+      },
+      "CreateSupabaseCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "supabase"
+            ],
+            "description": "This is for supabase storage."
+          },
+          "fallbackIndex": {
+            "type": "number",
+            "minimum": 1,
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order."
+          },
+          "bucketPlan": {
+            "$ref": "#/components/schemas/SupabaseBucketPlan"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "CreateSmallestAICredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "smallest-ai"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateTavusCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "tavus"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateTogetherAICredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "together-ai"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateTwilioCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "twilio"
+            ]
+          },
+          "authToken": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "apiSecret": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "accountSid": {
+            "type": "string"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "accountSid"
+        ]
+      },
+      "CreateVonageCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "vonage"
+            ]
+          },
+          "apiSecret": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "apiKey": {
+            "type": "string"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiSecret",
+          "apiKey"
+        ]
+      },
+      "CreateWebhookCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "webhook"
+            ]
+          },
+          "authenticationPlan": {
+            "description": "This is the authentication plan. Supports OAuth2 RFC 6749 and HMAC signing.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
+              },
+              {
+                "$ref": "#/components/schemas/HMACAuthenticationPlan"
+              }
+            ],
+            "discriminator": {
+              "propertyName": "type",
+              "mapping": {
+                "oauth2": "#/components/schemas/OAuth2AuthenticationPlan",
+                "hmac": "#/components/schemas/HMACAuthenticationPlan"
+              }
+            }
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "authenticationPlan"
+        ]
+      },
+      "CreateXAiCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "description": "This is the api key for Grok in XAi's console. Get it from here: https://console.x.ai",
+            "enum": [
+              "xai"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateGoogleCalendarOAuth2ClientCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "google.calendar.oauth2-client"
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "CreateGoogleCalendarOAuth2AuthorizationCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "google.calendar.oauth2-authorization"
+            ]
+          },
+          "authorizationId": {
+            "type": "string",
+            "description": "The authorization ID for the OAuth2 authorization"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "authorizationId"
+        ]
+      },
+      "CreateGoogleSheetsOAuth2AuthorizationCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "google.sheets.oauth2-authorization"
+            ]
+          },
+          "authorizationId": {
+            "type": "string",
+            "description": "The authorization ID for the OAuth2 authorization"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "authorizationId"
+        ]
+      },
+      "CreateSlackOAuth2AuthorizationCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "slack.oauth2-authorization"
+            ]
+          },
+          "authorizationId": {
+            "type": "string",
+            "description": "The authorization ID for the OAuth2 authorization"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "authorizationId"
+        ]
+      },
+      "CreateMinimaxCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "minimax"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "groupId": {
+            "type": "string",
+            "description": "This is the Minimax Group ID."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey",
+          "groupId"
+        ]
+      },
+      "TransferHookAction": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of action - must be \"transfer\"",
+            "enum": [
+              "transfer"
+            ]
+          },
+          "destination": {
+            "description": "This is the destination details for the transfer - can be a phone number or SIP URI",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "FunctionCallHookAction": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "function"
+            ],
+            "description": "The type of tool. \"function\" for Function tool."
+          },
+          "async": {
+            "type": "boolean",
+            "example": false,
+            "description": "This determines if the tool is async.\n\n  If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\n  If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\n  Defaults to synchronous (`false`)."
+          },
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "function": {
+            "description": "This is the function definition of the tool.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/OpenAIFunction"
+              }
+            ]
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "SayHookAction": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of action - must be \"say\"",
+            "enum": [
+              "say"
+            ]
+          },
+          "prompt": {
+            "description": "This is the prompt for the assistant to generate a response based on existing conversation.\nCan be a string or an array of chat messages.",
+            "oneOf": [
+              {
+                "type": "string",
+                "title": "String"
+              },
+              {
+                "type": "array",
+                "items": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/SystemMessage",
+                      "title": "SystemMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/UserMessage",
+                      "title": "UserMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/AssistantMessage",
+                      "title": "AssistantMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/ToolMessage",
+                      "title": "ToolMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/DeveloperMessage",
+                      "title": "DeveloperMessage"
+                    }
+                  ]
+                },
+                "title": "MessageArray"
+              }
+            ],
+            "examples": [
+              "Ask the user if they're still in the call",
+              [
+                {
+                  "role": "system",
+                  "content": "You are a helpful assistant, and would like to know if the user is still in the call based on the conversation history in {{transcript}}"
+                }
+              ]
+            ]
+          },
+          "exact": {
+            "type": "object",
+            "description": "This is the message to say"
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CallHookFilter": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of filter - currently only \"oneOf\" is supported",
+            "enum": [
+              "oneOf"
+            ],
+            "maxLength": 1000
+          },
+          "key": {
+            "type": "string",
+            "description": "This is the key to filter on (e.g. \"call.endedReason\")",
+            "maxLength": 1000
+          },
+          "oneOf": {
+            "description": "This is the array of possible values to match against",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "maxLength": 1000
+            }
+          }
+        },
+        "required": [
+          "type",
+          "key",
+          "oneOf"
+        ]
+      },
+      "CallHookCallEnding": {
+        "type": "object",
+        "properties": {
+          "on": {
+            "type": "string",
+            "description": "This is the event that triggers this hook",
+            "enum": [
+              "call.ending"
+            ],
+            "maxLength": 1000
+          },
+          "do": {
+            "type": "array",
+            "description": "This is the set of actions to perform when the hook triggers",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolCallHookAction",
+                  "title": "ToolCallHookAction"
+                }
+              ]
+            }
+          },
+          "filters": {
+            "description": "This is the set of filters that must match for the hook to trigger",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/CallHookFilter"
+            }
+          }
+        },
+        "required": [
+          "on",
+          "do"
+        ]
+      },
+      "CallHookAssistantSpeechInterrupted": {
+        "type": "object",
+        "properties": {
+          "on": {
+            "type": "string",
+            "description": "This is the event that triggers this hook",
+            "enum": [
+              "assistant.speech.interrupted"
+            ],
+            "maxLength": 1000
+          },
+          "do": {
+            "type": "array",
+            "description": "This is the set of actions to perform when the hook triggers",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/SayHookAction",
+                  "title": "SayHookAction"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallHookAction",
+                  "title": "ToolCallHookAction"
+                }
+              ]
+            }
+          }
+        },
+        "required": [
+          "on",
+          "do"
+        ]
+      },
+      "CallHookCustomerSpeechInterrupted": {
+        "type": "object",
+        "properties": {
+          "on": {
+            "type": "string",
+            "description": "This is the event that triggers this hook",
+            "enum": [
+              "customer.speech.interrupted"
+            ],
+            "maxLength": 1000
+          },
+          "do": {
+            "type": "array",
+            "description": "This is the set of actions to perform when the hook triggers",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/SayHookAction",
+                  "title": "SayHookAction"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallHookAction",
+                  "title": "ToolCallHookAction"
+                }
+              ]
+            }
+          }
+        },
+        "required": [
+          "on",
+          "do"
+        ]
+      },
+      "ToolCallHookAction": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of action - must be \"tool\"",
+            "enum": [
+              "tool"
+            ]
+          },
+          "tool": {
+            "description": "This is the tool to call. To use an existing tool, send `toolId` instead.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                "title": "ApiRequestTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateBashToolDTO",
+                "title": "BashTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateComputerToolDTO",
+                "title": "ComputerTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                "title": "DtmfTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                "title": "EndCallTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                "title": "FunctionTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                "title": "GoHighLevelCalendarAvailabilityTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                "title": "GoHighLevelCalendarEventCreateTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                "title": "GoHighLevelContactCreateTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                "title": "GoHighLevelContactGetTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                "title": "GoogleCalendarCheckAvailabilityTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                "title": "GoogleCalendarCreateEventTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                "title": "GoogleSheetsRowAppendTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateMcpToolDTO",
+                "title": "McpTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateQueryToolDTO",
+                "title": "QueryTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                "title": "SlackSendMessageTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateSmsToolDTO",
+                "title": "SmsTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                "title": "TextEditorTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                "title": "TransferCallTool"
+              }
+            ]
+          },
+          "toolId": {
+            "type": "string",
+            "description": "This is the tool to call. To use a transient tool, send `tool` instead."
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "CustomerSpeechTimeoutOptions": {
+        "type": "object",
+        "properties": {
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is the timeout in seconds before action is triggered.\nThe clock starts when the assistant finishes speaking and remains active until the user speaks.\n\n@default 7.5",
+            "minimum": 1,
+            "maximum": 1000
+          },
+          "triggerMaxCount": {
+            "type": "number",
+            "description": "This is the maximum number of times the hook will trigger in a call.\n\n@default 3",
+            "minimum": 1,
+            "maximum": 10
+          },
+          "triggerResetMode": {
+            "type": "object",
+            "description": "This is whether the counter for hook trigger resets the user speaks.\n\n@default never"
+          }
+        },
+        "required": [
+          "timeoutSeconds"
+        ]
+      },
+      "CallHookCustomerSpeechTimeout": {
+        "type": "object",
+        "properties": {
+          "on": {
+            "type": "string",
+            "description": "Must be either \"customer.speech.timeout\" or match the pattern \"customer.speech.timeout[property=value]\"",
+            "maxLength": 1000
+          },
+          "do": {
+            "type": "array",
+            "description": "This is the set of actions to perform when the hook triggers",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/SayHookAction",
+                  "title": "SayHookAction"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallHookAction",
+                  "title": "ToolCallHookAction"
+                }
+              ]
+            }
+          },
+          "options": {
+            "description": "This is the set of filters that must match for the hook to trigger",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CustomerSpeechTimeoutOptions"
+              }
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the hook, it can be set by the user to identify the hook.\nIf no name is provided, the hook will be auto generated as UUID.\n\n@default UUID",
+            "maxLength": 1000
+          }
+        },
+        "required": [
+          "on",
+          "do"
+        ]
+      },
+      "VoicemailDetectionBackoffPlan": {
+        "type": "object",
+        "properties": {
+          "startAtSeconds": {
+            "type": "number",
+            "description": "This is the number of seconds to wait before starting the first retry attempt.",
+            "minimum": 0,
+            "default": 5
+          },
+          "frequencySeconds": {
+            "type": "number",
+            "description": "This is the interval in seconds between retry attempts.",
+            "minimum": 2.5,
+            "default": 5
+          },
+          "maxRetries": {
+            "type": "number",
+            "description": "This is the maximum number of retry attempts before giving up.",
+            "minimum": 1,
+            "maximum": 10,
+            "default": 6
+          }
+        }
+      },
+      "GoogleVoicemailDetectionPlan": {
+        "type": "object",
+        "properties": {
+          "beepMaxAwaitSeconds": {
+            "type": "number",
+            "description": "This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message\n\n- If we detect a voicemail beep before this, we will speak the message at that point.\n\n- Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case.\n\n@default 30\n@min 0\n@max 60",
+            "minimum": 0,
+            "maximum": 30,
+            "default": 30
+          },
+          "provider": {
+            "type": "string",
+            "description": "This is the provider to use for voicemail detection.",
+            "enum": [
+              "google"
+            ]
+          },
+          "backoffPlan": {
+            "description": "This is the backoff plan for the voicemail detection.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/VoicemailDetectionBackoffPlan"
+              }
+            ]
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "OpenAIVoicemailDetectionPlan": {
+        "type": "object",
+        "properties": {
+          "beepMaxAwaitSeconds": {
+            "type": "number",
+            "description": "This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message\n\n- If we detect a voicemail beep before this, we will speak the message at that point.\n\n- Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case.\n\n@default 30\n@min 0\n@max 60",
+            "minimum": 0,
+            "maximum": 30,
+            "default": 30
+          },
+          "provider": {
+            "type": "string",
+            "description": "This is the provider to use for voicemail detection.",
+            "enum": [
+              "openai"
+            ]
+          },
+          "backoffPlan": {
+            "description": "This is the backoff plan for the voicemail detection.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/VoicemailDetectionBackoffPlan"
+              }
+            ]
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "TwilioVoicemailDetectionPlan": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "description": "This is the provider to use for voicemail detection.",
+            "enum": [
+              "twilio"
+            ]
+          },
+          "voicemailDetectionTypes": {
+            "type": "array",
+            "description": "These are the AMD messages from Twilio that are considered as voicemail. Default is ['machine_end_beep', 'machine_end_silence'].\n\n@default {Array} ['machine_end_beep', 'machine_end_silence']",
+            "enum": [
+              "machine_start",
+              "human",
+              "fax",
+              "unknown",
+              "machine_end_beep",
+              "machine_end_silence",
+              "machine_end_other"
+            ],
+            "example": [
+              "machine_end_beep",
+              "machine_end_silence"
+            ],
+            "items": {
+              "type": "string",
+              "enum": [
+                "machine_start",
+                "human",
+                "fax",
+                "unknown",
+                "machine_end_beep",
+                "machine_end_silence",
+                "machine_end_other"
+              ]
+            }
+          },
+          "enabled": {
+            "type": "boolean",
+            "description": "This sets whether the assistant should detect voicemail. Defaults to true.\n\n@default true"
+          },
+          "machineDetectionTimeout": {
+            "type": "number",
+            "description": "The number of seconds that Twilio should attempt to perform answering machine detection before timing out and returning AnsweredBy as unknown. Default is 30 seconds.\n\nIncreasing this value will provide the engine more time to make a determination. This can be useful when DetectMessageEnd is provided in the MachineDetection parameter and there is an expectation of long answering machine greetings that can exceed 30 seconds.\n\nDecreasing this value will reduce the amount of time the engine has to make a determination. This can be particularly useful when the Enable option is provided in the MachineDetection parameter and you want to limit the time for initial detection.\n\nCheck the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info.\n\n@default 30",
+            "minimum": 3,
+            "maximum": 59
+          },
+          "machineDetectionSpeechThreshold": {
+            "type": "number",
+            "description": "The number of milliseconds that is used as the measuring stick for the length of the speech activity. Durations lower than this value will be interpreted as a human, longer as a machine. Default is 2400 milliseconds.\n\nIncreasing this value will reduce the chance of a False Machine (detected machine, actually human) for a long human greeting (e.g., a business greeting) but increase the time it takes to detect a machine.\n\nDecreasing this value will reduce the chances of a False Human (detected human, actually machine) for short voicemail greetings. The value of this parameter may need to be reduced by more than 1000ms to detect very short voicemail greetings. A reduction of that significance can result in increased False Machine detections. Adjusting the MachineDetectionSpeechEndThreshold is likely the better approach for short voicemails. Decreasing MachineDetectionSpeechThreshold will also reduce the time it takes to detect a machine.\n\nCheck the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info.\n\n@default 2400",
+            "minimum": 1000,
+            "maximum": 6000
+          },
+          "machineDetectionSpeechEndThreshold": {
+            "type": "number",
+            "description": "The number of milliseconds of silence after speech activity at which point the speech activity is considered complete. Default is 1200 milliseconds.\n\nIncreasing this value will typically be used to better address the short voicemail greeting scenarios. For short voicemails, there is typically 1000-2000ms of audio followed by 1200-2400ms of silence and then additional audio before the beep. Increasing the MachineDetectionSpeechEndThreshold to ~2500ms will treat the 1200-2400ms of silence as a gap in the greeting but not the end of the greeting and will result in a machine detection. The downsides of such a change include:\n- Increasing the delay for human detection by the amount you increase this parameter, e.g., a change of 1200ms to 2500ms increases human detection delay by 1300ms.\n- Cases where a human has two utterances separated by a period of silence (e.g. a \"Hello\", then 2000ms of silence, and another \"Hello\") may be interpreted as a machine.\n\nDecreasing this value will result in faster human detection. The consequence is that it can lead to increased False Human (detected human, actually machine) detections because a silence gap in a voicemail greeting (not necessarily just in short voicemail scenarios) can be incorrectly interpreted as the end of speech.\n\nCheck the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info.\n\n@default 1200",
+            "minimum": 500,
+            "maximum": 5000
+          },
+          "machineDetectionSilenceTimeout": {
+            "type": "number",
+            "description": "The number of milliseconds of initial silence after which an unknown AnsweredBy result will be returned. Default is 5000 milliseconds.\n\nIncreasing this value will result in waiting for a longer period of initial silence before returning an 'unknown' AMD result.\n\nDecreasing this value will result in waiting for a shorter period of initial silence before returning an 'unknown' AMD result.\n\nCheck the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info.\n\n@default 5000",
+            "minimum": 2000,
+            "maximum": 10000
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "VapiVoicemailDetectionPlan": {
+        "type": "object",
+        "properties": {
+          "beepMaxAwaitSeconds": {
+            "type": "number",
+            "description": "This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message\n\n- If we detect a voicemail beep before this, we will speak the message at that point.\n\n- Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case.\n\n@default 30\n@min 0\n@max 60",
+            "minimum": 0,
+            "maximum": 30,
+            "default": 30
+          },
+          "provider": {
+            "type": "string",
+            "description": "This is the provider to use for voicemail detection.",
+            "enum": [
+              "vapi"
+            ]
+          },
+          "backoffPlan": {
+            "description": "This is the backoff plan for the voicemail detection.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/VoicemailDetectionBackoffPlan"
+              }
+            ]
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "CreateAssistantDTO": {
+        "type": "object",
+        "properties": {
+          "transcriber": {
+            "description": "These are the options for the assistant's transcriber.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AssemblyAITranscriber",
+                "title": "AssemblyAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/AzureSpeechTranscriber",
+                "title": "AzureSpeechTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CustomTranscriber",
+                "title": "CustomTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramTranscriber",
+                "title": "DeepgramTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsTranscriber",
+                "title": "ElevenLabsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GladiaTranscriber",
+                "title": "GladiaTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleTranscriber",
+                "title": "GoogleTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
+                "title": "SpeechmaticsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/TalkscriberTranscriber",
+                "title": "TalkscriberTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAITranscriber",
+                "title": "OpenAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaTranscriber",
+                "title": "CartesiaTranscriber"
+              }
+            ]
+          },
+          "model": {
+            "description": "These are the options for the assistant's LLM.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AnthropicModel",
+                "title": "Anthropic"
+              },
+              {
+                "$ref": "#/components/schemas/AnyscaleModel",
+                "title": "Anyscale"
+              },
+              {
+                "$ref": "#/components/schemas/CerebrasModel",
+                "title": "Cerebras"
+              },
+              {
+                "$ref": "#/components/schemas/CustomLLMModel",
+                "title": "CustomLLM"
+              },
+              {
+                "$ref": "#/components/schemas/DeepInfraModel",
+                "title": "DeepInfra"
+              },
+              {
+                "$ref": "#/components/schemas/DeepSeekModel",
+                "title": "DeepSeek"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleModel",
+                "title": "Google"
+              },
+              {
+                "$ref": "#/components/schemas/GroqModel",
+                "title": "Groq"
+              },
+              {
+                "$ref": "#/components/schemas/InflectionAIModel",
+                "title": "InflectionAI"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIModel",
+                "title": "OpenAI"
+              },
+              {
+                "$ref": "#/components/schemas/OpenRouterModel",
+                "title": "OpenRouter"
+              },
+              {
+                "$ref": "#/components/schemas/PerplexityAIModel",
+                "title": "PerplexityAI"
+              },
+              {
+                "$ref": "#/components/schemas/TogetherAIModel",
+                "title": "Together"
+              },
+              {
+                "$ref": "#/components/schemas/XaiModel",
+                "title": "XAI"
+              }
+            ]
+          },
+          "voice": {
+            "description": "These are the options for the assistant's voice.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AzureVoice",
+                "title": "AzureVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaVoice",
+                "title": "CartesiaVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CustomVoice",
+                "title": "CustomVoice"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramVoice",
+                "title": "DeepgramVoice"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsVoice",
+                "title": "ElevenLabsVoice"
+              },
+              {
+                "$ref": "#/components/schemas/HumeVoice",
+                "title": "HumeVoice"
+              },
+              {
+                "$ref": "#/components/schemas/LMNTVoice",
+                "title": "LMNTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/NeuphonicVoice",
+                "title": "NeuphonicVoice"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoice",
+                "title": "OpenAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/PlayHTVoice",
+                "title": "PlayHTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/RimeAIVoice",
+                "title": "RimeAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SmallestAIVoice",
+                "title": "SmallestAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/TavusVoice",
+                "title": "TavusVoice"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoice",
+                "title": "VapiVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SesameVoice",
+                "title": "SesameVoice"
+              },
+              {
+                "$ref": "#/components/schemas/InworldVoice",
+                "title": "InworldVoice"
+              },
+              {
+                "$ref": "#/components/schemas/MinimaxVoice",
+                "title": "MinimaxVoice"
+              }
+            ]
+          },
+          "firstMessage": {
+            "type": "string",
+            "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.",
+            "example": "Hello! How can I help you today?"
+          },
+          "firstMessageInterruptionsEnabled": {
+            "type": "boolean",
+            "default": false
+          },
+          "firstMessageMode": {
+            "type": "string",
+            "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'",
+            "enum": [
+              "assistant-speaks-first",
+              "assistant-speaks-first-with-model-generated-message",
+              "assistant-waits-for-user"
+            ],
+            "example": "assistant-speaks-first"
+          },
+          "voicemailDetection": {
+            "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan",
+                "title": "Google"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan",
+                "title": "OpenAI"
+              },
+              {
+                "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan",
+                "title": "Twilio"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoicemailDetectionPlan",
+                "title": "Vapi"
+              }
+            ]
+          },
+          "clientMessages": {
+            "type": "array",
+            "enum": [
+              "conversation-update",
+              "function-call",
+              "function-call-result",
+              "hang",
+              "language-changed",
+              "metadata",
+              "model-output",
+              "speech-update",
+              "status-update",
+              "transcript",
+              "tool-calls",
+              "tool-calls-result",
+              "tool.completed",
+              "transfer-update",
+              "user-interrupted",
+              "voice-input",
+              "workflow.node.started"
+            ],
+            "example": [
+              "conversation-update",
+              "function-call",
+              "hang",
+              "model-output",
+              "speech-update",
+              "status-update",
+              "transfer-update",
+              "transcript",
+              "tool-calls",
+              "user-interrupted",
+              "voice-input",
+              "workflow.node.started"
+            ],
+            "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.",
+            "items": {
+              "type": "string",
+              "enum": [
+                "conversation-update",
+                "function-call",
+                "function-call-result",
+                "hang",
+                "language-changed",
+                "metadata",
+                "model-output",
+                "speech-update",
+                "status-update",
+                "transcript",
+                "tool-calls",
+                "tool-calls-result",
+                "tool.completed",
+                "transfer-update",
+                "user-interrupted",
+                "voice-input",
+                "workflow.node.started"
+              ]
+            }
+          },
+          "serverMessages": {
+            "type": "array",
+            "enum": [
+              "conversation-update",
+              "end-of-call-report",
+              "function-call",
+              "hang",
+              "language-changed",
+              "language-change-detected",
+              "model-output",
+              "phone-call-control",
+              "speech-update",
+              "status-update",
+              "transcript",
+              "transcript[transcriptType=\"final\"]",
+              "tool-calls",
+              "transfer-destination-request",
+              "transfer-update",
+              "user-interrupted",
+              "voice-input",
+              "chat.created",
+              "chat.deleted",
+              "session.created",
+              "session.updated",
+              "session.deleted"
+            ],
+            "example": [
+              "conversation-update",
+              "end-of-call-report",
+              "function-call",
+              "hang",
+              "speech-update",
+              "status-update",
+              "tool-calls",
+              "transfer-destination-request",
+              "user-interrupted"
+            ],
+            "description": "These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema.",
+            "items": {
+              "type": "string",
+              "enum": [
+                "conversation-update",
+                "end-of-call-report",
+                "function-call",
+                "hang",
+                "language-changed",
+                "language-change-detected",
+                "model-output",
+                "phone-call-control",
+                "speech-update",
+                "status-update",
+                "transcript",
+                "transcript[transcriptType=\"final\"]",
+                "tool-calls",
+                "transfer-destination-request",
+                "transfer-update",
+                "user-interrupted",
+                "voice-input",
+                "chat.created",
+                "chat.deleted",
+                "session.created",
+                "session.updated",
+                "session.deleted"
+              ]
+            }
+          },
+          "maxDurationSeconds": {
+            "type": "number",
+            "description": "This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended.\n\n@default 600 (10 minutes)",
+            "minimum": 10,
+            "maximum": 43200,
+            "example": 600
+          },
+          "backgroundSound": {
+            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
+            "oneOf": [
+              {
+                "type": "enum",
+                "enum": [
+                  "off",
+                  "office"
+                ],
+                "example": "office"
+              },
+              {
+                "type": "string",
+                "format": "uri",
+                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
+              }
+            ]
+          },
+          "modelOutputInMessagesEnabled": {
+            "type": "boolean",
+            "description": "This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech.\n\nDefault `false` while in beta.\n\n@default false",
+            "example": false
+          },
+          "transportConfigurations": {
+            "type": "array",
+            "description": "These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TransportConfigurationTwilio",
+                  "title": "Twilio"
+                }
+              ]
+            }
+          },
+          "observabilityPlan": {
+            "description": "This is the plan for observability of assistant's calls.\n\nCurrently, only Langfuse is supported.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
+                "title": "Langfuse"
+              }
+            ],
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
+              }
+            ]
+          },
+          "credentials": {
+            "type": "array",
+            "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "title": "AnthropicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "title": "AnyscaleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "title": "AssemblyAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
+                  "title": "AzureCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "title": "AzureOpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "title": "ByoSipTrunkCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "title": "CartesiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "title": "CerebrasCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "title": "CloudflareCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "title": "CustomLLMCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "title": "DeepgramCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "title": "DeepInfraCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "title": "DeepSeekCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "title": "ElevenLabsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
+                  "title": "GcpCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "title": "GladiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "title": "GhlCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "title": "GoogleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
+                  "title": "GroqCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
+                  "title": "HumeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "title": "InflectionAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "title": "LangfuseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
+                  "title": "LmntCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
+                  "title": "MakeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
+                  "title": "MistralCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "title": "NeuphonicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "title": "OpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "title": "OpenRouterCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "title": "PerplexityAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "title": "PlayHTCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "title": "RimeAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "title": "RunpodCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
+                  "title": "S3Credential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "title": "SmallestAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "title": "SpeechmaticsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "title": "SupabaseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
+                  "title": "TavusCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "title": "TogetherAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "title": "TrieveCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "title": "TwilioCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
+                  "title": "VonageCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "title": "WebhookCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
+                  "title": "XAiCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "title": "GoogleCalendarOAuth2ClientCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "title": "SlackOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "title": "GoHighLevelMCPCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInworldCredentialDTO",
+                  "title": "InworldCredential"
+                }
+              ],
+              "discriminator": {
+                "propertyName": "provider",
+                "mapping": {
+                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
+                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
+                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
+                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
+                  "make": "#/components/schemas/CreateMakeCredentialDTO",
+                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "s3": "#/components/schemas/CreateS3CredentialDTO",
+                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
+                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
+                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
+                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
+                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
+                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "inworld": "#/components/schemas/CreateInworldCredentialDTO",
+                  "minimax": "#/components/schemas/CreateMinimaxCredentialDTO"
+                }
+              }
+            }
+          },
+          "hooks": {
+            "type": "array",
+            "description": "This is a set of actions that will be performed on certain events.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CallHookCallEnding",
+                  "title": "CallHookCallEnding"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookAssistantSpeechInterrupted",
+                  "title": "CallHookAssistantSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechInterrupted",
+                  "title": "CallHookCustomerSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechTimeout",
+                  "title": "CallHookCustomerSpeechTimeout"
+                }
+              ]
+            }
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.",
+            "maxLength": 40
+          },
+          "voicemailMessage": {
+            "type": "string",
+            "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.",
+            "maxLength": 1000
+          },
+          "endCallMessage": {
+            "type": "string",
+            "description": "This is the message that the assistant will say if it ends the call.\n\nIf unspecified, it will hang up without saying anything.",
+            "maxLength": 1000
+          },
+          "endCallPhrases": {
+            "description": "This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "maxLength": 140,
+              "minLength": 2
+            }
+          },
+          "compliancePlan": {
+            "$ref": "#/components/schemas/CompliancePlan"
+          },
+          "metadata": {
+            "type": "object",
+            "description": "This is for metadata you want to store on the assistant."
+          },
+          "backgroundSpeechDenoisingPlan": {
+            "description": "This enables filtering of noise and background speech while the user is talking.\n\nFeatures:\n- Smart denoising using Krisp\n- Fourier denoising\n\nSmart denoising can be combined with or used independently of Fourier denoising.\n\nOrder of precedence:\n- Smart denoising\n- Fourier denoising",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/BackgroundSpeechDenoisingPlan"
+              }
+            ]
+          },
+          "analysisPlan": {
+            "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AnalysisPlan"
+              }
+            ]
+          },
+          "artifactPlan": {
+            "description": "This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ArtifactPlan"
+              }
+            ]
+          },
+          "startSpeakingPlan": {
+            "description": "This is the plan for when the assistant should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StartSpeakingPlan"
+              }
+            ]
+          },
+          "stopSpeakingPlan": {
+            "description": "This is the plan for when assistant should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StopSpeakingPlan"
+              }
+            ]
+          },
+          "monitorPlan": {
+            "description": "This is the plan for real-time monitoring of the assistant's calls.\n\nUsage:\n- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/MonitorPlan"
+              }
+            ]
+          },
+          "credentialIds": {
+            "description": "These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "keypadInputPlan": {
+            "$ref": "#/components/schemas/KeypadInputPlan"
+          }
+        }
+      },
+      "AssistantOverrides": {
+        "type": "object",
+        "properties": {
+          "transcriber": {
+            "description": "These are the options for the assistant's transcriber.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AssemblyAITranscriber",
+                "title": "AssemblyAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/AzureSpeechTranscriber",
+                "title": "AzureSpeechTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CustomTranscriber",
+                "title": "CustomTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramTranscriber",
+                "title": "DeepgramTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsTranscriber",
+                "title": "ElevenLabsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GladiaTranscriber",
+                "title": "GladiaTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleTranscriber",
+                "title": "GoogleTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
+                "title": "SpeechmaticsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/TalkscriberTranscriber",
+                "title": "TalkscriberTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAITranscriber",
+                "title": "OpenAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaTranscriber",
+                "title": "CartesiaTranscriber"
+              }
+            ]
+          },
+          "model": {
+            "description": "These are the options for the assistant's LLM.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AnthropicModel",
+                "title": "Anthropic"
+              },
+              {
+                "$ref": "#/components/schemas/AnyscaleModel",
+                "title": "Anyscale"
+              },
+              {
+                "$ref": "#/components/schemas/CerebrasModel",
+                "title": "Cerebras"
+              },
+              {
+                "$ref": "#/components/schemas/CustomLLMModel",
+                "title": "CustomLLM"
+              },
+              {
+                "$ref": "#/components/schemas/DeepInfraModel",
+                "title": "DeepInfra"
+              },
+              {
+                "$ref": "#/components/schemas/DeepSeekModel",
+                "title": "DeepSeek"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleModel",
+                "title": "Google"
+              },
+              {
+                "$ref": "#/components/schemas/GroqModel",
+                "title": "Groq"
+              },
+              {
+                "$ref": "#/components/schemas/InflectionAIModel",
+                "title": "InflectionAI"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIModel",
+                "title": "OpenAI"
+              },
+              {
+                "$ref": "#/components/schemas/OpenRouterModel",
+                "title": "OpenRouter"
+              },
+              {
+                "$ref": "#/components/schemas/PerplexityAIModel",
+                "title": "PerplexityAI"
+              },
+              {
+                "$ref": "#/components/schemas/TogetherAIModel",
+                "title": "Together"
+              },
+              {
+                "$ref": "#/components/schemas/XaiModel",
+                "title": "XAI"
+              }
+            ]
+          },
+          "voice": {
+            "description": "These are the options for the assistant's voice.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AzureVoice",
+                "title": "AzureVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaVoice",
+                "title": "CartesiaVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CustomVoice",
+                "title": "CustomVoice"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramVoice",
+                "title": "DeepgramVoice"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsVoice",
+                "title": "ElevenLabsVoice"
+              },
+              {
+                "$ref": "#/components/schemas/HumeVoice",
+                "title": "HumeVoice"
+              },
+              {
+                "$ref": "#/components/schemas/LMNTVoice",
+                "title": "LMNTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/NeuphonicVoice",
+                "title": "NeuphonicVoice"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoice",
+                "title": "OpenAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/PlayHTVoice",
+                "title": "PlayHTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/RimeAIVoice",
+                "title": "RimeAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SmallestAIVoice",
+                "title": "SmallestAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/TavusVoice",
+                "title": "TavusVoice"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoice",
+                "title": "VapiVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SesameVoice",
+                "title": "SesameVoice"
+              },
+              {
+                "$ref": "#/components/schemas/InworldVoice",
+                "title": "InworldVoice"
+              },
+              {
+                "$ref": "#/components/schemas/MinimaxVoice",
+                "title": "MinimaxVoice"
+              }
+            ]
+          },
+          "firstMessage": {
+            "type": "string",
+            "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.",
+            "example": "Hello! How can I help you today?"
+          },
+          "firstMessageInterruptionsEnabled": {
+            "type": "boolean",
+            "default": false
+          },
+          "firstMessageMode": {
+            "type": "string",
+            "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'",
+            "enum": [
+              "assistant-speaks-first",
+              "assistant-speaks-first-with-model-generated-message",
+              "assistant-waits-for-user"
+            ],
+            "example": "assistant-speaks-first"
+          },
+          "voicemailDetection": {
+            "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan",
+                "title": "Google"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan",
+                "title": "OpenAI"
+              },
+              {
+                "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan",
+                "title": "Twilio"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoicemailDetectionPlan",
+                "title": "Vapi"
+              }
+            ]
+          },
+          "clientMessages": {
+            "type": "array",
+            "enum": [
+              "conversation-update",
+              "function-call",
+              "function-call-result",
+              "hang",
+              "language-changed",
+              "metadata",
+              "model-output",
+              "speech-update",
+              "status-update",
+              "transcript",
+              "tool-calls",
+              "tool-calls-result",
+              "tool.completed",
+              "transfer-update",
+              "user-interrupted",
+              "voice-input",
+              "workflow.node.started"
+            ],
+            "example": [
+              "conversation-update",
+              "function-call",
+              "hang",
+              "model-output",
+              "speech-update",
+              "status-update",
+              "transfer-update",
+              "transcript",
+              "tool-calls",
+              "user-interrupted",
+              "voice-input",
+              "workflow.node.started"
+            ],
+            "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.",
+            "items": {
+              "type": "string",
+              "enum": [
+                "conversation-update",
+                "function-call",
+                "function-call-result",
+                "hang",
+                "language-changed",
+                "metadata",
+                "model-output",
+                "speech-update",
+                "status-update",
+                "transcript",
+                "tool-calls",
+                "tool-calls-result",
+                "tool.completed",
+                "transfer-update",
+                "user-interrupted",
+                "voice-input",
+                "workflow.node.started"
+              ]
+            }
+          },
+          "serverMessages": {
+            "type": "array",
+            "enum": [
+              "conversation-update",
+              "end-of-call-report",
+              "function-call",
+              "hang",
+              "language-changed",
+              "language-change-detected",
+              "model-output",
+              "phone-call-control",
+              "speech-update",
+              "status-update",
+              "transcript",
+              "transcript[transcriptType=\"final\"]",
+              "tool-calls",
+              "transfer-destination-request",
+              "transfer-update",
+              "user-interrupted",
+              "voice-input",
+              "chat.created",
+              "chat.deleted",
+              "session.created",
+              "session.updated",
+              "session.deleted"
+            ],
+            "example": [
+              "conversation-update",
+              "end-of-call-report",
+              "function-call",
+              "hang",
+              "speech-update",
+              "status-update",
+              "tool-calls",
+              "transfer-destination-request",
+              "user-interrupted"
+            ],
+            "description": "These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema.",
+            "items": {
+              "type": "string",
+              "enum": [
+                "conversation-update",
+                "end-of-call-report",
+                "function-call",
+                "hang",
+                "language-changed",
+                "language-change-detected",
+                "model-output",
+                "phone-call-control",
+                "speech-update",
+                "status-update",
+                "transcript",
+                "transcript[transcriptType=\"final\"]",
+                "tool-calls",
+                "transfer-destination-request",
+                "transfer-update",
+                "user-interrupted",
+                "voice-input",
+                "chat.created",
+                "chat.deleted",
+                "session.created",
+                "session.updated",
+                "session.deleted"
+              ]
+            }
+          },
+          "maxDurationSeconds": {
+            "type": "number",
+            "description": "This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended.\n\n@default 600 (10 minutes)",
+            "minimum": 10,
+            "maximum": 43200,
+            "example": 600
+          },
+          "backgroundSound": {
+            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
+            "oneOf": [
+              {
+                "type": "enum",
+                "enum": [
+                  "off",
+                  "office"
+                ],
+                "example": "office"
+              },
+              {
+                "type": "string",
+                "format": "uri",
+                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
+              }
+            ]
+          },
+          "modelOutputInMessagesEnabled": {
+            "type": "boolean",
+            "description": "This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech.\n\nDefault `false` while in beta.\n\n@default false",
+            "example": false
+          },
+          "transportConfigurations": {
+            "type": "array",
+            "description": "These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TransportConfigurationTwilio",
+                  "title": "Twilio"
+                }
+              ]
+            }
+          },
+          "observabilityPlan": {
+            "description": "This is the plan for observability of assistant's calls.\n\nCurrently, only Langfuse is supported.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
+                "title": "Langfuse"
+              }
+            ],
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
+              }
+            ]
+          },
+          "credentials": {
+            "type": "array",
+            "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "title": "AnthropicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "title": "AnyscaleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "title": "AssemblyAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
+                  "title": "AzureCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "title": "AzureOpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "title": "ByoSipTrunkCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "title": "CartesiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "title": "CerebrasCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "title": "CloudflareCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "title": "CustomLLMCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "title": "DeepgramCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "title": "DeepInfraCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "title": "DeepSeekCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "title": "ElevenLabsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
+                  "title": "GcpCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "title": "GladiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "title": "GhlCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "title": "GoogleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
+                  "title": "GroqCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
+                  "title": "HumeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "title": "InflectionAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "title": "LangfuseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
+                  "title": "LmntCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
+                  "title": "MakeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
+                  "title": "MistralCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "title": "NeuphonicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "title": "OpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "title": "OpenRouterCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "title": "PerplexityAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "title": "PlayHTCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "title": "RimeAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "title": "RunpodCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
+                  "title": "S3Credential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "title": "SmallestAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "title": "SpeechmaticsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "title": "SupabaseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
+                  "title": "TavusCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "title": "TogetherAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "title": "TrieveCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "title": "TwilioCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
+                  "title": "VonageCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "title": "WebhookCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
+                  "title": "XAiCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "title": "GoogleCalendarOAuth2ClientCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "title": "SlackOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "title": "GoHighLevelMCPCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInworldCredentialDTO",
+                  "title": "InworldCredential"
+                }
+              ],
+              "discriminator": {
+                "propertyName": "provider",
+                "mapping": {
+                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
+                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
+                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
+                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
+                  "make": "#/components/schemas/CreateMakeCredentialDTO",
+                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "s3": "#/components/schemas/CreateS3CredentialDTO",
+                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
+                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
+                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
+                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
+                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
+                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "inworld": "#/components/schemas/CreateInworldCredentialDTO",
+                  "minimax": "#/components/schemas/CreateMinimaxCredentialDTO"
+                }
+              }
+            }
+          },
+          "hooks": {
+            "type": "array",
+            "description": "This is a set of actions that will be performed on certain events.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CallHookCallEnding",
+                  "title": "CallHookCallEnding"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookAssistantSpeechInterrupted",
+                  "title": "CallHookAssistantSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechInterrupted",
+                  "title": "CallHookCustomerSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechTimeout",
+                  "title": "CallHookCustomerSpeechTimeout"
+                }
+              ]
+            }
+          },
+          "variableValues": {
+            "type": "object",
+            "description": "These are values that will be used to replace the template variables in the assistant messages and other text-based fields.\nThis uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html\n\nSo for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`.\n`{{\"now\" | date: \"%b %d, %Y, %I:%M %p\", \"America/New_York\"}}` will be replaced with the current date and time in New York.\n Some VAPI reserved defaults:\n - *customer* - the customer object"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.",
+            "maxLength": 40
+          },
+          "voicemailMessage": {
+            "type": "string",
+            "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.",
+            "maxLength": 1000
+          },
+          "endCallMessage": {
+            "type": "string",
+            "description": "This is the message that the assistant will say if it ends the call.\n\nIf unspecified, it will hang up without saying anything.",
+            "maxLength": 1000
+          },
+          "endCallPhrases": {
+            "description": "This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "maxLength": 140,
+              "minLength": 2
+            }
+          },
+          "compliancePlan": {
+            "$ref": "#/components/schemas/CompliancePlan"
+          },
+          "metadata": {
+            "type": "object",
+            "description": "This is for metadata you want to store on the assistant."
+          },
+          "backgroundSpeechDenoisingPlan": {
+            "description": "This enables filtering of noise and background speech while the user is talking.\n\nFeatures:\n- Smart denoising using Krisp\n- Fourier denoising\n\nSmart denoising can be combined with or used independently of Fourier denoising.\n\nOrder of precedence:\n- Smart denoising\n- Fourier denoising",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/BackgroundSpeechDenoisingPlan"
+              }
+            ]
+          },
+          "analysisPlan": {
+            "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AnalysisPlan"
+              }
+            ]
+          },
+          "artifactPlan": {
+            "description": "This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ArtifactPlan"
+              }
+            ]
+          },
+          "startSpeakingPlan": {
+            "description": "This is the plan for when the assistant should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StartSpeakingPlan"
+              }
+            ]
+          },
+          "stopSpeakingPlan": {
+            "description": "This is the plan for when assistant should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StopSpeakingPlan"
+              }
+            ]
+          },
+          "monitorPlan": {
+            "description": "This is the plan for real-time monitoring of the assistant's calls.\n\nUsage:\n- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/MonitorPlan"
+              }
+            ]
+          },
+          "credentialIds": {
+            "description": "These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "keypadInputPlan": {
+            "$ref": "#/components/schemas/KeypadInputPlan"
+          }
+        }
+      },
+      "SquadMemberDTO": {
+        "type": "object",
+        "properties": {
+          "assistantId": {
+            "type": "string",
+            "nullable": true,
+            "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead."
+          },
+          "assistant": {
+            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "assistantOverrides": {
+            "description": "This can be used to override the assistant's settings and provide values for it's template variables.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
+            ]
+          },
+          "assistantDestinations": {
+            "description": "These are the others assistants that this assistant can transfer to.\n\nIf the assistant already has transfer call tool, these destinations are just appended to existing ones.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/TransferDestinationAssistant"
+            }
+          }
+        }
+      },
+      "CreateSquadDTO": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of the squad."
+          },
+          "members": {
+            "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/SquadMemberDTO"
+            }
+          },
+          "membersOverrides": {
+            "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
+            ]
+          }
+        },
+        "required": [
+          "members"
+        ]
+      },
+      "CreateWorkflowDTO": {
+        "type": "object",
+        "properties": {
+          "nodes": {
+            "type": "array",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ConversationNode",
+                  "title": "ConversationNode"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolNode",
+                  "title": "ToolNode"
+                }
+              ]
+            }
+          },
+          "model": {
+            "description": "This is the model for the workflow.\n\nThis can be overridden at node level using `nodes[n].model`.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/WorkflowOpenAIModel",
+                "title": "WorkflowOpenAIModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowAnthropicModel",
+                "title": "WorkflowAnthropicModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowGoogleModel",
+                "title": "WorkflowGoogleModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowCustomModel",
+                "title": "WorkflowCustomModel"
+              }
+            ]
+          },
+          "transcriber": {
+            "description": "This is the transcriber for the workflow.\n\nThis can be overridden at node level using `nodes[n].transcriber`.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AssemblyAITranscriber",
+                "title": "AssemblyAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/AzureSpeechTranscriber",
+                "title": "AzureSpeechTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CustomTranscriber",
+                "title": "CustomTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramTranscriber",
+                "title": "DeepgramTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsTranscriber",
+                "title": "ElevenLabsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GladiaTranscriber",
+                "title": "GladiaTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleTranscriber",
+                "title": "GoogleTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
+                "title": "SpeechmaticsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/TalkscriberTranscriber",
+                "title": "TalkscriberTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAITranscriber",
+                "title": "OpenAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaTranscriber",
+                "title": "CartesiaTranscriber"
+              }
+            ]
+          },
+          "voice": {
+            "description": "This is the voice for the workflow.\n\nThis can be overridden at node level using `nodes[n].voice`.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AzureVoice",
+                "title": "AzureVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaVoice",
+                "title": "CartesiaVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CustomVoice",
+                "title": "CustomVoice"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramVoice",
+                "title": "DeepgramVoice"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsVoice",
+                "title": "ElevenLabsVoice"
+              },
+              {
+                "$ref": "#/components/schemas/HumeVoice",
+                "title": "HumeVoice"
+              },
+              {
+                "$ref": "#/components/schemas/LMNTVoice",
+                "title": "LMNTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/NeuphonicVoice",
+                "title": "NeuphonicVoice"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoice",
+                "title": "OpenAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/PlayHTVoice",
+                "title": "PlayHTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/RimeAIVoice",
+                "title": "RimeAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SmallestAIVoice",
+                "title": "SmallestAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/TavusVoice",
+                "title": "TavusVoice"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoice",
+                "title": "VapiVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SesameVoice",
+                "title": "SesameVoice"
+              },
+              {
+                "$ref": "#/components/schemas/InworldVoice",
+                "title": "InworldVoice"
+              },
+              {
+                "$ref": "#/components/schemas/MinimaxVoice",
+                "title": "MinimaxVoice"
+              }
+            ]
+          },
+          "observabilityPlan": {
+            "description": "This is the plan for observability of workflow's calls.\n\nCurrently, only Langfuse is supported.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
+                "title": "Langfuse"
+              }
+            ],
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
+              }
+            ]
+          },
+          "backgroundSound": {
+            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
+            "oneOf": [
+              {
+                "type": "enum",
+                "enum": [
+                  "off",
+                  "office"
+                ],
+                "example": "office"
+              },
+              {
+                "type": "string",
+                "format": "uri",
+                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
+              }
+            ]
+          },
+          "hooks": {
+            "type": "array",
+            "description": "This is a set of actions that will be performed on certain events.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CallHookCallEnding",
+                  "title": "CallHookCallEnding"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookAssistantSpeechInterrupted",
+                  "title": "CallHookAssistantSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechInterrupted",
+                  "title": "CallHookCustomerSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechTimeout",
+                  "title": "CallHookCustomerSpeechTimeout"
+                }
+              ]
+            }
+          },
+          "credentials": {
+            "type": "array",
+            "description": "These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "title": "AnthropicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "title": "AnyscaleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "title": "AssemblyAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
+                  "title": "AzureCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "title": "AzureOpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "title": "ByoSipTrunkCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "title": "CartesiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "title": "CerebrasCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "title": "CloudflareCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "title": "CustomLLMCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "title": "DeepgramCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "title": "DeepInfraCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "title": "DeepSeekCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "title": "ElevenLabsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
+                  "title": "GcpCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "title": "GladiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "title": "GhlCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "title": "GoogleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
+                  "title": "GroqCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
+                  "title": "HumeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "title": "InflectionAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "title": "LangfuseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
+                  "title": "LmntCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
+                  "title": "MakeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
+                  "title": "MistralCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "title": "NeuphonicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "title": "OpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "title": "OpenRouterCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "title": "PerplexityAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "title": "PlayHTCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "title": "RimeAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "title": "RunpodCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
+                  "title": "S3Credential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "title": "SmallestAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "title": "SpeechmaticsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "title": "SupabaseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
+                  "title": "TavusCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "title": "TogetherAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "title": "TrieveCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "title": "TwilioCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
+                  "title": "VonageCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "title": "WebhookCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
+                  "title": "XAiCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "title": "GoogleCalendarOAuth2ClientCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "title": "SlackOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "title": "GoHighLevelMCPCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInworldCredentialDTO",
+                  "title": "InworldCredential"
+                }
+              ],
+              "discriminator": {
+                "propertyName": "provider",
+                "mapping": {
+                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
+                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
+                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
+                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
+                  "make": "#/components/schemas/CreateMakeCredentialDTO",
+                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "s3": "#/components/schemas/CreateS3CredentialDTO",
+                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
+                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
+                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
+                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
+                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
+                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "inworld": "#/components/schemas/CreateInworldCredentialDTO",
+                  "minimax": "#/components/schemas/CreateMinimaxCredentialDTO"
+                }
+              }
+            }
+          },
+          "name": {
+            "type": "string",
+            "maxLength": 80
+          },
+          "edges": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Edge"
+            }
+          },
+          "globalPrompt": {
+            "type": "string",
+            "maxLength": 5000
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. tool.server\n2. workflow.server / assistant.server\n3. phoneNumber.server\n4. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "compliancePlan": {
+            "description": "This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CompliancePlan"
+              }
+            ]
+          },
+          "analysisPlan": {
+            "description": "This is the plan for analysis of workflow's calls. Stored in `call.analysis`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AnalysisPlan"
+              }
+            ]
+          },
+          "artifactPlan": {
+            "description": "This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ArtifactPlan"
+              }
+            ]
+          },
+          "startSpeakingPlan": {
+            "description": "This is the plan for when the workflow nodes should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StartSpeakingPlan"
+              }
+            ]
+          },
+          "stopSpeakingPlan": {
+            "description": "This is the plan for when workflow nodes should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StopSpeakingPlan"
+              }
+            ]
+          },
+          "monitorPlan": {
+            "description": "This is the plan for real-time monitoring of the workflow's calls.\n\nUsage:\n- To enable live listening of the workflow's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the workflow's calls, set `monitorPlan.controlEnabled` to `true`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/MonitorPlan"
+              }
+            ]
+          },
+          "backgroundSpeechDenoisingPlan": {
+            "description": "This enables filtering of noise and background speech while the user is talking.\n\nFeatures:\n- Smart denoising using Krisp\n- Fourier denoising\n\nBoth can be used together. Order of precedence:\n- Smart denoising\n- Fourier denoising",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/BackgroundSpeechDenoisingPlan"
+              }
+            ]
+          },
+          "credentialIds": {
+            "description": "These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "keypadInputPlan": {
+            "description": "This is the plan for keypad input handling during workflow calls.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/KeypadInputPlan"
+              }
+            ]
+          }
+        },
+        "required": [
+          "nodes",
+          "name",
+          "edges"
+        ]
+      },
+      "WorkflowOverrides": {
+        "type": "object",
+        "properties": {
+          "variableValues": {
+            "type": "object",
+            "description": "These are values that will be used to replace the template variables in the workflow messages and other text-based fields.\nThis uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html\n\nSo for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`.\n`{{\"now\" | date: \"%b %d, %Y, %I:%M %p\", \"America/New_York\"}}` will be replaced with the current date and time in New York.\n Some VAPI reserved defaults:\n - *customer* - the customer object"
+          }
+        }
+      },
+      "TransferPhoneNumberHookAction": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of action - must be \"transfer\"",
+            "enum": [
+              "transfer"
+            ]
+          },
+          "destination": {
+            "description": "This is the destination details for the transfer - can be a phone number or SIP URI",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
+          }
+        },
+        "required": [
+          "type"
+        ]
+      },
+      "SayPhoneNumberHookAction": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of action - must be \"say\"",
+            "enum": [
+              "say"
+            ]
+          },
+          "exact": {
+            "type": "string",
+            "description": "This is the message to say",
+            "maxLength": 4000
+          }
+        },
+        "required": [
+          "type",
+          "exact"
+        ]
+      },
+      "PhoneNumberHookCallRinging": {
+        "type": "object",
+        "properties": {
+          "on": {
+            "type": "string",
+            "description": "This is the event to trigger the hook on",
+            "enum": [
+              "call.ringing"
+            ],
+            "maxLength": 1000
+          },
+          "do": {
+            "type": "array",
+            "description": "This is the set of actions to perform when the hook triggers",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TransferPhoneNumberHookAction",
+                  "title": "TransferPhoneNumberHookAction"
+                },
+                {
+                  "$ref": "#/components/schemas/SayPhoneNumberHookAction",
+                  "title": "SayPhoneNumberHookAction"
+                }
+              ]
+            }
+          }
+        },
+        "required": [
+          "on",
+          "do"
+        ]
+      },
+      "ImportTwilioPhoneNumberDTO": {
+        "type": "object",
+        "properties": {
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
+          },
+          "hooks": {
+            "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
+            }
+          },
+          "smsEnabled": {
+            "type": "boolean",
+            "description": "Controls whether Vapi sets the messaging webhook URL on the Twilio number during import.\n\nIf set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is.\nIf `true` or omitted (default), Vapi will configure both the voice and messaging URLs.\n\n@default true",
+            "default": true
+          },
+          "twilioPhoneNumber": {
+            "type": "string",
+            "description": "These are the digits of the phone number you own on your Twilio.",
+            "deprecated": true
+          },
+          "twilioAccountSid": {
+            "type": "string",
+            "description": "This is your Twilio Account SID that will be used to handle this phone number."
+          },
+          "twilioAuthToken": {
+            "type": "string",
+            "description": "This is the Twilio Auth Token that will be used to handle this phone number."
+          },
+          "twilioApiKey": {
+            "type": "string",
+            "description": "This is the Twilio API Key that will be used to handle this phone number. If AuthToken is provided, this will be ignored."
+          },
+          "twilioApiSecret": {
+            "type": "string",
+            "description": "This is the Twilio API Secret that will be used to handle this phone number. If AuthToken is provided, this will be ignored."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          }
+        },
+        "required": [
+          "twilioPhoneNumber",
+          "twilioAccountSid"
+        ]
+      },
+      "CreateCustomerDTO": {
+        "type": "object",
+        "properties": {
+          "numberE164CheckEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
+            "default": true
+          },
+          "extension": {
+            "type": "string",
+            "description": "This is the extension that will be dialed after the call is answered.",
+            "maxLength": 10,
+            "example": null
+          },
+          "assistantOverrides": {
+            "description": "These are the overrides for the assistant's settings and template variables specific to this customer.\nThis allows customization of the assistant's behavior for individual customers in batch calls.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
+            ]
+          },
+          "number": {
+            "type": "string",
+            "description": "This is the number of the customer.",
+            "minLength": 3,
+            "maxLength": 40
+          },
+          "sipUri": {
+            "type": "string",
+            "description": "This is the SIP URI of the customer."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the customer. This is just for your own reference.\n\nFor SIP inbound calls, this is extracted from the `From` SIP header with format `\"Display Name\" <sip:username@domain>`.",
+            "maxLength": 40
+          },
+          "email": {
+            "type": "string",
+            "description": "This is the email of the customer.",
+            "maxLength": 40
+          },
+          "externalId": {
+            "type": "string",
+            "description": "This is the external ID of the customer.",
+            "maxLength": 40
+          }
+        }
+      },
+      "SchedulePlan": {
+        "type": "object",
+        "properties": {
+          "earliestAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of the earliest time the call can be scheduled."
+          },
+          "latestAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of the latest time the call can be scheduled."
+          }
+        },
+        "required": [
+          "earliestAt"
+        ]
+      },
+      "Call": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of call.",
+            "enum": [
+              "inboundPhoneCall",
+              "outboundPhoneCall",
+              "webCall",
+              "vapi.websocketCall"
+            ]
+          },
+          "costs": {
+            "type": "array",
+            "description": "These are the costs of individual components of the call in USD.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TransportCost",
+                  "title": "TransportCost"
+                },
+                {
+                  "$ref": "#/components/schemas/TranscriberCost",
+                  "title": "TranscriberCost"
+                },
+                {
+                  "$ref": "#/components/schemas/ModelCost",
+                  "title": "ModelCost"
+                },
+                {
+                  "$ref": "#/components/schemas/VoiceCost",
+                  "title": "VoiceCost"
+                },
+                {
+                  "$ref": "#/components/schemas/VapiCost",
+                  "title": "VapiCost"
+                },
+                {
+                  "$ref": "#/components/schemas/VoicemailDetectionCost",
+                  "title": "VoicemailDetectionCost"
+                },
+                {
+                  "$ref": "#/components/schemas/AnalysisCost",
+                  "title": "AnalysisCost"
+                },
+                {
+                  "$ref": "#/components/schemas/KnowledgeBaseCost",
+                  "title": "KnowledgeBaseCost"
+                }
+              ]
+            }
+          },
+          "messages": {
+            "type": "array",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/BotMessage",
+                  "title": "BotMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallMessage",
+                  "title": "ToolCallMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallResultMessage",
+                  "title": "ToolCallResultMessage"
+                }
+              ]
+            }
+          },
+          "phoneCallProvider": {
+            "type": "string",
+            "description": "This is the provider of the call.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+            "deprecated": true,
+            "enum": [
+              "twilio",
+              "vonage",
+              "vapi",
+              "telnyx"
+            ]
+          },
+          "phoneCallTransport": {
+            "type": "string",
+            "description": "This is the transport of the phone call.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+            "enum": [
+              "sip",
+              "pstn"
+            ]
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the status of the call.",
+            "enum": [
+              "scheduled",
+              "queued",
+              "ringing",
+              "in-progress",
+              "forwarding",
+              "ended"
+            ]
+          },
+          "endedReason": {
+            "type": "string",
+            "description": "This is the explanation for how the call ended.",
             "enum": [
               "call-start-error-neither-assistant-nor-server-set",
               "assistant-request-failed",
@@ -18312,8 +25379,9 @@
               "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",
+              "scheduled-call-deleted",
+              "call.start.error-vapifault-get-org",
+              "call.start.error-vapifault-get-subscription",
               "call.start.error-get-assistant",
               "call.start.error-get-phone-number",
               "call.start.error-get-customer",
@@ -18321,6 +25389,11 @@
               "call.start.error-vapi-number-international",
               "call.start.error-vapi-number-outbound-daily-limit",
               "call.start.error-get-transport",
+              "call.start.error-subscription-wallet-does-not-exist",
+              "call.start.error-subscription-frozen",
+              "call.start.error-subscription-insufficient-credits",
+              "call.start.error-subscription-upgrade-failed",
+              "call.start.error-subscription-concurrency-limit-reached",
               "assistant-not-valid",
               "database-error",
               "assistant-not-found",
@@ -18336,6 +25409,8 @@
               "pipeline-error-neuphonic-voice-failed",
               "pipeline-error-hume-voice-failed",
               "pipeline-error-sesame-voice-failed",
+              "pipeline-error-inworld-voice-failed",
+              "pipeline-error-minimax-voice-failed",
               "pipeline-error-tavus-video-failed",
               "call.in-progress.error-vapifault-openai-voice-failed",
               "call.in-progress.error-vapifault-cartesia-voice-failed",
@@ -18349,6 +25424,8 @@
               "call.in-progress.error-vapifault-neuphonic-voice-failed",
               "call.in-progress.error-vapifault-hume-voice-failed",
               "call.in-progress.error-vapifault-sesame-voice-failed",
+              "call.in-progress.error-vapifault-inworld-voice-failed",
+              "call.in-progress.error-vapifault-minimax-voice-failed",
               "call.in-progress.error-vapifault-tavus-video-failed",
               "pipeline-error-vapi-llm-failed",
               "pipeline-error-vapi-400-bad-request-validation-failed",
@@ -18388,7 +25465,6 @@
               "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",
@@ -18398,6 +25474,9 @@
               "call.in-progress.error-vapifault-transport-never-connected",
               "call.in-progress.error-vapifault-transport-connected-but-call-not-active",
               "call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing",
+              "call.in-progress.error-vapifault-worker-died",
+              "call.in-progress.twilio-completed-call",
+              "call.in-progress.sip-completed-call",
               "call.in-progress.error-vapifault-openai-llm-failed",
               "call.in-progress.error-vapifault-azure-openai-llm-failed",
               "call.in-progress.error-vapifault-groq-llm-failed",
@@ -18407,6 +25486,7 @@
               "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",
+              "call.in-progress.error-vapifault-chat-pipeline-failed-to-start",
               "pipeline-error-openai-400-bad-request-validation-failed",
               "pipeline-error-openai-401-unauthorized",
               "pipeline-error-openai-401-incorrect-api-key",
@@ -18674,6 +25754,7 @@
               "pipeline-error-cartesia-socket-hang-up",
               "pipeline-error-cartesia-requested-payment",
               "pipeline-error-cartesia-500-server-error",
+              "pipeline-error-cartesia-502-server-error",
               "pipeline-error-cartesia-503-server-error",
               "pipeline-error-cartesia-522-server-error",
               "call.in-progress.error-vapifault-cartesia-socket-hang-up",
@@ -18694,6 +25775,7 @@
               "pipeline-error-eleven-labs-invalid-api-key",
               "pipeline-error-eleven-labs-invalid-voice-samples",
               "pipeline-error-eleven-labs-voice-disabled-by-owner",
+              "pipeline-error-eleven-labs-vapi-voice-disabled-by-owner",
               "pipeline-error-eleven-labs-blocked-account-in-probation",
               "pipeline-error-eleven-labs-blocked-content-against-their-policy",
               "pipeline-error-eleven-labs-missing-samples-for-voice-clone",
@@ -18702,6 +25784,7 @@
               "pipeline-error-eleven-labs-max-character-limit-exceeded",
               "pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification",
               "pipeline-error-eleven-labs-500-server-error",
+              "pipeline-error-eleven-labs-503-server-error",
               "call.in-progress.error-vapifault-eleven-labs-voice-not-found",
               "call.in-progress.error-vapifault-eleven-labs-quota-exceeded",
               "call.in-progress.error-vapifault-eleven-labs-unauthorized-access",
@@ -18723,6 +25806,7 @@
               "call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded",
               "call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification",
               "call.in-progress.error-providerfault-eleven-labs-500-server-error",
+              "call.in-progress.error-providerfault-eleven-labs-503-server-error",
               "pipeline-error-playht-request-timed-out",
               "pipeline-error-playht-invalid-voice",
               "pipeline-error-playht-unexpected-error",
@@ -18758,6 +25842,7 @@
               "pipeline-error-deepgram-returning-500-invalid-json",
               "pipeline-error-deepgram-returning-502-network-error",
               "pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach",
+              "pipeline-error-deepgram-returning-econnreset",
               "call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination",
               "call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials",
               "call.in-progress.error-vapifault-deepgram-returning-404-not-found",
@@ -18776,6 +25861,7 @@
               "assistant-forwarded-call",
               "assistant-join-timed-out",
               "call.in-progress.error-assistant-did-not-receive-customer-audio",
+              "call.in-progress.error-transfer-failed",
               "customer-busy",
               "customer-ended-call",
               "customer-did-not-answer",
@@ -18785,3805 +25871,7874 @@
               "phone-call-provider-closed-websocket",
               "call.forwarding.operator-busy",
               "silence-timed-out",
-              "call.in-progress.error-sip-telephony-provider-failed-to-connect-call",
+              "call.in-progress.error-sip-inbound-call-failed-to-connect",
+              "call.in-progress.error-providerfault-outbound-sip-403-forbidden",
+              "call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required",
+              "call.in-progress.error-providerfault-outbound-sip-503-service-unavailable",
+              "call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable",
+              "call.in-progress.error-sip-outbound-call-failed-to-connect",
               "call.ringing.hook-executed-say",
               "call.ringing.hook-executed-transfer",
+              "call.ringing.sip-inbound-caller-hungup-before-call-connect",
+              "call.ringing.error-sip-inbound-call-failed-to-connect",
               "twilio-failed-to-connect-call",
               "twilio-reported-customer-misdialed",
               "vonage-rejected",
               "voicemail"
             ]
           },
-          "destination": {
-            "description": "This is the destination where the call ended up being transferred to. If the call was not transferred, this will be empty.",
+          "destination": {
+            "description": "This is the destination where the call ended up being transferred to. If the call was not transferred, this will be empty.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the call."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this call belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the call was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the call was last updated."
+          },
+          "startedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the call was started."
+          },
+          "endedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the call was ended."
+          },
+          "cost": {
+            "type": "number",
+            "description": "This is the cost of the call in USD."
+          },
+          "costBreakdown": {
+            "description": "This is the cost of the call in USD.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CostBreakdown"
+              }
+            ]
+          },
+          "artifactPlan": {
+            "description": "This is a copy of assistant artifact plan. This isn't actually stored on the call but rather just returned in POST /call/web to enable artifact creation client side.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ArtifactPlan"
+              }
+            ]
+          },
+          "analysis": {
+            "description": "This is the analysis of the call. Configure in `assistant.analysisPlan`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Analysis"
+              }
+            ]
+          },
+          "monitor": {
+            "description": "This is to real-time monitor the call. Configure in `assistant.monitorPlan`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Monitor"
+              }
+            ]
+          },
+          "artifact": {
+            "description": "These are the artifacts created from the call. Configure in `assistant.artifactPlan`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Artifact"
+              }
+            ]
+          },
+          "phoneCallProviderId": {
+            "type": "string",
+            "description": "The ID of the call as provided by the phone number service. callSid in Twilio. conversationUuid in Vonage. callControlId in Telnyx.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+            "deprecated": true
+          },
+          "campaignId": {
+            "type": "string",
+            "description": "This is the campaign ID that the call belongs to."
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead.\n\nTo start a call with:\n- Assistant, use `assistantId` or `assistant`\n- Squad, use `squadId` or `squad`\n- Workflow, use `workflowId` or `workflow`"
+          },
+          "assistant": {
+            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.\n\nTo start a call with:\n- Assistant, use `assistant`\n- Squad, use `squad`\n- Workflow, use `workflow`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "assistantOverrides": {
+            "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
+            ]
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`"
+          },
+          "squad": {
+            "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateSquadDTO"
+              }
+            ]
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`"
+          },
+          "workflow": {
+            "description": "This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateWorkflowDTO"
+              }
+            ]
+          },
+          "workflowOverrides": {
+            "description": "These are the overrides for the `workflow` or `workflowId`'s settings and template variables.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/WorkflowOverrides"
+              }
+            ]
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+          },
+          "phoneNumber": {
+            "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO"
+              }
+            ]
+          },
+          "customerId": {
+            "type": "string",
+            "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+          },
+          "customer": {
+            "description": "This is the customer that will be called. To call an existing customer, use `customerId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the call. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "schedulePlan": {
+            "description": "This is the schedule plan of the call.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SchedulePlan"
+              }
+            ]
+          },
+          "transport": {
+            "type": "object",
+            "description": "This is the transport of the call."
+          }
+        },
+        "required": [
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "CallBatchError": {
+        "type": "object",
+        "properties": {
+          "customer": {
+            "$ref": "#/components/schemas/CreateCustomerDTO"
+          },
+          "error": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "customer",
+          "error"
+        ]
+      },
+      "CallBatchResponse": {
+        "type": "object",
+        "properties": {
+          "results": {
+            "description": "This is the list of calls that were created.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Call"
+            }
+          },
+          "errors": {
+            "description": "This is the list of calls that failed to be created.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/CallBatchError"
+            }
+          }
+        },
+        "required": [
+          "results",
+          "errors"
+        ]
+      },
+      "CreateCallDTO": {
+        "type": "object",
+        "properties": {
+          "customers": {
+            "description": "This is used to issue batch calls to multiple customers.\n\nOnly relevant for `outboundPhoneCall`. To call a single customer, use `customer` instead.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/CreateCustomerDTO"
+            }
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the call. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "schedulePlan": {
+            "description": "This is the schedule plan of the call.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SchedulePlan"
+              }
+            ]
+          },
+          "transport": {
+            "type": "object",
+            "description": "This is the transport of the call."
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead.\n\nTo start a call with:\n- Assistant, use `assistantId` or `assistant`\n- Squad, use `squadId` or `squad`\n- Workflow, use `workflowId` or `workflow`"
+          },
+          "assistant": {
+            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.\n\nTo start a call with:\n- Assistant, use `assistant`\n- Squad, use `squad`\n- Workflow, use `workflow`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "assistantOverrides": {
+            "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
+            ]
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`"
+          },
+          "squad": {
+            "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateSquadDTO"
+              }
+            ]
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`"
+          },
+          "workflow": {
+            "description": "This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateWorkflowDTO"
+              }
+            ]
+          },
+          "workflowOverrides": {
+            "description": "These are the overrides for the `workflow` or `workflowId`'s settings and template variables.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/WorkflowOverrides"
+              }
+            ]
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+          },
+          "phoneNumber": {
+            "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO"
+              }
+            ]
+          },
+          "customerId": {
+            "type": "string",
+            "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+          },
+          "customer": {
+            "description": "This is the customer that will be called. To call an existing customer, use `customerId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          }
+        }
+      },
+      "PaginationMeta": {
+        "type": "object",
+        "properties": {
+          "itemsPerPage": {
+            "type": "number"
+          },
+          "totalItems": {
+            "type": "number"
+          },
+          "currentPage": {
+            "type": "number"
+          }
+        },
+        "required": [
+          "itemsPerPage",
+          "totalItems",
+          "currentPage"
+        ]
+      },
+      "CallPaginatedResponse": {
+        "type": "object",
+        "properties": {
+          "results": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Call"
+            }
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/PaginationMeta"
+          }
+        },
+        "required": [
+          "results",
+          "metadata"
+        ]
+      },
+      "CreateOutboundCallDTO": {
+        "type": "object",
+        "properties": {
+          "customers": {
+            "description": "This is used to issue batch calls to multiple customers.\n\nOnly relevant for `outboundPhoneCall`. To call a single customer, use `customer` instead.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/CreateCustomerDTO"
+            }
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the call. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "schedulePlan": {
+            "description": "This is the schedule plan of the call.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SchedulePlan"
+              }
+            ]
+          },
+          "transport": {
+            "type": "object",
+            "description": "This is the transport of the call."
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead.\n\nTo start a call with:\n- Assistant, use `assistantId` or `assistant`\n- Squad, use `squadId` or `squad`\n- Workflow, use `workflowId` or `workflow`"
+          },
+          "assistant": {
+            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.\n\nTo start a call with:\n- Assistant, use `assistant`\n- Squad, use `squad`\n- Workflow, use `workflow`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "assistantOverrides": {
+            "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
+            ]
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`"
+          },
+          "squad": {
+            "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateSquadDTO"
+              }
+            ]
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`"
+          },
+          "workflow": {
+            "description": "This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateWorkflowDTO"
+              }
+            ]
+          },
+          "workflowOverrides": {
+            "description": "These are the overrides for the `workflow` or `workflowId`'s settings and template variables.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/WorkflowOverrides"
+              }
+            ]
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+          },
+          "phoneNumber": {
+            "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO"
+              }
+            ]
+          },
+          "customerId": {
+            "type": "string",
+            "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+          },
+          "customer": {
+            "description": "This is the customer that will be called. To call an existing customer, use `customerId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          }
+        }
+      },
+      "CreateWebCallDTO": {
+        "type": "object",
+        "properties": {
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead.\n\nTo start a call with:\n- Assistant, use `assistantId` or `assistant`\n- Squad, use `squadId` or `squad`\n- Workflow, use `workflowId` or `workflow`"
+          },
+          "assistant": {
+            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.\n\nTo start a call with:\n- Assistant, use `assistant`\n- Squad, use `squad`\n- Workflow, use `workflow`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "assistantOverrides": {
+            "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
+            ]
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`"
+          },
+          "squad": {
+            "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateSquadDTO"
+              }
+            ]
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`"
+          },
+          "workflow": {
+            "description": "This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateWorkflowDTO"
+              }
+            ]
+          },
+          "workflowOverrides": {
+            "description": "These are the overrides for the `workflow` or `workflowId`'s settings and template variables.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/WorkflowOverrides"
+              }
+            ]
+          }
+        }
+      },
+      "UpdateCallDTO": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of the call. This is just for your own reference.",
+            "maxLength": 40
+          }
+        }
+      },
+      "DeveloperMessage": {
+        "type": "object",
+        "properties": {
+          "role": {
+            "type": "string",
+            "description": "This is the role of the message author",
+            "default": "developer",
+            "enum": [
+              "developer"
+            ]
+          },
+          "content": {
+            "type": "string",
+            "description": "This is the content of the developer message",
+            "maxLength": 10000
+          },
+          "name": {
+            "type": "string",
+            "description": "This is an optional name for the participant",
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "role",
+          "content"
+        ]
+      },
+      "SystemMessage": {
+        "type": "object",
+        "properties": {
+          "role": {
+            "type": "string",
+            "description": "The role of the system in the conversation."
+          },
+          "message": {
+            "type": "string",
+            "description": "The message content from the system."
+          },
+          "time": {
+            "type": "number",
+            "description": "The timestamp when the message was sent."
+          },
+          "secondsFromStart": {
+            "type": "number",
+            "description": "The number of seconds from the start of the conversation."
+          }
+        },
+        "required": [
+          "role",
+          "message",
+          "time",
+          "secondsFromStart"
+        ]
+      },
+      "UserMessage": {
+        "type": "object",
+        "properties": {
+          "role": {
+            "type": "string",
+            "description": "The role of the user in the conversation."
+          },
+          "message": {
+            "type": "string",
+            "description": "The message content from the user."
+          },
+          "time": {
+            "type": "number",
+            "description": "The timestamp when the message was sent."
+          },
+          "endTime": {
+            "type": "number",
+            "description": "The timestamp when the message ended."
+          },
+          "secondsFromStart": {
+            "type": "number",
+            "description": "The number of seconds from the start of the conversation."
+          },
+          "duration": {
+            "type": "number",
+            "description": "The duration of the message in seconds."
+          }
+        },
+        "required": [
+          "role",
+          "message",
+          "time",
+          "endTime",
+          "secondsFromStart"
+        ]
+      },
+      "ToolCallFunction": {
+        "type": "object",
+        "properties": {
+          "arguments": {
+            "type": "string",
+            "description": "This is the arguments to call the function with"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the function to call",
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "arguments",
+          "name"
+        ]
+      },
+      "ToolCall": {
+        "type": "object",
+        "properties": {
+          "id": {
+            "type": "string",
+            "description": "This is the ID of the tool call"
+          },
+          "type": {
+            "type": "string",
+            "description": "This is the type of tool"
+          },
+          "function": {
+            "description": "This is the function that was called",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ToolCallFunction"
+              }
+            ]
+          }
+        },
+        "required": [
+          "id",
+          "type",
+          "function"
+        ]
+      },
+      "AssistantMessage": {
+        "type": "object",
+        "properties": {
+          "role": {
+            "type": "string",
+            "description": "This is the role of the message author",
+            "default": "assistant",
+            "enum": [
+              "assistant"
+            ]
+          },
+          "content": {
+            "type": "string",
+            "description": "This is the content of the assistant message",
+            "maxLength": 10000
+          },
+          "refusal": {
+            "type": "string",
+            "description": "This is the refusal message generated by the model",
+            "maxLength": 10000
+          },
+          "tool_calls": {
+            "description": "This is the tool calls generated by the model",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ToolCall"
+            }
+          },
+          "name": {
+            "type": "string",
+            "description": "This is an optional name for the participant",
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "role"
+        ]
+      },
+      "ToolMessage": {
+        "type": "object",
+        "properties": {
+          "role": {
+            "type": "string",
+            "description": "This is the role of the message author",
+            "default": "tool",
+            "enum": [
+              "tool"
+            ]
+          },
+          "content": {
+            "type": "string",
+            "description": "This is the content of the tool message",
+            "maxLength": 10000
+          },
+          "tool_call_id": {
+            "type": "string",
+            "description": "This is the ID of the tool call this message is responding to"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is an optional name for the participant",
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "role",
+          "content",
+          "tool_call_id"
+        ]
+      },
+      "FunctionCall": {
+        "type": "object",
+        "properties": {
+          "arguments": {
+            "type": "string",
+            "description": "This is the arguments to call the function with"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the function to call",
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "arguments",
+          "name"
+        ]
+      },
+      "Chat": {
+        "type": "object",
+        "properties": {
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead."
+          },
+          "assistant": {
+            "description": "This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "assistantOverrides": {
+            "description": "These are the variable values that will be used to replace template variables in the assistant messages.\nOnly variable substitution is supported in chat contexts - other assistant properties cannot be overridden.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the chat. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "sessionId": {
+            "type": "string",
+            "description": "This is the ID of the session that will be used for the chat.\nMutually exclusive with previousChatId."
+          },
+          "input": {
+            "description": "This is the input text for the chat.\nCan be a string or an array of chat messages.",
+            "oneOf": [
+              {
+                "type": "string",
+                "title": "String"
+              },
+              {
+                "type": "array",
+                "items": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/SystemMessage",
+                      "title": "SystemMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/UserMessage",
+                      "title": "UserMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/AssistantMessage",
+                      "title": "AssistantMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/ToolMessage",
+                      "title": "ToolMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/DeveloperMessage",
+                      "title": "DeveloperMessage"
+                    }
+                  ]
+                },
+                "title": "MessageArray"
+              }
+            ],
+            "examples": [
+              "Hello, how can you help me?",
+              [
+                {
+                  "role": "user",
+                  "content": "Hello, how can you help me?"
+                }
+              ]
+            ]
+          },
+          "stream": {
+            "type": "boolean",
+            "description": "This is a flag that determines whether the response should be streamed.\nWhen true, the response will be sent as chunks of text.",
+            "default": false
+          },
+          "previousChatId": {
+            "type": "string",
+            "description": "This is the ID of the chat that will be used as context for the new chat.\nThe messages from the previous chat will be used as context.\nMutually exclusive with sessionId."
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the chat."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this chat belongs to."
+          },
+          "messages": {
+            "type": "array",
+            "description": "This is an array of messages used as context for the chat.\nUsed to provide message history for multi-turn conversations.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/AssistantMessage",
+                  "title": "AssistantMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessage",
+                  "title": "ToolMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/DeveloperMessage",
+                  "title": "DeveloperMessage"
+                }
+              ]
+            }
+          },
+          "output": {
+            "type": "array",
+            "description": "This is the output messages generated by the system in response to the input.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/AssistantMessage",
+                  "title": "AssistantMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessage",
+                  "title": "ToolMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/DeveloperMessage",
+                  "title": "DeveloperMessage"
+                }
+              ]
+            }
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the chat was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the chat was last updated."
+          },
+          "costs": {
+            "type": "array",
+            "description": "These are the costs of individual components of the chat in USD.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ModelCost",
+                  "title": "ModelCost"
+                },
+                {
+                  "$ref": "#/components/schemas/ChatCost",
+                  "title": "ChatCost"
+                }
+              ]
+            }
+          },
+          "cost": {
+            "type": "number",
+            "description": "This is the cost of the chat in USD."
+          }
+        },
+        "required": [
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "CreateChatDTO": {
+        "type": "object",
+        "properties": {
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead."
+          },
+          "assistant": {
+            "description": "This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "assistantOverrides": {
+            "description": "These are the variable values that will be used to replace template variables in the assistant messages.\nOnly variable substitution is supported in chat contexts - other assistant properties cannot be overridden.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the chat. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "sessionId": {
+            "type": "string",
+            "description": "This is the ID of the session that will be used for the chat.\nMutually exclusive with previousChatId."
+          },
+          "input": {
+            "description": "This is the input text for the chat.\nCan be a string or an array of chat messages.\nThis field is REQUIRED for chat creation.",
+            "oneOf": [
+              {
+                "type": "string",
+                "title": "String"
+              },
+              {
+                "type": "array",
+                "items": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/SystemMessage",
+                      "title": "SystemMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/UserMessage",
+                      "title": "UserMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/AssistantMessage",
+                      "title": "AssistantMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/ToolMessage",
+                      "title": "ToolMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/DeveloperMessage",
+                      "title": "DeveloperMessage"
+                    }
+                  ]
+                },
+                "title": "MessageArray"
+              }
+            ],
+            "examples": [
+              "Hello, how can you help me?",
+              [
+                {
+                  "role": "user",
+                  "content": "Hello, how can you help me?"
+                }
+              ]
+            ]
+          },
+          "stream": {
+            "type": "boolean",
+            "description": "This is a flag that determines whether the response should be streamed.\nWhen true, the response will be sent as chunks of text.",
+            "default": false
+          },
+          "previousChatId": {
+            "type": "string",
+            "description": "This is the ID of the chat that will be used as context for the new chat.\nThe messages from the previous chat will be used as context.\nMutually exclusive with sessionId."
+          }
+        },
+        "required": [
+          "input"
+        ]
+      },
+      "GetChatPaginatedDTO": {
+        "type": "object",
+        "properties": {
+          "assistantId": {
+            "type": "string",
+            "description": "This is the unique identifier for the assistant that will be used for the chat."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the unique identifier for the workflow that will be used for the chat."
+          },
+          "sessionId": {
+            "type": "string",
+            "description": "This is the unique identifier for the session that will be used for the chat."
+          },
+          "page": {
+            "type": "number",
+            "description": "This is the page number to return. Defaults to 1.",
+            "minimum": 1
+          },
+          "sortOrder": {
+            "type": "string",
+            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
+            "enum": [
+              "ASC",
+              "DESC"
+            ]
+          },
+          "limit": {
+            "type": "number",
+            "description": "This is the maximum number of items to return. Defaults to 100.",
+            "minimum": 0,
+            "maximum": 1000
+          },
+          "createdAtGt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the createdAt is greater than the specified value."
+          },
+          "createdAtLt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the createdAt is less than the specified value."
+          },
+          "createdAtGe": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the createdAt is greater than or equal to the specified value."
+          },
+          "createdAtLe": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the createdAt is less than or equal to the specified value."
+          },
+          "updatedAtGt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the updatedAt is greater than the specified value."
+          },
+          "updatedAtLt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the updatedAt is less than the specified value."
+          },
+          "updatedAtGe": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the updatedAt is greater than or equal to the specified value."
+          },
+          "updatedAtLe": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the updatedAt is less than or equal to the specified value."
+          }
+        }
+      },
+      "ChatPaginatedResponse": {
+        "type": "object",
+        "properties": {
+          "results": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Chat"
+            }
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/PaginationMeta"
+          }
+        },
+        "required": [
+          "results",
+          "metadata"
+        ]
+      },
+      "CreateChatStreamResponse": {
+        "type": "object",
+        "properties": {
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the streaming response."
+          },
+          "sessionId": {
+            "type": "string",
+            "description": "This is the ID of the session that will be used for the chat.\nHelps track conversation context across multiple messages."
+          },
+          "path": {
+            "type": "string",
+            "description": "This is the path to the content being updated.\nFormat: `chat.output[{contentIndex}].content` where contentIndex identifies the specific content item.",
+            "example": "chat.output[0].content"
+          },
+          "delta": {
+            "type": "string",
+            "description": "This is the incremental content chunk being streamed."
+          }
+        },
+        "required": [
+          "id",
+          "path",
+          "delta"
+        ]
+      },
+      "OpenAIResponsesRequest": {
+        "type": "object",
+        "properties": {
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead."
+          },
+          "assistant": {
+            "description": "This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "assistantOverrides": {
+            "description": "These are the variable values that will be used to replace template variables in the assistant messages.\nOnly variable substitution is supported in chat contexts - other assistant properties cannot be overridden.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the chat. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "sessionId": {
+            "type": "string",
+            "description": "This is the ID of the session that will be used for the chat.\nMutually exclusive with previousChatId."
+          },
+          "input": {
+            "description": "This is the input text for the chat.\nCan be a string or an array of chat messages.\nThis field is REQUIRED for chat creation.",
+            "oneOf": [
+              {
+                "type": "string",
+                "title": "String"
+              },
+              {
+                "type": "array",
+                "items": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/SystemMessage",
+                      "title": "SystemMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/UserMessage",
+                      "title": "UserMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/AssistantMessage",
+                      "title": "AssistantMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/ToolMessage",
+                      "title": "ToolMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/DeveloperMessage",
+                      "title": "DeveloperMessage"
+                    }
+                  ]
+                },
+                "title": "MessageArray"
+              }
+            ],
+            "examples": [
+              "Hello, how can you help me?",
+              [
+                {
+                  "role": "user",
+                  "content": "Hello, how can you help me?"
+                }
+              ]
+            ]
+          },
+          "stream": {
+            "type": "boolean",
+            "description": "Whether to stream the response or not.",
+            "default": true
+          },
+          "previousChatId": {
+            "type": "string",
+            "description": "This is the ID of the chat that will be used as context for the new chat.\nThe messages from the previous chat will be used as context.\nMutually exclusive with sessionId."
+          }
+        },
+        "required": [
+          "input"
+        ]
+      },
+      "ChatAssistantOverrides": {
+        "type": "object",
+        "properties": {
+          "variableValues": {
+            "type": "object",
+            "description": "Variable values for template substitution",
+            "example": {
+              "name": "John",
+              "company": "ACME Corp"
+            }
+          }
+        }
+      },
+      "CreateWebCustomerDTO": {
+        "type": "object",
+        "properties": {
+          "numberE164CheckEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
+            "default": true
+          },
+          "extension": {
+            "type": "string",
+            "description": "This is the extension that will be dialed after the call is answered.",
+            "maxLength": 10,
+            "example": null
+          },
+          "assistantOverrides": {
+            "description": "These are the variable values that will be used to replace template variables in the assistant messages.\nOnly variable substitution is supported in web chat - other assistant properties cannot be overridden.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChatAssistantOverrides"
+              }
+            ]
+          },
+          "number": {
+            "type": "string",
+            "description": "This is the number of the customer.",
+            "minLength": 3,
+            "maxLength": 40
+          },
+          "sipUri": {
+            "type": "string",
+            "description": "This is the SIP URI of the customer."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the customer. This is just for your own reference.\n\nFor SIP inbound calls, this is extracted from the `From` SIP header with format `\"Display Name\" <sip:username@domain>`.",
+            "maxLength": 40
+          },
+          "email": {
+            "type": "string",
+            "description": "This is the email of the customer.",
+            "maxLength": 40
+          },
+          "externalId": {
+            "type": "string",
+            "description": "This is the external ID of the customer.",
+            "maxLength": 40
+          }
+        }
+      },
+      "CreateWebChatDTO": {
+        "type": "object",
+        "properties": {
+          "assistantId": {
+            "type": "string",
+            "description": "The assistant ID to use for this chat"
+          },
+          "sessionId": {
+            "type": "string",
+            "description": "This is the ID of the session that will be used for the chat.\nIf provided, the conversation will continue from the previous state.\nIf not provided or expired, a new session will be created."
+          },
+          "assistantOverrides": {
+            "description": "These are the variable values that will be used to replace template variables in the assistant messages.\nOnly variable substitution is supported in web chat - other assistant properties cannot be overridden.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChatAssistantOverrides"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer information for the chat.\nUsed to automatically manage sessions for repeat customers.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateWebCustomerDTO"
+              }
+            ]
+          },
+          "input": {
+            "description": "This is the input text for the chat.\nCan be a string or an array of chat messages.",
+            "oneOf": [
+              {
+                "type": "string",
+                "title": "String"
+              },
+              {
+                "type": "array",
+                "items": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/SystemMessage",
+                      "title": "SystemMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/UserMessage",
+                      "title": "UserMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/AssistantMessage",
+                      "title": "AssistantMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/ToolMessage",
+                      "title": "ToolMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/DeveloperMessage",
+                      "title": "DeveloperMessage"
+                    }
+                  ]
+                },
+                "title": "MessageArray"
+              }
+            ],
+            "examples": [
+              "Hello, how can you help me?",
+              [
+                {
+                  "role": "user",
+                  "content": "Hello, how can you help me?"
+                }
+              ]
+            ]
+          },
+          "stream": {
+            "type": "boolean",
+            "description": "This is a flag that determines whether the response should be streamed.\nWhen true, the response will be sent as chunks of text.",
+            "default": false
+          }
+        },
+        "required": [
+          "assistantId",
+          "input"
+        ]
+      },
+      "WebChat": {
+        "type": "object",
+        "properties": {
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the chat."
+          },
+          "sessionId": {
+            "type": "string",
+            "description": "This is the ID of the session for the chat. Send it in the next chat request to continue the conversation."
+          },
+          "output": {
+            "type": "array",
+            "description": "This is the output messages generated by the system in response to the input.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/AssistantMessage",
+                  "title": "AssistantMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessage",
+                  "title": "ToolMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/DeveloperMessage",
+                  "title": "DeveloperMessage"
+                }
+              ]
+            }
+          }
+        },
+        "required": [
+          "id",
+          "output"
+        ]
+      },
+      "OpenAIWebChatRequest": {
+        "type": "object",
+        "properties": {
+          "assistantId": {
+            "type": "string",
+            "description": "The assistant ID to use for this chat"
+          },
+          "sessionId": {
+            "type": "string",
+            "description": "This is the ID of the session that will be used for the chat.\nIf provided, the conversation will continue from the previous state.\nIf not provided or expired, a new session will be created."
+          },
+          "assistantOverrides": {
+            "description": "These are the variable values that will be used to replace template variables in the assistant messages.\nOnly variable substitution is supported in web chat - other assistant properties cannot be overridden.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ChatAssistantOverrides"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer information for the chat.\nUsed to automatically manage sessions for repeat customers.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateWebCustomerDTO"
+              }
+            ]
+          },
+          "input": {
+            "description": "This is the input text for the chat.\nCan be a string or an array of chat messages.",
+            "oneOf": [
+              {
+                "type": "string",
+                "title": "String"
+              },
+              {
+                "type": "array",
+                "items": {
+                  "oneOf": [
+                    {
+                      "$ref": "#/components/schemas/SystemMessage",
+                      "title": "SystemMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/UserMessage",
+                      "title": "UserMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/AssistantMessage",
+                      "title": "AssistantMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/ToolMessage",
+                      "title": "ToolMessage"
+                    },
+                    {
+                      "$ref": "#/components/schemas/DeveloperMessage",
+                      "title": "DeveloperMessage"
+                    }
+                  ]
+                },
+                "title": "MessageArray"
+              }
+            ],
+            "examples": [
+              "Hello, how can you help me?",
+              [
+                {
+                  "role": "user",
+                  "content": "Hello, how can you help me?"
+                }
+              ]
+            ]
+          },
+          "stream": {
+            "type": "boolean",
+            "description": "Whether to stream the response or not.",
+            "default": true
+          }
+        },
+        "required": [
+          "assistantId",
+          "input"
+        ]
+      },
+      "ResponseOutputText": {
+        "type": "object",
+        "properties": {
+          "annotations": {
+            "default": [],
+            "description": "Annotations in the text output",
+            "type": "array",
+            "items": {
+              "type": "object"
+            }
+          },
+          "text": {
+            "type": "string",
+            "description": "The text output from the model"
+          },
+          "type": {
+            "type": "string",
+            "default": "output_text",
+            "description": "The type of the output text",
+            "enum": [
+              "output_text"
+            ]
+          }
+        },
+        "required": [
+          "annotations",
+          "text",
+          "type"
+        ]
+      },
+      "ResponseOutputMessage": {
+        "type": "object",
+        "properties": {
+          "id": {
+            "type": "string",
+            "description": "The unique ID of the output message"
+          },
+          "content": {
+            "description": "Content of the output message",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ResponseOutputText"
+            }
+          },
+          "role": {
+            "type": "string",
+            "default": "assistant",
+            "description": "The role of the output message",
+            "enum": [
+              "assistant"
+            ]
+          },
+          "status": {
+            "type": "string",
+            "description": "The status of the message",
+            "enum": [
+              "in_progress",
+              "completed",
+              "incomplete"
+            ]
+          },
+          "type": {
+            "type": "string",
+            "default": "message",
+            "description": "The type of the output message",
+            "enum": [
+              "message"
+            ]
+          }
+        },
+        "required": [
+          "id",
+          "content",
+          "role",
+          "status",
+          "type"
+        ]
+      },
+      "ResponseObject": {
+        "type": "object",
+        "properties": {
+          "id": {
+            "type": "string",
+            "description": "Unique identifier for this Response"
+          },
+          "object": {
+            "type": "string",
+            "default": "response",
+            "description": "The object type",
+            "enum": [
+              "response"
+            ]
+          },
+          "created_at": {
+            "type": "number",
+            "description": "Unix timestamp (in seconds) of when this Response was created"
+          },
+          "status": {
+            "type": "string",
+            "description": "Status of the response",
+            "enum": [
+              "completed",
+              "failed",
+              "in_progress",
+              "incomplete"
+            ]
+          },
+          "error": {
+            "type": "string",
+            "nullable": true,
+            "default": null,
+            "description": "Error message if the response failed"
+          },
+          "output": {
+            "description": "Output messages from the model",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ResponseOutputMessage"
+            }
+          }
+        },
+        "required": [
+          "id",
+          "object",
+          "created_at",
+          "status",
+          "output"
+        ]
+      },
+      "ResponseTextDeltaEvent": {
+        "type": "object",
+        "properties": {
+          "content_index": {
+            "type": "number",
+            "description": "Index of the content part"
+          },
+          "delta": {
+            "type": "string",
+            "description": "Text delta being added"
+          },
+          "item_id": {
+            "type": "string",
+            "description": "ID of the output item"
+          },
+          "output_index": {
+            "type": "number",
+            "description": "Index of the output item"
+          },
+          "type": {
+            "type": "string",
+            "default": "response.output_text.delta",
+            "description": "Event type",
+            "enum": [
+              "response.output_text.delta"
+            ]
+          }
+        },
+        "required": [
+          "content_index",
+          "delta",
+          "item_id",
+          "output_index",
+          "type"
+        ]
+      },
+      "ResponseTextDoneEvent": {
+        "type": "object",
+        "properties": {
+          "content_index": {
+            "type": "number",
+            "description": "Index of the content part"
+          },
+          "item_id": {
+            "type": "string",
+            "description": "ID of the output item"
+          },
+          "output_index": {
+            "type": "number",
+            "description": "Index of the output item"
+          },
+          "text": {
+            "type": "string",
+            "description": "Complete text content"
+          },
+          "type": {
+            "type": "string",
+            "default": "response.output_text.done",
+            "description": "Event type",
+            "enum": [
+              "response.output_text.done"
+            ]
+          }
+        },
+        "required": [
+          "content_index",
+          "item_id",
+          "output_index",
+          "text",
+          "type"
+        ]
+      },
+      "ResponseCompletedEvent": {
+        "type": "object",
+        "properties": {
+          "response": {
+            "description": "The completed response",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ResponseObject"
+              }
+            ]
+          },
+          "type": {
+            "type": "string",
+            "default": "response.completed",
+            "description": "Event type",
+            "enum": [
+              "response.completed"
+            ]
+          }
+        },
+        "required": [
+          "response",
+          "type"
+        ]
+      },
+      "ResponseErrorEvent": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "default": "error",
+            "description": "Event type",
+            "enum": [
+              "error"
+            ]
+          },
+          "code": {
+            "type": "string",
+            "description": "Error code",
+            "example": "ERR_SOMETHING"
+          },
+          "message": {
+            "type": "string",
+            "description": "Error message",
+            "example": "Something went wrong"
+          },
+          "param": {
+            "type": "string",
+            "nullable": true,
+            "description": "Parameter that caused the error"
+          },
+          "sequence_number": {
+            "type": "number",
+            "description": "Sequence number of the event",
+            "example": 1
+          }
+        },
+        "required": [
+          "type",
+          "code",
+          "message",
+          "sequence_number"
+        ]
+      },
+      "CreateCampaignDTO": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of the campaign. This is just for your own reference.",
+            "example": "Q2 Sales Campaign"
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant ID that will be used for the campaign calls. Note: Either assistantId or workflowId can be used, but not both."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow ID that will be used for the campaign calls. Note: Either assistantId or workflowId can be used, but not both."
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the phone number ID that will be used for the campaign calls."
+          },
+          "schedulePlan": {
+            "description": "This is the schedule plan for the campaign.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SchedulePlan"
+              }
+            ]
+          },
+          "customers": {
+            "description": "These are the customers that will be called in the campaign.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/CreateCustomerDTO"
+            }
+          }
+        },
+        "required": [
+          "name",
+          "phoneNumberId",
+          "customers"
+        ]
+      },
+      "Campaign": {
+        "type": "object",
+        "properties": {
+          "status": {
+            "type": "string",
+            "description": "This is the status of the campaign.",
+            "enum": [
+              "scheduled",
+              "in-progress",
+              "ended"
+            ]
+          },
+          "endedReason": {
+            "type": "string",
+            "description": "This is the explanation for how the campaign ended.",
+            "enum": [
+              "campaign.scheduled.ended-by-user",
+              "campaign.in-progress.ended-by-user",
+              "campaign.ended.success"
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the campaign. This is just for your own reference.",
+            "example": "Q2 Sales Campaign"
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant ID that will be used for the campaign calls. Note: Either assistantId or workflowId can be used, but not both."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow ID that will be used for the campaign calls. Note: Either assistantId or workflowId can be used, but not both."
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the phone number ID that will be used for the campaign calls."
+          },
+          "schedulePlan": {
+            "description": "This is the schedule plan for the campaign.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SchedulePlan"
+              }
+            ]
+          },
+          "customers": {
+            "description": "These are the customers that will be called in the campaign.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/CreateCustomerDTO"
+            }
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the campaign."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this campaign belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the campaign was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the campaign was last updated."
+          },
+          "calls": {
+            "type": "object",
+            "description": "This is a map of call IDs to campaign call details."
+          },
+          "callsCounterScheduled": {
+            "type": "number",
+            "description": "This is the number of calls that have been scheduled."
+          },
+          "callsCounterQueued": {
+            "type": "number",
+            "description": "This is the number of calls that have been queued."
+          },
+          "callsCounterInProgress": {
+            "type": "number",
+            "description": "This is the number of calls that have been in progress."
+          },
+          "callsCounterEndedVoicemail": {
+            "type": "number",
+            "description": "This is the number of calls whose ended reason is 'voicemail'."
+          },
+          "callsCounterEnded": {
+            "type": "number",
+            "description": "This is the number of calls that have ended."
+          }
+        },
+        "required": [
+          "status",
+          "name",
+          "phoneNumberId",
+          "customers",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "calls",
+          "callsCounterScheduled",
+          "callsCounterQueued",
+          "callsCounterInProgress",
+          "callsCounterEndedVoicemail",
+          "callsCounterEnded"
+        ]
+      },
+      "CampaignPaginatedResponse": {
+        "type": "object",
+        "properties": {
+          "results": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Campaign"
+            }
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/PaginationMeta"
+          }
+        },
+        "required": [
+          "results",
+          "metadata"
+        ]
+      },
+      "UpdateCampaignDTO": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of the campaign. This is just for your own reference."
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant ID that will be used for the campaign calls.\nCan only be updated if campaign is not in progress or has ended."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow ID that will be used for the campaign calls.\nCan only be updated if campaign is not in progress or has ended."
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the phone number ID that will be used for the campaign calls.\nCan only be updated if campaign is not in progress or has ended."
+          },
+          "schedulePlan": {
+            "description": "This is the schedule plan for the campaign.\nCan only be updated if campaign is not in progress or has ended.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SchedulePlan"
+              }
+            ]
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the status of the campaign.\nCan only be updated to 'ended' if you want to end the campaign.\nWhen set to 'ended', it will delete all scheduled calls. Calls in progress will be allowed to complete.",
+            "enum": [
+              "ended"
+            ]
+          }
+        }
+      },
+      "Session": {
+        "type": "object",
+        "properties": {
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the session."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that owns this session."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 timestamp indicating when the session was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 timestamp indicating when the session was last updated."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is a user-defined name for the session. Maximum length is 40 characters.",
+            "maxLength": 40
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the current status of the session. Can be either 'active' or 'completed'.",
+            "enum": [
+              "active",
+              "completed"
+            ]
+          },
+          "expirationSeconds": {
+            "type": "number",
+            "description": "Session expiration time in seconds. Defaults to 24 hours (86400 seconds) if not set.",
+            "minimum": 60,
+            "maximum": 2592000,
+            "example": 86400
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the ID of the assistant associated with this session. Use this when referencing an existing assistant."
+          },
+          "assistant": {
+            "description": "This is the assistant configuration for this session. Use this when creating a new assistant configuration.\nIf assistantId is provided, this will be ignored.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "messages": {
+            "type": "array",
+            "description": "This is an array of chat messages in the session.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/AssistantMessage",
+                  "title": "AssistantMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessage",
+                  "title": "ToolMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/DeveloperMessage",
+                  "title": "DeveloperMessage"
+                }
+              ]
+            }
+          },
+          "customer": {
+            "description": "This is the customer information associated with this session.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the ID of the phone number associated with this session."
+          },
+          "phoneNumber": {
+            "description": "This is the phone number configuration for this session.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO"
+              }
+            ]
+          }
+        },
+        "required": [
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "CreateSessionDTO": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is a user-defined name for the session. Maximum length is 40 characters.",
+            "maxLength": 40
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the current status of the session. Can be either 'active' or 'completed'.",
+            "enum": [
+              "active",
+              "completed"
+            ]
+          },
+          "expirationSeconds": {
+            "type": "number",
+            "description": "Session expiration time in seconds. Defaults to 24 hours (86400 seconds) if not set.",
+            "minimum": 60,
+            "maximum": 2592000,
+            "example": 86400
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the ID of the assistant associated with this session. Use this when referencing an existing assistant."
+          },
+          "assistant": {
+            "description": "This is the assistant configuration for this session. Use this when creating a new assistant configuration.\nIf assistantId is provided, this will be ignored.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "messages": {
+            "type": "array",
+            "description": "This is an array of chat messages in the session.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/AssistantMessage",
+                  "title": "AssistantMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessage",
+                  "title": "ToolMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/DeveloperMessage",
+                  "title": "DeveloperMessage"
+                }
+              ]
+            }
+          },
+          "customer": {
+            "description": "This is the customer information associated with this session.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the ID of the phone number associated with this session."
+          },
+          "phoneNumber": {
+            "description": "This is the phone number configuration for this session.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO"
+              }
+            ]
+          }
+        }
+      },
+      "UpdateSessionDTO": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is the new name for the session. Maximum length is 40 characters.",
+            "maxLength": 40
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the new status for the session.",
+            "enum": [
+              "active",
+              "completed"
+            ]
+          },
+          "expirationSeconds": {
+            "type": "number",
+            "description": "Session expiration time in seconds. Defaults to 24 hours (86400 seconds) if not set.",
+            "minimum": 60,
+            "maximum": 2592000,
+            "example": 86400
+          },
+          "messages": {
+            "type": "array",
+            "description": "This is the updated array of chat messages.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/AssistantMessage",
+                  "title": "AssistantMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessage",
+                  "title": "ToolMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/DeveloperMessage",
+                  "title": "DeveloperMessage"
+                }
+              ]
+            }
+          }
+        }
+      },
+      "GetSessionPaginatedDTO": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of the session to filter by."
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the ID of the assistant to filter sessions by."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the ID of the workflow to filter sessions by."
+          },
+          "page": {
+            "type": "number",
+            "description": "This is the page number to return. Defaults to 1.",
+            "minimum": 1
+          },
+          "sortOrder": {
+            "type": "string",
+            "description": "This is the sort order for pagination. Defaults to 'DESC'.",
+            "enum": [
+              "ASC",
+              "DESC"
+            ]
+          },
+          "limit": {
+            "type": "number",
+            "description": "This is the maximum number of items to return. Defaults to 100.",
+            "minimum": 0,
+            "maximum": 1000
+          },
+          "createdAtGt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the createdAt is greater than the specified value."
+          },
+          "createdAtLt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the createdAt is less than the specified value."
+          },
+          "createdAtGe": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the createdAt is greater than or equal to the specified value."
+          },
+          "createdAtLe": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the createdAt is less than or equal to the specified value."
+          },
+          "updatedAtGt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the updatedAt is greater than the specified value."
+          },
+          "updatedAtLt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the updatedAt is less than the specified value."
+          },
+          "updatedAtGe": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the updatedAt is greater than or equal to the specified value."
+          },
+          "updatedAtLe": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This will return items where the updatedAt is less than or equal to the specified value."
+          }
+        }
+      },
+      "SessionPaginatedResponse": {
+        "type": "object",
+        "properties": {
+          "results": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Session"
+            }
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/PaginationMeta"
+          }
+        },
+        "required": [
+          "results",
+          "metadata"
+        ]
+      },
+      "Assistant": {
+        "type": "object",
+        "properties": {
+          "transcriber": {
+            "description": "These are the options for the assistant's transcriber.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AssemblyAITranscriber",
+                "title": "AssemblyAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/AzureSpeechTranscriber",
+                "title": "AzureSpeechTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CustomTranscriber",
+                "title": "CustomTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramTranscriber",
+                "title": "DeepgramTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsTranscriber",
+                "title": "ElevenLabsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GladiaTranscriber",
+                "title": "GladiaTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleTranscriber",
+                "title": "GoogleTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
+                "title": "SpeechmaticsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/TalkscriberTranscriber",
+                "title": "TalkscriberTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAITranscriber",
+                "title": "OpenAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaTranscriber",
+                "title": "CartesiaTranscriber"
+              }
+            ]
+          },
+          "model": {
+            "description": "These are the options for the assistant's LLM.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AnthropicModel",
+                "title": "Anthropic"
+              },
+              {
+                "$ref": "#/components/schemas/AnyscaleModel",
+                "title": "Anyscale"
+              },
+              {
+                "$ref": "#/components/schemas/CerebrasModel",
+                "title": "Cerebras"
+              },
+              {
+                "$ref": "#/components/schemas/CustomLLMModel",
+                "title": "CustomLLM"
+              },
+              {
+                "$ref": "#/components/schemas/DeepInfraModel",
+                "title": "DeepInfra"
+              },
+              {
+                "$ref": "#/components/schemas/DeepSeekModel",
+                "title": "DeepSeek"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleModel",
+                "title": "Google"
+              },
+              {
+                "$ref": "#/components/schemas/GroqModel",
+                "title": "Groq"
+              },
+              {
+                "$ref": "#/components/schemas/InflectionAIModel",
+                "title": "InflectionAI"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIModel",
+                "title": "OpenAI"
+              },
+              {
+                "$ref": "#/components/schemas/OpenRouterModel",
+                "title": "OpenRouter"
+              },
+              {
+                "$ref": "#/components/schemas/PerplexityAIModel",
+                "title": "PerplexityAI"
+              },
+              {
+                "$ref": "#/components/schemas/TogetherAIModel",
+                "title": "Together"
+              },
+              {
+                "$ref": "#/components/schemas/XaiModel",
+                "title": "XAI"
+              }
+            ]
+          },
+          "voice": {
+            "description": "These are the options for the assistant's voice.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AzureVoice",
+                "title": "AzureVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaVoice",
+                "title": "CartesiaVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CustomVoice",
+                "title": "CustomVoice"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramVoice",
+                "title": "DeepgramVoice"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsVoice",
+                "title": "ElevenLabsVoice"
+              },
+              {
+                "$ref": "#/components/schemas/HumeVoice",
+                "title": "HumeVoice"
+              },
+              {
+                "$ref": "#/components/schemas/LMNTVoice",
+                "title": "LMNTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/NeuphonicVoice",
+                "title": "NeuphonicVoice"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoice",
+                "title": "OpenAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/PlayHTVoice",
+                "title": "PlayHTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/RimeAIVoice",
+                "title": "RimeAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SmallestAIVoice",
+                "title": "SmallestAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/TavusVoice",
+                "title": "TavusVoice"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoice",
+                "title": "VapiVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SesameVoice",
+                "title": "SesameVoice"
+              },
+              {
+                "$ref": "#/components/schemas/InworldVoice",
+                "title": "InworldVoice"
+              },
+              {
+                "$ref": "#/components/schemas/MinimaxVoice",
+                "title": "MinimaxVoice"
+              }
+            ]
+          },
+          "firstMessage": {
+            "type": "string",
+            "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.",
+            "example": "Hello! How can I help you today?"
+          },
+          "firstMessageInterruptionsEnabled": {
+            "type": "boolean",
+            "default": false
+          },
+          "firstMessageMode": {
+            "type": "string",
+            "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'",
+            "enum": [
+              "assistant-speaks-first",
+              "assistant-speaks-first-with-model-generated-message",
+              "assistant-waits-for-user"
+            ],
+            "example": "assistant-speaks-first"
+          },
+          "voicemailDetection": {
+            "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan",
+                "title": "Google"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan",
+                "title": "OpenAI"
+              },
+              {
+                "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan",
+                "title": "Twilio"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoicemailDetectionPlan",
+                "title": "Vapi"
+              }
+            ]
+          },
+          "clientMessages": {
+            "type": "array",
+            "enum": [
+              "conversation-update",
+              "function-call",
+              "function-call-result",
+              "hang",
+              "language-changed",
+              "metadata",
+              "model-output",
+              "speech-update",
+              "status-update",
+              "transcript",
+              "tool-calls",
+              "tool-calls-result",
+              "tool.completed",
+              "transfer-update",
+              "user-interrupted",
+              "voice-input",
+              "workflow.node.started"
+            ],
+            "example": [
+              "conversation-update",
+              "function-call",
+              "hang",
+              "model-output",
+              "speech-update",
+              "status-update",
+              "transfer-update",
+              "transcript",
+              "tool-calls",
+              "user-interrupted",
+              "voice-input",
+              "workflow.node.started"
+            ],
+            "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.",
+            "items": {
+              "type": "string",
+              "enum": [
+                "conversation-update",
+                "function-call",
+                "function-call-result",
+                "hang",
+                "language-changed",
+                "metadata",
+                "model-output",
+                "speech-update",
+                "status-update",
+                "transcript",
+                "tool-calls",
+                "tool-calls-result",
+                "tool.completed",
+                "transfer-update",
+                "user-interrupted",
+                "voice-input",
+                "workflow.node.started"
+              ]
+            }
+          },
+          "serverMessages": {
+            "type": "array",
+            "enum": [
+              "conversation-update",
+              "end-of-call-report",
+              "function-call",
+              "hang",
+              "language-changed",
+              "language-change-detected",
+              "model-output",
+              "phone-call-control",
+              "speech-update",
+              "status-update",
+              "transcript",
+              "transcript[transcriptType=\"final\"]",
+              "tool-calls",
+              "transfer-destination-request",
+              "transfer-update",
+              "user-interrupted",
+              "voice-input",
+              "chat.created",
+              "chat.deleted",
+              "session.created",
+              "session.updated",
+              "session.deleted"
+            ],
+            "example": [
+              "conversation-update",
+              "end-of-call-report",
+              "function-call",
+              "hang",
+              "speech-update",
+              "status-update",
+              "tool-calls",
+              "transfer-destination-request",
+              "user-interrupted"
+            ],
+            "description": "These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema.",
+            "items": {
+              "type": "string",
+              "enum": [
+                "conversation-update",
+                "end-of-call-report",
+                "function-call",
+                "hang",
+                "language-changed",
+                "language-change-detected",
+                "model-output",
+                "phone-call-control",
+                "speech-update",
+                "status-update",
+                "transcript",
+                "transcript[transcriptType=\"final\"]",
+                "tool-calls",
+                "transfer-destination-request",
+                "transfer-update",
+                "user-interrupted",
+                "voice-input",
+                "chat.created",
+                "chat.deleted",
+                "session.created",
+                "session.updated",
+                "session.deleted"
+              ]
+            }
+          },
+          "maxDurationSeconds": {
+            "type": "number",
+            "description": "This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended.\n\n@default 600 (10 minutes)",
+            "minimum": 10,
+            "maximum": 43200,
+            "example": 600
+          },
+          "backgroundSound": {
+            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
+            "oneOf": [
+              {
+                "type": "enum",
+                "enum": [
+                  "off",
+                  "office"
+                ],
+                "example": "office"
+              },
+              {
+                "type": "string",
+                "format": "uri",
+                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
+              }
+            ]
+          },
+          "modelOutputInMessagesEnabled": {
+            "type": "boolean",
+            "description": "This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech.\n\nDefault `false` while in beta.\n\n@default false",
+            "example": false
+          },
+          "transportConfigurations": {
+            "type": "array",
+            "description": "These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TransportConfigurationTwilio",
+                  "title": "Twilio"
+                }
+              ]
+            }
+          },
+          "observabilityPlan": {
+            "description": "This is the plan for observability of assistant's calls.\n\nCurrently, only Langfuse is supported.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
+                "title": "Langfuse"
+              }
+            ],
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
+              }
+            ]
+          },
+          "credentials": {
+            "type": "array",
+            "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "title": "AnthropicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "title": "AnyscaleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "title": "AssemblyAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
+                  "title": "AzureCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "title": "AzureOpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "title": "ByoSipTrunkCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "title": "CartesiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "title": "CerebrasCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "title": "CloudflareCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "title": "CustomLLMCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "title": "DeepgramCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "title": "DeepInfraCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "title": "DeepSeekCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "title": "ElevenLabsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
+                  "title": "GcpCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "title": "GladiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "title": "GhlCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "title": "GoogleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
+                  "title": "GroqCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
+                  "title": "HumeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "title": "InflectionAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "title": "LangfuseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
+                  "title": "LmntCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
+                  "title": "MakeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
+                  "title": "MistralCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "title": "NeuphonicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "title": "OpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "title": "OpenRouterCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "title": "PerplexityAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "title": "PlayHTCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "title": "RimeAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "title": "RunpodCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
+                  "title": "S3Credential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "title": "SmallestAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "title": "SpeechmaticsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "title": "SupabaseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
+                  "title": "TavusCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "title": "TogetherAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "title": "TrieveCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "title": "TwilioCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
+                  "title": "VonageCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "title": "WebhookCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
+                  "title": "XAiCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "title": "GoogleCalendarOAuth2ClientCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "title": "SlackOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "title": "GoHighLevelMCPCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInworldCredentialDTO",
+                  "title": "InworldCredential"
+                }
+              ],
+              "discriminator": {
+                "propertyName": "provider",
+                "mapping": {
+                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
+                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
+                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
+                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
+                  "make": "#/components/schemas/CreateMakeCredentialDTO",
+                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "s3": "#/components/schemas/CreateS3CredentialDTO",
+                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
+                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
+                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
+                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
+                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
+                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "inworld": "#/components/schemas/CreateInworldCredentialDTO",
+                  "minimax": "#/components/schemas/CreateMinimaxCredentialDTO"
+                }
+              }
+            }
+          },
+          "hooks": {
+            "type": "array",
+            "description": "This is a set of actions that will be performed on certain events.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CallHookCallEnding",
+                  "title": "CallHookCallEnding"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookAssistantSpeechInterrupted",
+                  "title": "CallHookAssistantSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechInterrupted",
+                  "title": "CallHookCustomerSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechTimeout",
+                  "title": "CallHookCustomerSpeechTimeout"
+                }
+              ]
+            }
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.",
+            "maxLength": 40
+          },
+          "voicemailMessage": {
+            "type": "string",
+            "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.",
+            "maxLength": 1000
+          },
+          "endCallMessage": {
+            "type": "string",
+            "description": "This is the message that the assistant will say if it ends the call.\n\nIf unspecified, it will hang up without saying anything.",
+            "maxLength": 1000
+          },
+          "endCallPhrases": {
+            "description": "This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "maxLength": 140,
+              "minLength": 2
+            }
+          },
+          "compliancePlan": {
+            "$ref": "#/components/schemas/CompliancePlan"
+          },
+          "metadata": {
+            "type": "object",
+            "description": "This is for metadata you want to store on the assistant."
+          },
+          "backgroundSpeechDenoisingPlan": {
+            "description": "This enables filtering of noise and background speech while the user is talking.\n\nFeatures:\n- Smart denoising using Krisp\n- Fourier denoising\n\nSmart denoising can be combined with or used independently of Fourier denoising.\n\nOrder of precedence:\n- Smart denoising\n- Fourier denoising",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/BackgroundSpeechDenoisingPlan"
+              }
+            ]
+          },
+          "analysisPlan": {
+            "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AnalysisPlan"
+              }
+            ]
+          },
+          "artifactPlan": {
+            "description": "This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ArtifactPlan"
+              }
+            ]
+          },
+          "startSpeakingPlan": {
+            "description": "This is the plan for when the assistant should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StartSpeakingPlan"
+              }
+            ]
+          },
+          "stopSpeakingPlan": {
+            "description": "This is the plan for when assistant should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StopSpeakingPlan"
+              }
+            ]
+          },
+          "monitorPlan": {
+            "description": "This is the plan for real-time monitoring of the assistant's calls.\n\nUsage:\n- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/MonitorPlan"
+              }
+            ]
+          },
+          "credentialIds": {
+            "description": "These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "keypadInputPlan": {
+            "$ref": "#/components/schemas/KeypadInputPlan"
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the assistant."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this assistant belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+          }
+        },
+        "required": [
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "AssistantPaginatedResponse": {
+        "type": "object",
+        "properties": {
+          "results": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Assistant"
+            }
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/PaginationMeta"
+          }
+        },
+        "required": [
+          "results",
+          "metadata"
+        ]
+      },
+      "AssistantVersionPaginatedResponse": {
+        "type": "object",
+        "properties": {
+          "results": {
+            "type": "array"
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/PaginationMeta"
+          },
+          "nextPageState": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "results",
+          "metadata"
+        ]
+      },
+      "UpdateAssistantDTO": {
+        "type": "object",
+        "properties": {
+          "transcriber": {
+            "description": "These are the options for the assistant's transcriber.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
+                "$ref": "#/components/schemas/AssemblyAITranscriber",
+                "title": "AssemblyAITranscriber"
               },
               {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
+                "$ref": "#/components/schemas/AzureSpeechTranscriber",
+                "title": "AzureSpeechTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CustomTranscriber",
+                "title": "CustomTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramTranscriber",
+                "title": "DeepgramTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsTranscriber",
+                "title": "ElevenLabsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GladiaTranscriber",
+                "title": "GladiaTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleTranscriber",
+                "title": "GoogleTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
+                "title": "SpeechmaticsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/TalkscriberTranscriber",
+                "title": "TalkscriberTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAITranscriber",
+                "title": "OpenAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaTranscriber",
+                "title": "CartesiaTranscriber"
+              }
+            ]
+          },
+          "model": {
+            "description": "These are the options for the assistant's LLM.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AnthropicModel",
+                "title": "Anthropic"
+              },
+              {
+                "$ref": "#/components/schemas/AnyscaleModel",
+                "title": "Anyscale"
+              },
+              {
+                "$ref": "#/components/schemas/CerebrasModel",
+                "title": "Cerebras"
+              },
+              {
+                "$ref": "#/components/schemas/CustomLLMModel",
+                "title": "CustomLLM"
+              },
+              {
+                "$ref": "#/components/schemas/DeepInfraModel",
+                "title": "DeepInfra"
+              },
+              {
+                "$ref": "#/components/schemas/DeepSeekModel",
+                "title": "DeepSeek"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleModel",
+                "title": "Google"
+              },
+              {
+                "$ref": "#/components/schemas/GroqModel",
+                "title": "Groq"
+              },
+              {
+                "$ref": "#/components/schemas/InflectionAIModel",
+                "title": "InflectionAI"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIModel",
+                "title": "OpenAI"
+              },
+              {
+                "$ref": "#/components/schemas/OpenRouterModel",
+                "title": "OpenRouter"
+              },
+              {
+                "$ref": "#/components/schemas/PerplexityAIModel",
+                "title": "PerplexityAI"
+              },
+              {
+                "$ref": "#/components/schemas/TogetherAIModel",
+                "title": "Together"
+              },
+              {
+                "$ref": "#/components/schemas/XaiModel",
+                "title": "XAI"
+              }
+            ]
+          },
+          "voice": {
+            "description": "These are the options for the assistant's voice.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AzureVoice",
+                "title": "AzureVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaVoice",
+                "title": "CartesiaVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CustomVoice",
+                "title": "CustomVoice"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramVoice",
+                "title": "DeepgramVoice"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsVoice",
+                "title": "ElevenLabsVoice"
+              },
+              {
+                "$ref": "#/components/schemas/HumeVoice",
+                "title": "HumeVoice"
+              },
+              {
+                "$ref": "#/components/schemas/LMNTVoice",
+                "title": "LMNTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/NeuphonicVoice",
+                "title": "NeuphonicVoice"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoice",
+                "title": "OpenAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/PlayHTVoice",
+                "title": "PlayHTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/RimeAIVoice",
+                "title": "RimeAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SmallestAIVoice",
+                "title": "SmallestAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/TavusVoice",
+                "title": "TavusVoice"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoice",
+                "title": "VapiVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SesameVoice",
+                "title": "SesameVoice"
+              },
+              {
+                "$ref": "#/components/schemas/InworldVoice",
+                "title": "InworldVoice"
+              },
+              {
+                "$ref": "#/components/schemas/MinimaxVoice",
+                "title": "MinimaxVoice"
+              }
+            ]
+          },
+          "firstMessage": {
+            "type": "string",
+            "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.",
+            "example": "Hello! How can I help you today?"
+          },
+          "firstMessageInterruptionsEnabled": {
+            "type": "boolean",
+            "default": false
+          },
+          "firstMessageMode": {
+            "type": "string",
+            "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'",
+            "enum": [
+              "assistant-speaks-first",
+              "assistant-speaks-first-with-model-generated-message",
+              "assistant-waits-for-user"
+            ],
+            "example": "assistant-speaks-first"
+          },
+          "voicemailDetection": {
+            "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan",
+                "title": "Google"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan",
+                "title": "OpenAI"
+              },
+              {
+                "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan",
+                "title": "Twilio"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoicemailDetectionPlan",
+                "title": "Vapi"
+              }
+            ]
+          },
+          "clientMessages": {
+            "type": "array",
+            "enum": [
+              "conversation-update",
+              "function-call",
+              "function-call-result",
+              "hang",
+              "language-changed",
+              "metadata",
+              "model-output",
+              "speech-update",
+              "status-update",
+              "transcript",
+              "tool-calls",
+              "tool-calls-result",
+              "tool.completed",
+              "transfer-update",
+              "user-interrupted",
+              "voice-input",
+              "workflow.node.started"
+            ],
+            "example": [
+              "conversation-update",
+              "function-call",
+              "hang",
+              "model-output",
+              "speech-update",
+              "status-update",
+              "transfer-update",
+              "transcript",
+              "tool-calls",
+              "user-interrupted",
+              "voice-input",
+              "workflow.node.started"
+            ],
+            "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.",
+            "items": {
+              "type": "string",
+              "enum": [
+                "conversation-update",
+                "function-call",
+                "function-call-result",
+                "hang",
+                "language-changed",
+                "metadata",
+                "model-output",
+                "speech-update",
+                "status-update",
+                "transcript",
+                "tool-calls",
+                "tool-calls-result",
+                "tool.completed",
+                "transfer-update",
+                "user-interrupted",
+                "voice-input",
+                "workflow.node.started"
+              ]
+            }
+          },
+          "serverMessages": {
+            "type": "array",
+            "enum": [
+              "conversation-update",
+              "end-of-call-report",
+              "function-call",
+              "hang",
+              "language-changed",
+              "language-change-detected",
+              "model-output",
+              "phone-call-control",
+              "speech-update",
+              "status-update",
+              "transcript",
+              "transcript[transcriptType=\"final\"]",
+              "tool-calls",
+              "transfer-destination-request",
+              "transfer-update",
+              "user-interrupted",
+              "voice-input",
+              "chat.created",
+              "chat.deleted",
+              "session.created",
+              "session.updated",
+              "session.deleted"
+            ],
+            "example": [
+              "conversation-update",
+              "end-of-call-report",
+              "function-call",
+              "hang",
+              "speech-update",
+              "status-update",
+              "tool-calls",
+              "transfer-destination-request",
+              "user-interrupted"
+            ],
+            "description": "These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema.",
+            "items": {
+              "type": "string",
+              "enum": [
+                "conversation-update",
+                "end-of-call-report",
+                "function-call",
+                "hang",
+                "language-changed",
+                "language-change-detected",
+                "model-output",
+                "phone-call-control",
+                "speech-update",
+                "status-update",
+                "transcript",
+                "transcript[transcriptType=\"final\"]",
+                "tool-calls",
+                "transfer-destination-request",
+                "transfer-update",
+                "user-interrupted",
+                "voice-input",
+                "chat.created",
+                "chat.deleted",
+                "session.created",
+                "session.updated",
+                "session.deleted"
+              ]
+            }
+          },
+          "maxDurationSeconds": {
+            "type": "number",
+            "description": "This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended.\n\n@default 600 (10 minutes)",
+            "minimum": 10,
+            "maximum": 43200,
+            "example": 600
+          },
+          "backgroundSound": {
+            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
+            "oneOf": [
+              {
+                "type": "enum",
+                "enum": [
+                  "off",
+                  "office"
+                ],
+                "example": "office"
+              },
+              {
+                "type": "string",
+                "format": "uri",
+                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
+              }
+            ]
+          },
+          "modelOutputInMessagesEnabled": {
+            "type": "boolean",
+            "description": "This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech.\n\nDefault `false` while in beta.\n\n@default false",
+            "example": false
+          },
+          "transportConfigurations": {
+            "type": "array",
+            "description": "These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TransportConfigurationTwilio",
+                  "title": "Twilio"
+                }
+              ]
+            }
+          },
+          "observabilityPlan": {
+            "description": "This is the plan for observability of assistant's calls.\n\nCurrently, only Langfuse is supported.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
+                "title": "Langfuse"
+              }
+            ],
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
+              }
+            ]
+          },
+          "credentials": {
+            "type": "array",
+            "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "title": "AnthropicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "title": "AnyscaleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "title": "AssemblyAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
+                  "title": "AzureCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "title": "AzureOpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "title": "ByoSipTrunkCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "title": "CartesiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "title": "CerebrasCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "title": "CloudflareCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "title": "CustomLLMCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "title": "DeepgramCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "title": "DeepInfraCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "title": "DeepSeekCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "title": "ElevenLabsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
+                  "title": "GcpCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "title": "GladiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "title": "GhlCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "title": "GoogleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
+                  "title": "GroqCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
+                  "title": "HumeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "title": "InflectionAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "title": "LangfuseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
+                  "title": "LmntCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
+                  "title": "MakeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
+                  "title": "MistralCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "title": "NeuphonicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "title": "OpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "title": "OpenRouterCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "title": "PerplexityAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "title": "PlayHTCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "title": "RimeAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "title": "RunpodCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
+                  "title": "S3Credential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "title": "SmallestAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "title": "SpeechmaticsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "title": "SupabaseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
+                  "title": "TavusCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "title": "TogetherAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "title": "TrieveCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "title": "TwilioCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
+                  "title": "VonageCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "title": "WebhookCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
+                  "title": "XAiCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "title": "GoogleCalendarOAuth2ClientCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "title": "SlackOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "title": "GoHighLevelMCPCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInworldCredentialDTO",
+                  "title": "InworldCredential"
+                }
+              ],
+              "discriminator": {
+                "propertyName": "provider",
+                "mapping": {
+                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
+                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
+                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
+                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
+                  "make": "#/components/schemas/CreateMakeCredentialDTO",
+                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "s3": "#/components/schemas/CreateS3CredentialDTO",
+                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
+                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
+                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
+                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
+                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
+                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "inworld": "#/components/schemas/CreateInworldCredentialDTO",
+                  "minimax": "#/components/schemas/CreateMinimaxCredentialDTO"
+                }
               }
-            ]
+            }
           },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the call."
+          "hooks": {
+            "type": "array",
+            "description": "This is a set of actions that will be performed on certain events.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/CallHookCallEnding",
+                  "title": "CallHookCallEnding"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookAssistantSpeechInterrupted",
+                  "title": "CallHookAssistantSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechInterrupted",
+                  "title": "CallHookCustomerSpeechInterrupted"
+                },
+                {
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechTimeout",
+                  "title": "CallHookCustomerSpeechTimeout"
+                }
+              ]
+            }
           },
-          "orgId": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this call belongs to."
+            "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.",
+            "maxLength": 40
           },
-          "createdAt": {
-            "format": "date-time",
+          "voicemailMessage": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the call was created."
+            "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.",
+            "maxLength": 1000
           },
-          "updatedAt": {
-            "format": "date-time",
+          "endCallMessage": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the call was last updated."
+            "description": "This is the message that the assistant will say if it ends the call.\n\nIf unspecified, it will hang up without saying anything.",
+            "maxLength": 1000
           },
-          "startedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the call was started."
+          "endCallPhrases": {
+            "description": "This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.",
+            "type": "array",
+            "items": {
+              "type": "string",
+              "maxLength": 140,
+              "minLength": 2
+            }
           },
-          "endedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the call was ended."
+          "compliancePlan": {
+            "$ref": "#/components/schemas/CompliancePlan"
           },
-          "cost": {
-            "type": "number",
-            "description": "This is the cost of the call in USD."
+          "metadata": {
+            "type": "object",
+            "description": "This is for metadata you want to store on the assistant."
           },
-          "costBreakdown": {
-            "description": "This is the cost of the call in USD.",
+          "backgroundSpeechDenoisingPlan": {
+            "description": "This enables filtering of noise and background speech while the user is talking.\n\nFeatures:\n- Smart denoising using Krisp\n- Fourier denoising\n\nSmart denoising can be combined with or used independently of Fourier denoising.\n\nOrder of precedence:\n- Smart denoising\n- Fourier denoising",
             "allOf": [
               {
-                "$ref": "#/components/schemas/CostBreakdown"
+                "$ref": "#/components/schemas/BackgroundSpeechDenoisingPlan"
+              }
+            ]
+          },
+          "analysisPlan": {
+            "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AnalysisPlan"
               }
             ]
           },
           "artifactPlan": {
-            "description": "This is a copy of assistant artifact plan. This isn't actually stored on the call but rather just returned in POST /call/web to enable artifact creation client side.",
+            "description": "This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/ArtifactPlan"
               }
             ]
           },
-          "analysis": {
-            "description": "This is the analysis of the call. Configure in `assistant.analysisPlan`.",
+          "startSpeakingPlan": {
+            "description": "This is the plan for when the assistant should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Analysis"
+                "$ref": "#/components/schemas/StartSpeakingPlan"
               }
             ]
           },
-          "monitor": {
-            "description": "This is to real-time monitor the call. Configure in `assistant.monitorPlan`.",
+          "stopSpeakingPlan": {
+            "description": "This is the plan for when assistant should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Monitor"
+                "$ref": "#/components/schemas/StopSpeakingPlan"
               }
             ]
           },
-          "artifact": {
-            "description": "These are the artifacts created from the call. Configure in `assistant.artifactPlan`.",
+          "monitorPlan": {
+            "description": "This is the plan for real-time monitoring of the assistant's calls.\n\nUsage:\n- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Artifact"
+                "$ref": "#/components/schemas/MonitorPlan"
               }
             ]
           },
-          "phoneCallProviderId": {
+          "credentialIds": {
+            "description": "These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "keypadInputPlan": {
+            "$ref": "#/components/schemas/KeypadInputPlan"
+          }
+        }
+      },
+      "ByoPhoneNumber": {
+        "type": "object",
+        "properties": {
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
+          },
+          "hooks": {
+            "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
+            }
+          },
+          "provider": {
+            "type": "string",
+            "description": "This is to bring your own phone numbers from your own SIP trunks or Carriers.",
+            "enum": [
+              "byo-phone-number"
+            ]
+          },
+          "numberE164CheckEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
+            "default": true
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the phone number."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this phone number belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the phone number was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the phone number was last updated."
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the status of the phone number.",
+            "enum": [
+              "active",
+              "activating",
+              "blocked"
+            ]
+          },
+          "name": {
             "type": "string",
-            "description": "The ID of the call as provided by the phone number service. callSid in Twilio. conversationUuid in Vonage. callControlId in Telnyx.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
           },
           "assistantId": {
             "type": "string",
-            "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead."
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "assistant": {
-            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.",
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
             "allOf": [
               {
-                "$ref": "#/components/schemas/CreateAssistantDTO"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "assistantOverrides": {
-            "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.",
-            "allOf": [
+          "number": {
+            "type": "string",
+            "description": "This is the number of the customer.",
+            "minLength": 3,
+            "maxLength": 40
+          },
+          "credentialId": {
+            "type": "string",
+            "description": "This is the credential of your own SIP trunk or Carrier (type `byo-sip-trunk`) which can be used to make calls to this phone number.\n\nYou can add the SIP trunk or Carrier credential in the Provider Credentials page on the Dashboard to get the credentialId."
+          }
+        },
+        "required": [
+          "provider",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "credentialId"
+        ]
+      },
+      "TwilioPhoneNumber": {
+        "type": "object",
+        "properties": {
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/AssistantOverrides"
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
               }
             ]
           },
+          "hooks": {
+            "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
+            }
+          },
+          "provider": {
+            "type": "string",
+            "description": "This is to use numbers bought on Twilio.",
+            "enum": [
+              "twilio"
+            ]
+          },
+          "smsEnabled": {
+            "type": "boolean",
+            "description": "Controls whether Vapi sets the messaging webhook URL on the Twilio number during import.\n\nIf set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is.\nIf `true` or omitted (default), Vapi will configure both the voice and messaging URLs.\n\n@default true",
+            "default": true
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the phone number."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this phone number belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the phone number was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the phone number was last updated."
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the status of the phone number.",
+            "enum": [
+              "active",
+              "activating",
+              "blocked"
+            ]
+          },
+          "twilioAuthToken": {
+            "type": "string",
+            "description": "This is the Twilio Auth Token for the phone number."
+          },
+          "twilioApiKey": {
+            "type": "string",
+            "description": "This is the Twilio API Key for the phone number."
+          },
+          "twilioApiSecret": {
+            "type": "string",
+            "description": "This is the Twilio API Secret for the phone number."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
           "squadId": {
             "type": "string",
-            "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead."
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "squad": {
-            "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.",
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
             "allOf": [
               {
-                "$ref": "#/components/schemas/CreateSquadDTO"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "phoneNumberId": {
+          "number": {
             "type": "string",
-            "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+            "description": "These are the digits of the phone number you own on your Twilio."
           },
-          "phoneNumber": {
-            "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
-            "allOf": [
+          "twilioAccountSid": {
+            "type": "string",
+            "description": "This is the Twilio Account SID for the phone number."
+          }
+        },
+        "required": [
+          "provider",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "number",
+          "twilioAccountSid"
+        ]
+      },
+      "VonagePhoneNumber": {
+        "type": "object",
+        "properties": {
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO"
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
               }
             ]
           },
-          "customerId": {
+          "hooks": {
+            "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
+            }
+          },
+          "provider": {
             "type": "string",
-            "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+            "description": "This is to use numbers bought on Vonage.",
+            "enum": [
+              "vonage"
+            ]
           },
-          "customer": {
-            "description": "This is the customer that will be called. To call an existing customer, use `customerId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CreateCustomerDTO"
-              }
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the phone number."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this phone number belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the phone number was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the phone number was last updated."
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the status of the phone number.",
+            "enum": [
+              "active",
+              "activating",
+              "blocked"
             ]
           },
           "name": {
             "type": "string",
-            "description": "This is the name of the call. This is just for your own reference.",
+            "description": "This is the name of the phone number. This is just for your own reference.",
             "maxLength": 40
           },
-          "schedulePlan": {
-            "description": "This is the schedule plan of the call.",
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
             "allOf": [
               {
-                "$ref": "#/components/schemas/SchedulePlan"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "transport": {
-            "type": "object",
-            "description": "This is the transport of the call."
+          "number": {
+            "type": "string",
+            "description": "These are the digits of the phone number you own on your Vonage."
+          },
+          "credentialId": {
+            "type": "string",
+            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
           }
         },
         "required": [
+          "provider",
           "id",
           "orgId",
           "createdAt",
-          "updatedAt"
+          "updatedAt",
+          "number",
+          "credentialId"
         ]
       },
-      "CallBatchError": {
+      "SipAuthentication": {
         "type": "object",
         "properties": {
-          "customer": {
-            "$ref": "#/components/schemas/CreateCustomerDTO"
+          "realm": {
+            "type": "string",
+            "description": "This will be expected in the `realm` field of the `authorization` header of the SIP INVITE. Defaults to sip.vapi.ai."
           },
-          "error": {
-            "type": "string"
-          }
-        },
-        "required": [
-          "customer",
-          "error"
-        ]
-      },
-      "CallBatchResponse": {
-        "type": "object",
-        "properties": {
-          "results": {
-            "description": "This is the list of calls that were created.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Call"
-            }
+          "username": {
+            "type": "string",
+            "description": "This will be expected in the `username` field of the `authorization` header of the SIP INVITE.",
+            "minLength": 20,
+            "maxLength": 40
           },
-          "errors": {
-            "description": "This is the list of calls that failed to be created.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/CallBatchError"
-            }
+          "password": {
+            "type": "string",
+            "description": "This will be expected to generate the `response` field of the `authorization` header of the SIP INVITE, through digest authentication.",
+            "minLength": 20,
+            "maxLength": 40
           }
         },
         "required": [
-          "results",
-          "errors"
+          "username",
+          "password"
         ]
       },
-      "CreateCallDTO": {
+      "VapiPhoneNumber": {
         "type": "object",
         "properties": {
-          "customers": {
-            "description": "This is used to issue batch calls to multiple customers.\n\nOnly relevant for `outboundPhoneCall`. To call a single customer, use `customer` instead.",
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
+          },
+          "hooks": {
             "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
             "items": {
-              "$ref": "#/components/schemas/CreateCustomerDTO"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
             }
           },
-          "name": {
+          "provider": {
             "type": "string",
-            "description": "This is the name of the call. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "schedulePlan": {
-            "description": "This is the schedule plan of the call.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SchedulePlan"
-              }
+            "description": "This is to create free SIP phone numbers on Vapi.",
+            "enum": [
+              "vapi"
             ]
           },
-          "transport": {
-            "type": "object",
-            "description": "This is the transport of the call."
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the phone number."
           },
-          "assistantId": {
+          "orgId": {
             "type": "string",
-            "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead."
+            "description": "This is the unique identifier for the org that this phone number belongs to."
           },
-          "assistant": {
-            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CreateAssistantDTO"
-              }
-            ]
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the phone number was created."
           },
-          "assistantOverrides": {
-            "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AssistantOverrides"
-              }
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the phone number was last updated."
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the status of the phone number.",
+            "enum": [
+              "active",
+              "activating",
+              "blocked"
             ]
           },
-          "squadId": {
+          "number": {
+            "type": "string",
+            "description": "These are the digits of the phone number you purchased from Vapi."
+          },
+          "name": {
             "type": "string",
-            "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead."
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
           },
-          "squad": {
-            "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CreateSquadDTO"
-              }
-            ]
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "phoneNumberId": {
+          "workflowId": {
             "type": "string",
-            "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "phoneNumber": {
-            "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
             "allOf": [
               {
-                "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "customerId": {
+          "numberDesiredAreaCode": {
             "type": "string",
-            "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+            "description": "This is the area code of the phone number to purchase.",
+            "minLength": 3,
+            "maxLength": 3
           },
-          "customer": {
-            "description": "This is the customer that will be called. To call an existing customer, use `customerId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+          "sipUri": {
+            "type": "string",
+            "description": "This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer.\n\nThis is case-insensitive."
+          },
+          "authentication": {
+            "description": "This enables authentication for incoming SIP INVITE requests to the `sipUri`.\n\nIf not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/CreateCustomerDTO"
+                "$ref": "#/components/schemas/SipAuthentication"
               }
             ]
           }
-        }
-      },
-      "PaginationMeta": {
-        "type": "object",
-        "properties": {
-          "itemsPerPage": {
-            "type": "number"
-          },
-          "totalItems": {
-            "type": "number"
-          },
-          "currentPage": {
-            "type": "number"
-          }
         },
         "required": [
-          "itemsPerPage",
-          "totalItems",
-          "currentPage"
+          "provider",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
         ]
       },
-      "CallPaginatedResponse": {
+      "TelnyxPhoneNumber": {
         "type": "object",
         "properties": {
-          "results": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Call"
-            }
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
           },
-          "metadata": {
-            "$ref": "#/components/schemas/PaginationMeta"
-          }
-        },
-        "required": [
-          "results",
-          "metadata"
-        ]
-      },
-      "CreateOutboundCallDTO": {
-        "type": "object",
-        "properties": {
-          "customers": {
-            "description": "This is used to issue batch calls to multiple customers.\n\nOnly relevant for `outboundPhoneCall`. To call a single customer, use `customer` instead.",
+          "hooks": {
             "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
             "items": {
-              "$ref": "#/components/schemas/CreateCustomerDTO"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
             }
           },
-          "name": {
+          "provider": {
             "type": "string",
-            "description": "This is the name of the call. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "schedulePlan": {
-            "description": "This is the schedule plan of the call.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SchedulePlan"
-              }
+            "description": "This is to use numbers bought on Telnyx.",
+            "enum": [
+              "telnyx"
             ]
           },
-          "transport": {
-            "type": "object",
-            "description": "This is the transport of the call."
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the phone number."
           },
-          "assistantId": {
+          "orgId": {
             "type": "string",
-            "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead."
+            "description": "This is the unique identifier for the org that this phone number belongs to."
           },
-          "assistant": {
-            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CreateAssistantDTO"
-              }
-            ]
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the phone number was created."
           },
-          "assistantOverrides": {
-            "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AssistantOverrides"
-              }
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the phone number was last updated."
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the status of the phone number.",
+            "enum": [
+              "active",
+              "activating",
+              "blocked"
             ]
           },
-          "squadId": {
+          "name": {
             "type": "string",
-            "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead."
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
           },
-          "squad": {
-            "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CreateSquadDTO"
-              }
-            ]
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "phoneNumberId": {
+          "workflowId": {
             "type": "string",
-            "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "phoneNumber": {
-            "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
             "allOf": [
               {
-                "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "customerId": {
+          "number": {
             "type": "string",
-            "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type."
+            "description": "These are the digits of the phone number you own on your Telnyx."
           },
-          "customer": {
-            "description": "This is the customer that will be called. To call an existing customer, use `customerId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CreateCustomerDTO"
-              }
-            ]
+          "credentialId": {
+            "type": "string",
+            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
           }
-        }
+        },
+        "required": [
+          "provider",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "number",
+          "credentialId"
+        ]
       },
-      "CreateWebCallDTO": {
+      "CreateByoPhoneNumberDTO": {
         "type": "object",
         "properties": {
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead."
-          },
-          "assistant": {
-            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.",
-            "allOf": [
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/CreateAssistantDTO"
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
               }
             ]
           },
-          "assistantOverrides": {
-            "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AssistantOverrides"
-              }
+          "hooks": {
+            "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
+            }
+          },
+          "provider": {
+            "type": "string",
+            "description": "This is to bring your own phone numbers from your own SIP trunks or Carriers.",
+            "enum": [
+              "byo-phone-number"
             ]
           },
-          "squadId": {
+          "numberE164CheckEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
+            "default": true
+          },
+          "number": {
+            "type": "string",
+            "description": "This is the number of the customer.",
+            "minLength": 3,
+            "maxLength": 40
+          },
+          "credentialId": {
             "type": "string",
-            "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead."
+            "description": "This is the credential of your own SIP trunk or Carrier (type `byo-sip-trunk`) which can be used to make calls to this phone number.\n\nYou can add the SIP trunk or Carrier credential in the Provider Credentials page on the Dashboard to get the credentialId."
           },
-          "squad": {
-            "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CreateSquadDTO"
-              }
-            ]
-          }
-        }
-      },
-      "UpdateCallDTO": {
-        "type": "object",
-        "properties": {
           "name": {
             "type": "string",
-            "description": "This is the name of the call. This is just for your own reference.",
+            "description": "This is the name of the phone number. This is just for your own reference.",
             "maxLength": 40
-          }
-        }
-      },
-      "ChatServiceResponse": {
-        "type": "object",
-        "properties": {}
-      },
-      "ChatCompletionMessageMetadata": {
-        "type": "object",
-        "properties": {
-          "taskName": {
-            "type": "string"
           },
-          "taskType": {
-            "type": "string"
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "taskOutput": {
-            "type": "string"
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "taskState": {
-            "type": "object"
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "nodeTrace": {
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
           }
         },
         "required": [
-          "taskName",
-          "taskType",
-          "taskOutput"
+          "provider",
+          "credentialId"
         ]
       },
-      "ChatCompletionMessageWorkflows": {
+      "CreateTwilioPhoneNumberDTO": {
         "type": "object",
         "properties": {
-          "role": {
-            "type": "object"
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
           },
-          "content": {
-            "type": "string",
-            "nullable": true
+          "hooks": {
+            "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
+            }
           },
-          "metadata": {
-            "$ref": "#/components/schemas/ChatCompletionMessageMetadata"
-          }
-        },
-        "required": [
-          "role",
-          "content"
-        ]
-      },
-      "Say": {
-        "type": "object",
-        "properties": {
-          "type": {
+          "provider": {
             "type": "string",
+            "description": "This is to use numbers bought on Twilio.",
             "enum": [
-              "say"
+              "twilio"
             ]
           },
-          "exact": {
+          "smsEnabled": {
+            "type": "boolean",
+            "description": "Controls whether Vapi sets the messaging webhook URL on the Twilio number during import.\n\nIf set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is.\nIf `true` or omitted (default), Vapi will configure both the voice and messaging URLs.\n\n@default true",
+            "default": true
+          },
+          "number": {
             "type": "string",
-            "maxLength": 1000
+            "description": "These are the digits of the phone number you own on your Twilio."
           },
-          "prompt": {
+          "twilioAccountSid": {
             "type": "string",
-            "maxLength": 1000
+            "description": "This is the Twilio Account SID for the phone number."
           },
-          "name": {
+          "twilioAuthToken": {
             "type": "string",
-            "maxLength": 80
+            "description": "This is the Twilio Auth Token for the phone number."
           },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the task."
-          }
-        },
-        "required": [
-          "type",
-          "name"
-        ]
-      },
-      "SayHook": {
-        "type": "object",
-        "properties": {
-          "type": {
+          "twilioApiKey": {
             "type": "string",
-            "enum": [
-              "say"
-            ]
+            "description": "This is the Twilio API Key for the phone number."
           },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the task."
+          "twilioApiSecret": {
+            "type": "string",
+            "description": "This is the Twilio API Secret for the phone number."
           },
-          "exact": {
+          "name": {
             "type": "string",
-            "maxLength": 1000
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
           },
-          "prompt": {
+          "assistantId": {
             "type": "string",
-            "maxLength": 1000
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
           }
         },
         "required": [
-          "type"
+          "provider",
+          "number",
+          "twilioAccountSid"
         ]
       },
-      "Hook": {
+      "CreateVonagePhoneNumberDTO": {
         "type": "object",
         "properties": {
-          "on": {
-            "type": "string",
-            "enum": [
-              "task.start",
-              "task.output.confirmation",
-              "task.delayed"
-            ],
-            "maxLength": 80
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
           },
-          "do": {
+          "hooks": {
             "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
             "items": {
-              "$ref": "#/components/schemas/SayHook"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
             }
-          }
-        },
-        "required": [
-          "on",
-          "do"
-        ]
-      },
-      "Gather": {
-        "type": "object",
-        "properties": {
-          "type": {
+          },
+          "provider": {
             "type": "string",
+            "description": "This is to use numbers bought on Vonage.",
             "enum": [
-              "gather"
+              "vonage"
             ]
           },
-          "output": {
-            "$ref": "#/components/schemas/JsonSchema"
+          "number": {
+            "type": "string",
+            "description": "These are the digits of the phone number you own on your Vonage."
           },
-          "confirmContent": {
-            "type": "boolean",
-            "description": "This is whether or not the workflow should read back the gathered data to the user, and ask about its correctness."
+          "credentialId": {
+            "type": "string",
+            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
           },
-          "hooks": {
-            "description": "This is a list of hooks for a task.\nEach hook is a list of tasks to run on a trigger (such as on start, on failure, etc).\nOnly Say is supported for now.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Hook"
-            }
+          "name": {
+            "type": "string",
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
           },
-          "maxRetries": {
-            "type": "number",
-            "description": "This is the number of times we should try to gather the information from the user before we failover to the fail path. An example of this would be a user refusing to give their phone number for privacy reasons, and then going down a different path on account of this"
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "literalTemplate": {
+          "workflowId": {
             "type": "string",
-            "description": "This is a liquid templating string. On the first call to Gather, the template will be filled out with variables from the context, and will be spoken verbatim to the user. An example would be \"Base on your zipcode, it looks like you could be in one of these counties: {{ counties | join: \", \" }}. Which one do you live in?\""
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "name": {
+          "squadId": {
             "type": "string",
-            "maxLength": 80
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the task."
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
           }
         },
         "required": [
-          "type",
-          "output",
-          "name"
+          "provider",
+          "number",
+          "credentialId"
         ]
       },
-      "ApiRequest": {
+      "CreateVapiPhoneNumberDTO": {
         "type": "object",
         "properties": {
-          "type": {
-            "type": "string",
-            "enum": [
-              "apiRequest"
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
             ]
           },
-          "method": {
+          "hooks": {
+            "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
+            }
+          },
+          "provider": {
             "type": "string",
+            "description": "This is to create free SIP phone numbers on Vapi.",
             "enum": [
-              "POST",
-              "GET"
+              "vapi"
             ]
           },
-          "url": {
+          "numberDesiredAreaCode": {
             "type": "string",
-            "description": "Api endpoint to send requests to."
+            "description": "This is the area code of the phone number to purchase.",
+            "minLength": 3,
+            "maxLength": 3
           },
-          "headers": {
-            "description": "These are the custom headers to include in the Api Request sent.\n\nEach key-value pair represents a header name and its value.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/JsonSchema"
-              }
-            ]
+          "sipUri": {
+            "type": "string",
+            "description": "This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer.\n\nThis is case-insensitive."
           },
-          "body": {
-            "description": "This defined the JSON body of your Api Request. For example, if `body_schema`\nincluded \"my_field\": \"my_gather_statement.user_age\", then the json body sent to the server would have that particular value assign to it.\nRight now, only data from gather statements are supported.",
+          "authentication": {
+            "description": "This enables authentication for incoming SIP INVITE requests to the `sipUri`.\n\nIf not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/JsonSchema"
+                "$ref": "#/components/schemas/SipAuthentication"
               }
             ]
           },
-          "mode": {
+          "name": {
             "type": "string",
-            "description": "This is the mode of the Api Request.\nWe only support BLOCKING and BACKGROUND for now.",
-            "enum": [
-              "blocking",
-              "background"
-            ]
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
           },
-          "hooks": {
-            "description": "This is a list of hooks for a task.\nEach hook is a list of tasks to run on a trigger (such as on start, on failure, etc).\nOnly Say is supported for now.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Hook"
-            }
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "output": {
-            "description": "This is the schema for the outputs of the Api Request.",
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
             "allOf": [
               {
-                "$ref": "#/components/schemas/JsonSchema"
+                "$ref": "#/components/schemas/Server"
               }
             ]
-          },
-          "name": {
-            "type": "string",
-            "maxLength": 80
-          },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the task."
           }
         },
         "required": [
-          "type",
-          "method",
-          "url",
-          "mode",
-          "name"
+          "provider"
         ]
       },
-      "Hangup": {
+      "CreateTelnyxPhoneNumberDTO": {
         "type": "object",
         "properties": {
-          "type": {
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
+          },
+          "hooks": {
+            "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
+            }
+          },
+          "provider": {
             "type": "string",
+            "description": "This is to use numbers bought on Telnyx.",
             "enum": [
-              "hangup"
+              "telnyx"
             ]
           },
+          "number": {
+            "type": "string",
+            "description": "These are the digits of the phone number you own on your Telnyx."
+          },
+          "credentialId": {
+            "type": "string",
+            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
+          },
           "name": {
             "type": "string",
-            "maxLength": 80
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
           },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the task."
-          }
-        },
-        "required": [
-          "type",
-          "name"
-        ]
-      },
-      "Transfer": {
-        "type": "object",
-        "properties": {
-          "type": {
+          "assistantId": {
             "type": "string",
-            "enum": [
-              "transfer"
-            ]
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "destination": {
-            "type": "object"
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "name": {
+          "squadId": {
             "type": "string",
-            "maxLength": 80
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the task."
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
           }
         },
         "required": [
-          "type",
-          "destination",
-          "name"
+          "provider",
+          "number",
+          "credentialId"
         ]
       },
-      "CreateWorkflowDTO": {
+      "UpdateByoPhoneNumberDTO": {
         "type": "object",
         "properties": {
-          "nodes": {
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
+          },
+          "hooks": {
             "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/Say",
-                  "title": "Say"
-                },
-                {
-                  "$ref": "#/components/schemas/Gather",
-                  "title": "Gather"
-                },
-                {
-                  "$ref": "#/components/schemas/ApiRequest",
-                  "title": "ApiRequest"
-                },
-                {
-                  "$ref": "#/components/schemas/Hangup",
-                  "title": "Hangup"
-                },
-                {
-                  "$ref": "#/components/schemas/Transfer",
-                  "title": "Transfer"
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
                 }
               ]
             }
           },
-          "model": {
-            "description": "These are the options for the workflow's LLM.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/AnthropicModel",
-                "title": "Anthropic"
-              },
-              {
-                "$ref": "#/components/schemas/AnyscaleModel",
-                "title": "Anyscale"
-              },
-              {
-                "$ref": "#/components/schemas/CerebrasModel",
-                "title": "Cerebras"
-              },
-              {
-                "$ref": "#/components/schemas/CustomLLMModel",
-                "title": "CustomLLM"
-              },
-              {
-                "$ref": "#/components/schemas/DeepInfraModel",
-                "title": "DeepInfra"
-              },
-              {
-                "$ref": "#/components/schemas/DeepSeekModel",
-                "title": "DeepSeek"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleModel",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/GroqModel",
-                "title": "Groq"
-              },
-              {
-                "$ref": "#/components/schemas/InflectionAIModel",
-                "title": "InflectionAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIModel",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenRouterModel",
-                "title": "OpenRouter"
-              },
-              {
-                "$ref": "#/components/schemas/PerplexityAIModel",
-                "title": "PerplexityAI"
-              },
-              {
-                "$ref": "#/components/schemas/TogetherAIModel",
-                "title": "Together"
-              },
+          "numberE164CheckEnabled": {
+            "type": "boolean",
+            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
+            "default": true
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/XaiModel",
-                "title": "XAI"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "name": {
+          "number": {
             "type": "string",
-            "maxLength": 80
+            "description": "This is the number of the customer.",
+            "minLength": 3,
+            "maxLength": 40
           },
-          "edges": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Edge"
-            }
+          "credentialId": {
+            "type": "string",
+            "description": "This is the credential of your own SIP trunk or Carrier (type `byo-sip-trunk`) which can be used to make calls to this phone number.\n\nYou can add the SIP trunk or Carrier credential in the Provider Credentials page on the Dashboard to get the credentialId."
           }
-        },
-        "required": [
-          "nodes",
-          "name",
-          "edges"
-        ]
+        }
       },
-      "ChatCompletionsDTO": {
+      "UpdateTwilioPhoneNumberDTO": {
         "type": "object",
         "properties": {
-          "messages": {
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
+              }
+            ]
+          },
+          "hooks": {
             "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
             "items": {
-              "$ref": "#/components/schemas/ChatCompletionMessageWorkflows"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
             }
           },
+          "smsEnabled": {
+            "type": "boolean",
+            "description": "Controls whether Vapi sets the messaging webhook URL on the Twilio number during import.\n\nIf set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is.\nIf `true` or omitted (default), Vapi will configure both the voice and messaging URLs.\n\n@default true",
+            "default": true
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
           "workflowId": {
-            "type": "string"
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "workflow": {
-            "$ref": "#/components/schemas/CreateWorkflowDTO"
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "number": {
+            "type": "string",
+            "description": "These are the digits of the phone number you own on your Twilio."
+          },
+          "twilioAccountSid": {
+            "type": "string",
+            "description": "This is the Twilio Account SID for the phone number."
+          },
+          "twilioAuthToken": {
+            "type": "string",
+            "description": "This is the Twilio Auth Token for the phone number."
+          },
+          "twilioApiKey": {
+            "type": "string",
+            "description": "This is the Twilio API Key for the phone number."
+          },
+          "twilioApiSecret": {
+            "type": "string",
+            "description": "This is the Twilio API Secret for the phone number."
           }
-        },
-        "required": [
-          "messages"
-        ]
+        }
       },
-      "Assistant": {
+      "UpdateVonagePhoneNumberDTO": {
         "type": "object",
         "properties": {
-          "transcriber": {
-            "description": "These are the options for the assistant's transcriber.",
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/AssemblyAITranscriber",
-                "title": "AssemblyAI"
-              },
-              {
-                "$ref": "#/components/schemas/AzureSpeechTranscriber",
-                "title": "Azure"
-              },
-              {
-                "$ref": "#/components/schemas/CustomTranscriber",
-                "title": "CustomTranscriber"
-              },
-              {
-                "$ref": "#/components/schemas/DeepgramTranscriber",
-                "title": "Deepgram"
-              },
-              {
-                "$ref": "#/components/schemas/ElevenLabsTranscriber",
-                "title": "ElevenLabs"
-              },
-              {
-                "$ref": "#/components/schemas/GladiaTranscriber",
-                "title": "Gladia"
-              },
-              {
-                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
-                "title": "Speechmatics"
-              },
-              {
-                "$ref": "#/components/schemas/TalkscriberTranscriber",
-                "title": "Talkscriber"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleTranscriber",
-                "title": "Google"
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
               },
               {
-                "$ref": "#/components/schemas/OpenAITranscriber",
-                "title": "OpenAI"
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
               }
             ]
           },
-          "model": {
-            "description": "These are the options for the assistant's LLM.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/AnyscaleModel",
-                "title": "Anyscale"
-              },
-              {
-                "$ref": "#/components/schemas/AnthropicModel",
-                "title": "Anthropic"
-              },
-              {
-                "$ref": "#/components/schemas/CerebrasModel",
-                "title": "Cerebras"
-              },
-              {
-                "$ref": "#/components/schemas/CustomLLMModel",
-                "title": "CustomLLM"
-              },
-              {
-                "$ref": "#/components/schemas/DeepInfraModel",
-                "title": "DeepInfra"
-              },
-              {
-                "$ref": "#/components/schemas/DeepSeekModel",
-                "title": "DeepSeek"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleModel",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/GroqModel",
-                "title": "Groq"
-              },
-              {
-                "$ref": "#/components/schemas/InflectionAIModel",
-                "title": "InflectionAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIModel",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenRouterModel",
-                "title": "OpenRouter"
-              },
-              {
-                "$ref": "#/components/schemas/PerplexityAIModel",
-                "title": "PerplexityAI"
-              },
-              {
-                "$ref": "#/components/schemas/TogetherAIModel",
-                "title": "Together"
-              },
-              {
-                "$ref": "#/components/schemas/VapiModel",
-                "title": "Vapi"
-              },
+          "hooks": {
+            "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
+            }
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/XaiModel",
-                "title": "XAI"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "voice": {
-            "description": "These are the options for the assistant's voice.",
+          "number": {
+            "type": "string",
+            "description": "These are the digits of the phone number you own on your Vonage."
+          },
+          "credentialId": {
+            "type": "string",
+            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
+          }
+        }
+      },
+      "UpdateVapiPhoneNumberDTO": {
+        "type": "object",
+        "properties": {
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/AzureVoice",
-                "title": "Azure"
-              },
-              {
-                "$ref": "#/components/schemas/CartesiaVoice",
-                "title": "Cartesia"
-              },
-              {
-                "$ref": "#/components/schemas/CustomVoice",
-                "title": "CustomVoice"
-              },
-              {
-                "$ref": "#/components/schemas/DeepgramVoice",
-                "title": "Deepgram"
-              },
-              {
-                "$ref": "#/components/schemas/ElevenLabsVoice",
-                "title": "ElevenLabs"
-              },
-              {
-                "$ref": "#/components/schemas/HumeVoice",
-                "title": "Hume"
-              },
-              {
-                "$ref": "#/components/schemas/LMNTVoice",
-                "title": "LMNT"
-              },
-              {
-                "$ref": "#/components/schemas/NeuphonicVoice",
-                "title": "Neuphonic"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIVoice",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/PlayHTVoice",
-                "title": "PlayHT"
-              },
-              {
-                "$ref": "#/components/schemas/RimeAIVoice",
-                "title": "RimeAI"
-              },
-              {
-                "$ref": "#/components/schemas/SmallestAIVoice",
-                "title": "SmallestAI"
-              },
-              {
-                "$ref": "#/components/schemas/TavusVoice",
-                "title": "TavusVoice"
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
               },
               {
-                "$ref": "#/components/schemas/VapiVoice",
-                "title": "Vapi"
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
               }
-            ],
-            "default": {
-              "provider": "playht",
-              "voiceId": "jennifer"
+            ]
+          },
+          "hooks": {
+            "type": "array",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
+              ]
             }
           },
-          "firstMessage": {
+          "name": {
             "type": "string",
-            "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.",
-            "example": "Hello! How can I help you today?"
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
           },
-          "firstMessageInterruptionsEnabled": {
-            "type": "boolean",
-            "default": false
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "firstMessageMode": {
+          "workflowId": {
             "type": "string",
-            "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'",
-            "enum": [
-              "assistant-speaks-first",
-              "assistant-speaks-first-with-model-generated-message",
-              "assistant-waits-for-user"
-            ],
-            "example": "assistant-speaks-first"
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "voicemailDetection": {
-            "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.",
-            "oneOf": [
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan",
-                "title": "Google"
-              },
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "sipUri": {
+            "type": "string",
+            "description": "This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer.\n\nThis is case-insensitive."
+          },
+          "authentication": {
+            "description": "This enables authentication for incoming SIP INVITE requests to the `sipUri`.\n\nIf not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan",
-                "title": "OpenAI"
+                "$ref": "#/components/schemas/SipAuthentication"
+              }
+            ]
+          }
+        }
+      },
+      "UpdateTelnyxPhoneNumberDTO": {
+        "type": "object",
+        "properties": {
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
               },
               {
-                "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan",
-                "title": "Twilio"
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
               }
             ]
           },
-          "clientMessages": {
+          "hooks": {
             "type": "array",
-            "enum": [
-              "conversation-update",
-              "function-call",
-              "function-call-result",
-              "hang",
-              "language-changed",
-              "metadata",
-              "model-output",
-              "speech-update",
-              "status-update",
-              "transcript",
-              "tool-calls",
-              "tool-calls-result",
-              "transfer-update",
-              "user-interrupted",
-              "voice-input",
-              "workflow.node.started"
-            ],
-            "example": [
-              "conversation-update",
-              "function-call",
-              "hang",
-              "model-output",
-              "speech-update",
-              "status-update",
-              "transfer-update",
-              "transcript",
-              "tool-calls",
-              "user-interrupted",
-              "voice-input",
-              "workflow.node.started"
-            ],
-            "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
             "items": {
-              "type": "string",
-              "enum": [
-                "conversation-update",
-                "function-call",
-                "function-call-result",
-                "hang",
-                "language-changed",
-                "metadata",
-                "model-output",
-                "speech-update",
-                "status-update",
-                "transcript",
-                "tool-calls",
-                "tool-calls-result",
-                "transfer-update",
-                "user-interrupted",
-                "voice-input",
-                "workflow.node.started"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
+                }
               ]
             }
           },
-          "serverMessages": {
-            "type": "array",
-            "enum": [
-              "conversation-update",
-              "end-of-call-report",
-              "function-call",
-              "hang",
-              "language-changed",
-              "language-change-detected",
-              "model-output",
-              "phone-call-control",
-              "speech-update",
-              "status-update",
-              "transcript",
-              "transcript[transcriptType=\"final\"]",
-              "tool-calls",
-              "transfer-destination-request",
-              "transfer-update",
-              "user-interrupted",
-              "voice-input"
-            ],
-            "example": [
-              "conversation-update",
-              "end-of-call-report",
-              "function-call",
-              "hang",
-              "speech-update",
-              "status-update",
-              "tool-calls",
-              "transfer-destination-request",
-              "user-interrupted"
-            ],
-            "description": "These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema.",
-            "items": {
-              "type": "string",
-              "enum": [
-                "conversation-update",
-                "end-of-call-report",
-                "function-call",
-                "hang",
-                "language-changed",
-                "language-change-detected",
-                "model-output",
-                "phone-call-control",
-                "speech-update",
-                "status-update",
-                "transcript",
-                "transcript[transcriptType=\"final\"]",
-                "tool-calls",
-                "transfer-destination-request",
-                "transfer-update",
-                "user-interrupted",
-                "voice-input"
-              ]
-            }
+          "name": {
+            "type": "string",
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
           },
-          "silenceTimeoutSeconds": {
-            "type": "number",
-            "description": "How many seconds of silence to wait before ending the call. Defaults to 30.\n\n@default 30",
-            "minimum": 10,
-            "maximum": 3600,
-            "example": 30
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "maxDurationSeconds": {
-            "type": "number",
-            "description": "This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended.\n\n@default 600 (10 minutes)",
-            "minimum": 10,
-            "maximum": 43200,
-            "example": 600
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
           },
-          "backgroundSound": {
-            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
-            "maxLength": 1000,
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "number": {
+            "type": "string",
+            "description": "These are the digits of the phone number you own on your Telnyx."
+          },
+          "credentialId": {
+            "type": "string",
+            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
+          }
+        }
+      },
+      "ImportVonagePhoneNumberDTO": {
+        "type": "object",
+        "properties": {
+          "fallbackDestination": {
+            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
             "oneOf": [
               {
-                "type": "enum",
-                "enum": [
-                  "off",
-                  "office"
-                ],
-                "example": "office"
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "NumberTransferDestination"
               },
               {
-                "type": "string",
-                "format": "uri",
-                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "SipTransferDestination"
               }
             ]
           },
-          "backgroundDenoisingEnabled": {
-            "type": "boolean",
-            "description": "This enables filtering of noise and background speech while the user is talking.\n\nDefault `false` while in beta.\n\n@default false",
-            "example": false
-          },
-          "modelOutputInMessagesEnabled": {
-            "type": "boolean",
-            "description": "This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech.\n\nDefault `false` while in beta.\n\n@default false",
-            "example": false
-          },
-          "transportConfigurations": {
+          "hooks": {
             "type": "array",
-            "description": "These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.",
+            "description": "This is the hooks that will be used for incoming calls to this phone number.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/TransportConfigurationTwilio",
-                  "title": "Twilio"
+                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
+                  "title": "PhoneNumberHookCallRinging"
                 }
               ]
             }
           },
-          "observabilityPlan": {
-            "description": "This is the plan for observability configuration of assistant's calls.\nCurrently supports Langfuse for tracing and monitoring.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
-                "title": "Langfuse"
-              }
-            ],
+          "vonagePhoneNumber": {
+            "type": "string",
+            "description": "These are the digits of the phone number you own on your Vonage.",
+            "deprecated": true
+          },
+          "credentialId": {
+            "type": "string",
+            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the phone number. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
             "allOf": [
               {
-                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
+                "$ref": "#/components/schemas/Server"
               }
             ]
-          },
-          "credentials": {
+          }
+        },
+        "required": [
+          "vonagePhoneNumber",
+          "credentialId"
+        ]
+      },
+      "PhoneNumberPaginatedResponse": {
+        "type": "object",
+        "properties": {
+          "results": {
             "type": "array",
-            "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
+            "description": "A list of phone numbers, which can be of any provider type.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
-                  "title": "AnthropicCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
-                  "title": "AnyscaleCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
-                  "title": "AssemblyAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
-                  "title": "AzureCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
-                  "title": "AzureOpenAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
-                  "title": "ByoSipTrunkCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
-                  "title": "CartesiaCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
-                  "title": "CerebrasCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
-                  "title": "CloudflareCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
-                  "title": "CustomLLMCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
-                  "title": "DeepgramCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
-                  "title": "DeepInfraCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
-                  "title": "DeepSeekCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
-                  "title": "ElevenLabsCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
-                  "title": "GcpCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
-                  "title": "GladiaCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
-                  "title": "GhlCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
-                  "title": "GoogleCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
-                  "title": "GroqCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
-                  "title": "HumeCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
-                  "title": "InflectionAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
-                  "title": "LangfuseCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
-                  "title": "LmntCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
-                  "title": "MakeCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
-                  "title": "MistralCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
-                  "title": "NeuphonicCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
-                  "title": "OpenAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
-                  "title": "OpenRouterCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
-                  "title": "PerplexityAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
-                  "title": "PlayHTCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
-                  "title": "RimeAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
-                  "title": "RunpodCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
-                  "title": "S3Credential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
-                  "title": "SmallestAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
-                  "title": "SpeechmaticsCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
-                  "title": "SupabaseCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
-                  "title": "TavusCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
-                  "title": "TogetherAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
-                  "title": "TrieveCredential"
+                  "$ref": "#/components/schemas/ByoPhoneNumber"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
-                  "title": "TwilioCredential"
+                  "$ref": "#/components/schemas/TwilioPhoneNumber"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
-                  "title": "VonageCredential"
+                  "$ref": "#/components/schemas/VonagePhoneNumber"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
-                  "title": "WebhookCredential"
+                  "$ref": "#/components/schemas/VapiPhoneNumber"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
-                  "title": "XAiCredential"
-                },
+                  "$ref": "#/components/schemas/TelnyxPhoneNumber"
+                }
+              ]
+            }
+          },
+          "metadata": {
+            "description": "Metadata about the pagination.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/PaginationMeta"
+              }
+            ]
+          }
+        },
+        "required": [
+          "results",
+          "metadata"
+        ]
+      },
+      "ApiRequestTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
-                  "title": "GoogleCalendarOAuth2ClientCredential"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
-                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
-                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
-                  "title": "SlackOAuth2AuthorizationCredential"
-                }
-              ],
-              "discriminator": {
-                "propertyName": "provider",
-                "mapping": {
-                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
-                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
-                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
-                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
-                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
-                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
-                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
-                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
-                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
-                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
-                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
-                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
-                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
-                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
-                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
-                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
-                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
-                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
-                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
-                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
-                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
-                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
-                  "make": "#/components/schemas/CreateMakeCredentialDTO",
-                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
-                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
-                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
-                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
-                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
-                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
-                  "s3": "#/components/schemas/CreateS3CredentialDTO",
-                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
-                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
-                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
-                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
-                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
-                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
-                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
-                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
-                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
-                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
-                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
-                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
-                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
-                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
-                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
-                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
-                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO"
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
-              }
+              ]
             }
           },
-          "name": {
+          "type": {
             "type": "string",
-            "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.",
-            "maxLength": 40
+            "enum": [
+              "apiRequest"
+            ],
+            "description": "The type of tool. \"apiRequest\" for API request tool."
           },
-          "voicemailMessage": {
+          "method": {
             "type": "string",
-            "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.",
-            "maxLength": 1000
+            "enum": [
+              "POST",
+              "GET",
+              "PUT",
+              "PATCH",
+              "DELETE"
+            ]
           },
-          "endCallMessage": {
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is the timeout in seconds for the request. Defaults to 20 seconds.\n\n@default 20",
+            "minimum": 1,
+            "maximum": 300,
+            "example": 20
+          },
+          "id": {
             "type": "string",
-            "description": "This is the message that the assistant will say if it ends the call.\n\nIf unspecified, it will hang up without saying anything.",
-            "maxLength": 1000
+            "description": "This is the unique identifier for the tool."
           },
-          "endCallPhrases": {
-            "description": "This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "maxLength": 140,
-              "minLength": 2
-            }
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
-          "compliancePlan": {
-            "$ref": "#/components/schemas/CompliancePlan"
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
           },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the assistant."
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
           },
-          "analysisPlan": {
-            "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AnalysisPlan"
-              }
-            ]
+          "name": {
+            "type": "string",
+            "description": "This is the name of the tool. This will be passed to the model.\n\nMust be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 40.",
+            "maxLength": 40,
+            "pattern": "/^[a-zA-Z0-9_-]{1,40}$/"
           },
-          "artifactPlan": {
-            "description": "This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.\n\nNote: `recordingEnabled` is currently at the root level. It will be moved to `artifactPlan` in the future, but will remain backwards compatible.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ArtifactPlan"
-              }
-            ]
+          "description": {
+            "type": "string",
+            "description": "This is the description of the tool. This will be passed to the model.",
+            "maxLength": 1000
+          },
+          "url": {
+            "type": "string",
+            "description": "This is where the request will be sent."
           },
-          "messagePlan": {
-            "description": "This is the plan for static predefined messages that can be spoken by the assistant during the call, like `idleMessages`.\n\nNote: `firstMessage`, `voicemailMessage`, and `endCallMessage` are currently at the root level. They will be moved to `messagePlan` in the future, but will remain backwards compatible.",
+          "body": {
+            "description": "This is the body of the request.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/MessagePlan"
+                "$ref": "#/components/schemas/JsonSchema"
               }
             ]
           },
-          "startSpeakingPlan": {
-            "description": "This is the plan for when the assistant should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
+          "headers": {
+            "description": "These are the headers to send with the request.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/StartSpeakingPlan"
+                "$ref": "#/components/schemas/JsonSchema"
               }
             ]
           },
-          "stopSpeakingPlan": {
-            "description": "This is the plan for when assistant should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
+          "backoffPlan": {
+            "description": "This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried).\n\n@default undefined (the request will not be retried)",
             "allOf": [
               {
-                "$ref": "#/components/schemas/StopSpeakingPlan"
+                "$ref": "#/components/schemas/BackoffPlan"
               }
             ]
           },
-          "monitorPlan": {
-            "description": "This is the plan for real-time monitoring of the assistant's calls.\n\nUsage:\n- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`.\n\nNote, `serverMessages`, `clientMessages`, `serverUrl` and `serverUrlSecret` are currently at the root level but will be moved to `monitorPlan` in the future. Will remain backwards compatible",
+          "variableExtractionPlan": {
+            "description": "This is the plan to extract variables from the tool's response. These will be accessible during the call and stored in `call.artifact.variableValues` after the call.\n\nUsage:\n1. Use `aliases` to extract variables from the tool's response body. (Most common case)\n\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"customerName\",\n      \"value\": \"{{customer.name}}\"\n    },\n    {\n      \"key\": \"customerAge\",\n      \"value\": \"{{customer.age}}\"\n    }\n  ]\n}\n```\n\nThe tool response body is made available to the liquid template.\n\n2. Use `aliases` to extract variables from the tool's response body if the response is an array.\n\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"customerName\",\n      \"value\": \"{{$[0].name}}\"\n    },\n    {\n      \"key\": \"customerAge\",\n      \"value\": \"{{$[0].age}}\"\n    }\n  ]\n}\n```\n\n$ is a shorthand for the tool's response body. `$[0]` is the first item in the array. `$[n]` is the nth item in the array. Note, $ is available regardless of the response body type (both object and array).\n\n3. Use `aliases` to extract variables from the tool's response headers.\n\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"customerName\",\n      \"value\": \"{{tool.response.headers.customer-name}}\"\n    },\n    {\n      \"key\": \"customerAge\",\n      \"value\": \"{{tool.response.headers.customer-age}}\"\n    }\n  ]\n}\n```\n\n`tool.response` is made available to the liquid template. Particularly, both `tool.response.headers` and `tool.response.body` are available. Note, `tool.response` is available regardless of the response body type (both object and array).\n\n4. Use `schema` to extract a large portion of the tool's response body.\n\n4.1. If you hit example.com and it returns `{\"name\": \"John\", \"age\": 30}`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"name\": {\n        \"type\": \"string\"\n      },\n      \"age\": {\n        \"type\": \"number\"\n      }\n    }\n  }\n}\n```\nThese will be extracted as `{{ name }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables.\n\n4.2. If you hit example.com and it returns `{\"name\": {\"first\": \"John\", \"last\": \"Doe\"}}`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"name\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"first\": {\n            \"type\": \"string\"\n          },\n          \"last\": {\n            \"type\": \"string\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nThese will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{ name.last }}` will be accessible.\n\n4.3. If you hit example.com and it returns `[\"94123\", \"94124\"]`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"array\",\n    \"title\": \"zipCodes\",\n    \"items\": {\n      \"type\": \"string\"\n    }\n  }\n}\n```\n\nThis will be extracted as `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`.\n\n4.4. If you hit example.com and it returns `[{\"name\": \"John\", \"age\": 30, \"zipCodes\": [\"94123\", \"94124\"]}, {\"name\": \"Jane\", \"age\": 25, \"zipCodes\": [\"94125\", \"94126\"]}]`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"array\",\n    \"title\": \"people\",\n    \"items\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"age\": {\n          \"type\": \"number\"\n        },\n        \"zipCodes\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nThis will be extracted as `{{ people }}`. To access the array items, you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{ people[n].zipCodes[1] }}`.\n\nNote: Both `aliases` and `schema` can be used together.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/MonitorPlan"
+                "$ref": "#/components/schemas/VariableExtractionPlan"
               }
             ]
-          },
-          "credentialIds": {
-            "description": "These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
+          }
+        },
+        "required": [
+          "type",
+          "method",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "url"
+        ]
+      },
+      "DtmfTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
             "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "type": "string"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
             }
           },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "type": {
+            "type": "string",
+            "enum": [
+              "dtmf"
+            ],
+            "description": "The type of tool. \"dtmf\" for DTMF tool."
           },
-          "hooks": {
-            "description": "This is a set of actions that will be performed on certain events.",
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "EndCallTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
             "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "$ref": "#/components/schemas/AssistantHooks"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
             }
           },
-          "keypadInputPlan": {
-            "$ref": "#/components/schemas/KeypadInputPlan"
+          "type": {
+            "type": "string",
+            "enum": [
+              "endCall"
+            ],
+            "description": "The type of tool. \"endCall\" for End Call tool."
           },
           "id": {
             "type": "string",
-            "description": "This is the unique identifier for the assistant."
+            "description": "This is the unique identifier for the tool."
           },
           "orgId": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this assistant belongs to."
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was created."
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
           }
         },
         "required": [
+          "type",
           "id",
           "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "AssistantPaginatedResponse": {
+      "FunctionTool": {
         "type": "object",
         "properties": {
-          "results": {
+          "messages": {
             "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "$ref": "#/components/schemas/Assistant"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
             }
           },
-          "metadata": {
-            "$ref": "#/components/schemas/PaginationMeta"
-          }
-        },
-        "required": [
-          "results",
-          "metadata"
-        ]
-      },
-      "UpdateAssistantDTO": {
-        "type": "object",
-        "properties": {
-          "transcriber": {
-            "description": "These are the options for the assistant's transcriber.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/AssemblyAITranscriber",
-                "title": "AssemblyAI"
-              },
-              {
-                "$ref": "#/components/schemas/AzureSpeechTranscriber",
-                "title": "Azure"
-              },
-              {
-                "$ref": "#/components/schemas/CustomTranscriber",
-                "title": "CustomTranscriber"
-              },
-              {
-                "$ref": "#/components/schemas/DeepgramTranscriber",
-                "title": "Deepgram"
-              },
-              {
-                "$ref": "#/components/schemas/ElevenLabsTranscriber",
-                "title": "ElevenLabs"
-              },
-              {
-                "$ref": "#/components/schemas/GladiaTranscriber",
-                "title": "Gladia"
-              },
-              {
-                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
-                "title": "Speechmatics"
-              },
-              {
-                "$ref": "#/components/schemas/TalkscriberTranscriber",
-                "title": "Talkscriber"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleTranscriber",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAITranscriber",
-                "title": "OpenAI"
-              }
-            ]
+          "type": {
+            "type": "string",
+            "enum": [
+              "function"
+            ],
+            "description": "The type of tool. \"function\" for Function tool."
           },
-          "model": {
-            "description": "These are the options for the assistant's LLM.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/AnyscaleModel",
-                "title": "Anyscale"
-              },
-              {
-                "$ref": "#/components/schemas/AnthropicModel",
-                "title": "Anthropic"
-              },
-              {
-                "$ref": "#/components/schemas/CerebrasModel",
-                "title": "Cerebras"
-              },
-              {
-                "$ref": "#/components/schemas/CustomLLMModel",
-                "title": "CustomLLM"
-              },
-              {
-                "$ref": "#/components/schemas/DeepInfraModel",
-                "title": "DeepInfra"
-              },
-              {
-                "$ref": "#/components/schemas/DeepSeekModel",
-                "title": "DeepSeek"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleModel",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/GroqModel",
-                "title": "Groq"
-              },
-              {
-                "$ref": "#/components/schemas/InflectionAIModel",
-                "title": "InflectionAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIModel",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenRouterModel",
-                "title": "OpenRouter"
-              },
-              {
-                "$ref": "#/components/schemas/PerplexityAIModel",
-                "title": "PerplexityAI"
-              },
-              {
-                "$ref": "#/components/schemas/TogetherAIModel",
-                "title": "Together"
-              },
-              {
-                "$ref": "#/components/schemas/VapiModel",
-                "title": "Vapi"
-              },
+          "async": {
+            "type": "boolean",
+            "example": false,
+            "description": "This determines if the tool is async.\n\n  If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\n  If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\n  Defaults to synchronous (`false`)."
+          },
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/XaiModel",
-                "title": "XAI"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "voice": {
-            "description": "These are the options for the assistant's voice.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/AzureVoice",
-                "title": "Azure"
-              },
-              {
-                "$ref": "#/components/schemas/CartesiaVoice",
-                "title": "Cartesia"
-              },
-              {
-                "$ref": "#/components/schemas/CustomVoice",
-                "title": "CustomVoice"
-              },
-              {
-                "$ref": "#/components/schemas/DeepgramVoice",
-                "title": "Deepgram"
-              },
-              {
-                "$ref": "#/components/schemas/ElevenLabsVoice",
-                "title": "ElevenLabs"
-              },
-              {
-                "$ref": "#/components/schemas/HumeVoice",
-                "title": "Hume"
-              },
-              {
-                "$ref": "#/components/schemas/LMNTVoice",
-                "title": "LMNT"
-              },
-              {
-                "$ref": "#/components/schemas/NeuphonicVoice",
-                "title": "Neuphonic"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIVoice",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/PlayHTVoice",
-                "title": "PlayHT"
-              },
-              {
-                "$ref": "#/components/schemas/RimeAIVoice",
-                "title": "RimeAI"
-              },
-              {
-                "$ref": "#/components/schemas/SmallestAIVoice",
-                "title": "SmallestAI"
-              },
-              {
-                "$ref": "#/components/schemas/TavusVoice",
-                "title": "TavusVoice"
-              },
-              {
-                "$ref": "#/components/schemas/VapiVoice",
-                "title": "Vapi"
-              }
-            ],
-            "default": {
-              "provider": "playht",
-              "voiceId": "jennifer"
-            }
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
           },
-          "firstMessage": {
+          "orgId": {
             "type": "string",
-            "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.",
-            "example": "Hello! How can I help you today?"
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
-          "firstMessageInterruptionsEnabled": {
-            "type": "boolean",
-            "default": false
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
           },
-          "firstMessageMode": {
+          "updatedAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'",
-            "enum": [
-              "assistant-speaks-first",
-              "assistant-speaks-first-with-model-generated-message",
-              "assistant-waits-for-user"
-            ],
-            "example": "assistant-speaks-first"
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
           },
-          "voicemailDetection": {
-            "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan",
-                "title": "OpenAI"
-              },
+          "function": {
+            "description": "This is the function definition of the tool.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan",
-                "title": "Twilio"
+                "$ref": "#/components/schemas/OpenAIFunction"
               }
             ]
-          },
-          "clientMessages": {
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "GhlTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
             "type": "array",
-            "enum": [
-              "conversation-update",
-              "function-call",
-              "function-call-result",
-              "hang",
-              "language-changed",
-              "metadata",
-              "model-output",
-              "speech-update",
-              "status-update",
-              "transcript",
-              "tool-calls",
-              "tool-calls-result",
-              "transfer-update",
-              "user-interrupted",
-              "voice-input",
-              "workflow.node.started"
-            ],
-            "example": [
-              "conversation-update",
-              "function-call",
-              "hang",
-              "model-output",
-              "speech-update",
-              "status-update",
-              "transfer-update",
-              "transcript",
-              "tool-calls",
-              "user-interrupted",
-              "voice-input",
-              "workflow.node.started"
-            ],
-            "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "type": "string",
-              "enum": [
-                "conversation-update",
-                "function-call",
-                "function-call-result",
-                "hang",
-                "language-changed",
-                "metadata",
-                "model-output",
-                "speech-update",
-                "status-update",
-                "transcript",
-                "tool-calls",
-                "tool-calls-result",
-                "transfer-update",
-                "user-interrupted",
-                "voice-input",
-                "workflow.node.started"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
               ]
             }
           },
-          "serverMessages": {
-            "type": "array",
+          "type": {
+            "type": "string",
             "enum": [
-              "conversation-update",
-              "end-of-call-report",
-              "function-call",
-              "hang",
-              "language-changed",
-              "language-change-detected",
-              "model-output",
-              "phone-call-control",
-              "speech-update",
-              "status-update",
-              "transcript",
-              "transcript[transcriptType=\"final\"]",
-              "tool-calls",
-              "transfer-destination-request",
-              "transfer-update",
-              "user-interrupted",
-              "voice-input"
-            ],
-            "example": [
-              "conversation-update",
-              "end-of-call-report",
-              "function-call",
-              "hang",
-              "speech-update",
-              "status-update",
-              "tool-calls",
-              "transfer-destination-request",
-              "user-interrupted"
+              "ghl"
             ],
-            "description": "These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,user-interrupted. You can check the shape of the messages in ServerMessage schema.",
-            "items": {
-              "type": "string",
-              "enum": [
-                "conversation-update",
-                "end-of-call-report",
-                "function-call",
-                "hang",
-                "language-changed",
-                "language-change-detected",
-                "model-output",
-                "phone-call-control",
-                "speech-update",
-                "status-update",
-                "transcript",
-                "transcript[transcriptType=\"final\"]",
-                "tool-calls",
-                "transfer-destination-request",
-                "transfer-update",
-                "user-interrupted",
-                "voice-input"
-              ]
-            }
-          },
-          "silenceTimeoutSeconds": {
-            "type": "number",
-            "description": "How many seconds of silence to wait before ending the call. Defaults to 30.\n\n@default 30",
-            "minimum": 10,
-            "maximum": 3600,
-            "example": 30
-          },
-          "maxDurationSeconds": {
-            "type": "number",
-            "description": "This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended.\n\n@default 600 (10 minutes)",
-            "minimum": 10,
-            "maximum": 43200,
-            "example": 600
-          },
-          "backgroundSound": {
-            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
-            "maxLength": 1000,
-            "oneOf": [
-              {
-                "type": "enum",
-                "enum": [
-                  "off",
-                  "office"
-                ],
-                "example": "office"
-              },
-              {
-                "type": "string",
-                "format": "uri",
-                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
-              }
-            ]
+            "description": "The type of tool. \"ghl\" for GHL tool."
           },
-          "backgroundDenoisingEnabled": {
-            "type": "boolean",
-            "description": "This enables filtering of noise and background speech while the user is talking.\n\nDefault `false` while in beta.\n\n@default false",
-            "example": false
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
           },
-          "modelOutputInMessagesEnabled": {
-            "type": "boolean",
-            "description": "This determines whether the model's output is used in conversation history rather than the transcription of assistant's speech.\n\nDefault `false` while in beta.\n\n@default false",
-            "example": false
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
-          "transportConfigurations": {
-            "type": "array",
-            "description": "These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TransportConfigurationTwilio",
-                  "title": "Twilio"
-                }
-              ]
-            }
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
           },
-          "observabilityPlan": {
-            "description": "This is the plan for observability configuration of assistant's calls.\nCurrently supports Langfuse for tracing and monitoring.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
-                "title": "Langfuse"
-              }
-            ],
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
-              }
-            ]
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
           },
-          "credentials": {
+          "metadata": {
+            "$ref": "#/components/schemas/GhlToolMetadata"
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "metadata"
+        ]
+      },
+      "MakeTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
             "type": "array",
-            "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
-                  "title": "AnthropicCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
-                  "title": "AnyscaleCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
-                  "title": "AssemblyAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
-                  "title": "AzureCredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
-                  "title": "AzureOpenAICredential"
-                },
-                {
-                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
-                  "title": "ByoSipTrunkCredential"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
-                  "title": "CartesiaCredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
-                  "title": "CerebrasCredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
-                  "title": "CloudflareCredential"
-                },
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "make"
+            ],
+            "description": "The type of tool. \"make\" for Make tool."
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/MakeToolMetadata"
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "metadata"
+        ]
+      },
+      "TransferCallTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
-                  "title": "CustomLLMCredential"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
-                  "title": "DeepgramCredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
-                  "title": "DeepInfraCredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
-                  "title": "DeepSeekCredential"
-                },
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "transferCall"
+            ]
+          },
+          "destinations": {
+            "type": "array",
+            "description": "These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
-                  "title": "ElevenLabsCredential"
+                  "$ref": "#/components/schemas/TransferDestinationAssistant",
+                  "title": "Assistant"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
-                  "title": "GcpCredential"
+                  "$ref": "#/components/schemas/TransferDestinationNumber",
+                  "title": "Number"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
-                  "title": "GladiaCredential"
-                },
+                  "$ref": "#/components/schemas/TransferDestinationSip",
+                  "title": "Sip"
+                }
+              ]
+            }
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "OutputTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
-                  "title": "GhlCredential"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
-                  "title": "GoogleCredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
-                  "title": "GroqCredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
-                  "title": "HumeCredential"
-                },
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "output"
+            ],
+            "description": "The type of tool. \"output\" for Output tool."
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "BashTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
-                  "title": "InflectionAICredential"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
-                  "title": "LangfuseCredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
-                  "title": "LmntCredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
-                  "title": "MakeCredential"
-                },
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "bash"
+            ],
+            "description": "The type of tool. \"bash\" for Bash tool."
+          },
+          "subType": {
+            "type": "string",
+            "enum": [
+              "bash_20241022"
+            ],
+            "description": "The sub type of tool."
+          },
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          },
+          "name": {
+            "type": "string",
+            "description": "The name of the tool, fixed to 'bash'",
+            "default": "bash",
+            "enum": [
+              "bash"
+            ]
+          }
+        },
+        "required": [
+          "type",
+          "subType",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "name"
+        ]
+      },
+      "ComputerTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
-                  "title": "MistralCredential"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
-                  "title": "NeuphonicCredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
-                  "title": "OpenAICredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
-                  "title": "OpenRouterCredential"
-                },
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "computer"
+            ],
+            "description": "The type of tool. \"computer\" for Computer tool."
+          },
+          "subType": {
+            "type": "string",
+            "enum": [
+              "computer_20241022"
+            ],
+            "description": "The sub type of tool."
+          },
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          },
+          "name": {
+            "type": "string",
+            "description": "The name of the tool, fixed to 'computer'",
+            "default": "computer",
+            "enum": [
+              "computer"
+            ]
+          },
+          "displayWidthPx": {
+            "type": "number",
+            "description": "The display width in pixels"
+          },
+          "displayHeightPx": {
+            "type": "number",
+            "description": "The display height in pixels"
+          },
+          "displayNumber": {
+            "type": "number",
+            "description": "Optional display number"
+          }
+        },
+        "required": [
+          "type",
+          "subType",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "name",
+          "displayWidthPx",
+          "displayHeightPx"
+        ]
+      },
+      "TextEditorTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
-                  "title": "PerplexityAICredential"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
-                  "title": "PlayHTCredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
-                  "title": "RimeAICredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
-                  "title": "RunpodCredential"
-                },
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "textEditor"
+            ],
+            "description": "The type of tool. \"textEditor\" for Text Editor tool."
+          },
+          "subType": {
+            "type": "string",
+            "enum": [
+              "text_editor_20241022"
+            ],
+            "description": "The sub type of tool."
+          },
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          },
+          "name": {
+            "type": "string",
+            "description": "The name of the tool, fixed to 'str_replace_editor'",
+            "default": "str_replace_editor",
+            "enum": [
+              "str_replace_editor"
+            ]
+          }
+        },
+        "required": [
+          "type",
+          "subType",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "name"
+        ]
+      },
+      "QueryTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
-                  "title": "S3Credential"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
-                  "title": "SmallestAICredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
-                  "title": "SpeechmaticsCredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
-                  "title": "SupabaseCredential"
-                },
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "query"
+            ],
+            "description": "The type of tool. \"query\" for Query tool."
+          },
+          "knowledgeBases": {
+            "description": "The knowledge bases to query",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/KnowledgeBase"
+            }
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "GoogleCalendarCreateEventTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
-                  "title": "TavusCredential"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
-                  "title": "TogetherAICredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
-                  "title": "TrieveCredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
-                  "title": "TwilioCredential"
-                },
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "google.calendar.event.create"
+            ],
+            "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar Create Event tool."
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "GoogleSheetsRowAppendTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
                 {
-                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
-                  "title": "VonageCredential"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
-                  "title": "WebhookCredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
-                  "title": "XAiCredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
-                  "title": "GoogleCalendarOAuth2ClientCredential"
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "google.sheets.row.append"
+            ],
+            "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets Row Append tool."
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "GoogleCalendarCheckAvailabilityTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
-                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
-                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
-                  "title": "SlackOAuth2AuthorizationCredential"
-                }
-              ],
-              "discriminator": {
-                "propertyName": "provider",
-                "mapping": {
-                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
-                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
-                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
-                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
-                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
-                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
-                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
-                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
-                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
-                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
-                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
-                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
-                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
-                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
-                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
-                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
-                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
-                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
-                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
-                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
-                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
-                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
-                  "make": "#/components/schemas/CreateMakeCredentialDTO",
-                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
-                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
-                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
-                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
-                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
-                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
-                  "s3": "#/components/schemas/CreateS3CredentialDTO",
-                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
-                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
-                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
-                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
-                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
-                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
-                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
-                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
-                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
-                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
-                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
-                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
-                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
-                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
-                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
-                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
-                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO"
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
-              }
+              ]
             }
           },
-          "name": {
+          "type": {
             "type": "string",
-            "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.",
-            "maxLength": 40
+            "enum": [
+              "google.calendar.availability.check"
+            ],
+            "description": "The type of tool. \"google.calendar.availability.check\" for Google Calendar Check Availability tool."
           },
-          "voicemailMessage": {
+          "id": {
             "type": "string",
-            "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.",
-            "maxLength": 1000
+            "description": "This is the unique identifier for the tool."
           },
-          "endCallMessage": {
+          "orgId": {
             "type": "string",
-            "description": "This is the message that the assistant will say if it ends the call.\n\nIf unspecified, it will hang up without saying anything.",
-            "maxLength": 1000
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
-          "endCallPhrases": {
-            "description": "This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.",
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "SlackSendMessageTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
             "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "type": "string",
-              "maxLength": 140,
-              "minLength": 2
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
             }
           },
-          "compliancePlan": {
-            "$ref": "#/components/schemas/CompliancePlan"
+          "type": {
+            "type": "string",
+            "enum": [
+              "slack.message.send"
+            ],
+            "description": "The type of tool. \"slack.message.send\" for Slack Send Message tool."
           },
-          "metadata": {
-            "type": "object",
-            "description": "This is for metadata you want to store on the assistant."
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
           },
-          "analysisPlan": {
-            "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AnalysisPlan"
-              }
-            ]
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
-          "artifactPlan": {
-            "description": "This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.\n\nNote: `recordingEnabled` is currently at the root level. It will be moved to `artifactPlan` in the future, but will remain backwards compatible.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/ArtifactPlan"
-              }
-            ]
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
           },
-          "messagePlan": {
-            "description": "This is the plan for static predefined messages that can be spoken by the assistant during the call, like `idleMessages`.\n\nNote: `firstMessage`, `voicemailMessage`, and `endCallMessage` are currently at the root level. They will be moved to `messagePlan` in the future, but will remain backwards compatible.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/MessagePlan"
-              }
-            ]
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "SmsTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
           },
-          "startSpeakingPlan": {
-            "description": "This is the plan for when the assistant should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/StartSpeakingPlan"
-              }
-            ]
+          "type": {
+            "type": "string",
+            "enum": [
+              "sms"
+            ],
+            "description": "The type of tool. \"sms\" for Twilio SMS sending tool."
           },
-          "stopSpeakingPlan": {
-            "description": "This is the plan for when assistant should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/StopSpeakingPlan"
-              }
-            ]
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
           },
-          "monitorPlan": {
-            "description": "This is the plan for real-time monitoring of the assistant's calls.\n\nUsage:\n- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`.\n\nNote, `serverMessages`, `clientMessages`, `serverUrl` and `serverUrlSecret` are currently at the root level but will be moved to `monitorPlan` in the future. Will remain backwards compatible",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/MonitorPlan"
-              }
-            ]
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
-          "credentialIds": {
-            "description": "These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "McpTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
             "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "type": "string"
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
             }
           },
+          "type": {
+            "type": "string",
+            "enum": [
+              "mcp"
+            ],
+            "description": "The type of tool. \"mcp\" for MCP tool."
+          },
           "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl",
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "hooks": {
-            "description": "This is a set of actions that will be performed on certain events.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/AssistantHooks"
-            }
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the tool."
           },
-          "keypadInputPlan": {
-            "$ref": "#/components/schemas/KeypadInputPlan"
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization that this tool belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/McpToolMetadata"
           }
-        }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
       },
-      "ByoPhoneNumber": {
+      "GoHighLevelCalendarAvailabilityTool": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is to bring your own phone numbers from your own SIP trunks or Carriers.",
             "enum": [
-              "byo-phone-number"
-            ]
-          },
-          "numberE164CheckEnabled": {
-            "type": "boolean",
-            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
-            "default": true
+              "gohighlevel.calendar.availability.check"
+            ],
+            "description": "The type of tool. \"gohighlevel.calendar.availability.check\" for GoHighLevel Calendar Availability Check tool."
           },
           "id": {
             "type": "string",
-            "description": "This is the unique identifier for the phone number."
+            "description": "This is the unique identifier for the tool."
           },
           "orgId": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this phone number belongs to."
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the phone number was created."
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the phone number was last updated."
-          },
-          "status": {
-            "type": "string",
-            "description": "This is the status of the phone number.",
-            "enum": [
-              "active",
-              "activating",
-              "blocked"
-            ]
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "number": {
-            "type": "string",
-            "description": "This is the number of the customer.",
-            "minLength": 3,
-            "maxLength": 40
-          },
-          "credentialId": {
-            "type": "string",
-            "description": "This is the credential of your own SIP trunk or Carrier (type `byo-sip-trunk`) which can be used to make calls to this phone number.\n\nYou can add the SIP trunk or Carrier credential in the Provider Credentials page on the Dashboard to get the credentialId."
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
           }
         },
         "required": [
-          "provider",
+          "type",
           "id",
           "orgId",
           "createdAt",
-          "updatedAt",
-          "credentialId"
+          "updatedAt"
         ]
       },
-      "TwilioPhoneNumber": {
+      "GoHighLevelCalendarEventCreateTool": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is to use numbers bought on Twilio.",
             "enum": [
-              "twilio"
-            ]
+              "gohighlevel.calendar.event.create"
+            ],
+            "description": "The type of tool. \"gohighlevel.calendar.event.create\" for GoHighLevel Calendar Event Create tool."
           },
           "id": {
             "type": "string",
-            "description": "This is the unique identifier for the phone number."
+            "description": "This is the unique identifier for the tool."
           },
           "orgId": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this phone number belongs to."
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the phone number was created."
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the phone number was last updated."
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "GoHighLevelContactCreateTool": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
           },
-          "status": {
+          "type": {
             "type": "string",
-            "description": "This is the status of the phone number.",
             "enum": [
-              "active",
-              "activating",
-              "blocked"
-            ]
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+              "gohighlevel.contact.create"
+            ],
+            "description": "The type of tool. \"gohighlevel.contact.create\" for GoHighLevel Contact Create tool."
           },
-          "squadId": {
+          "id": {
             "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+            "description": "This is the unique identifier for the tool."
           },
-          "number": {
+          "orgId": {
             "type": "string",
-            "description": "These are the digits of the phone number you own on your Twilio."
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
-          "twilioAccountSid": {
+          "createdAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the Twilio Account SID for the phone number."
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
           },
-          "twilioAuthToken": {
+          "updatedAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the Twilio Auth Token for the phone number."
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
           }
         },
         "required": [
-          "provider",
+          "type",
           "id",
           "orgId",
           "createdAt",
-          "updatedAt",
-          "number",
-          "twilioAccountSid",
-          "twilioAuthToken"
+          "updatedAt"
         ]
       },
-      "VonagePhoneNumber": {
+      "GoHighLevelContactGetTool": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is to use numbers bought on Vonage.",
             "enum": [
-              "vonage"
-            ]
+              "gohighlevel.contact.get"
+            ],
+            "description": "The type of tool. \"gohighlevel.contact.get\" for GoHighLevel Contact Get tool."
           },
           "id": {
             "type": "string",
-            "description": "This is the unique identifier for the phone number."
+            "description": "This is the unique identifier for the tool."
           },
           "orgId": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this phone number belongs to."
+            "description": "This is the unique identifier for the organization that this tool belongs to."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the phone number was created."
+            "description": "This is the ISO 8601 date-time string of when the tool was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the phone number was last updated."
+            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "CreateApiRequestToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
           },
-          "status": {
+          "type": {
             "type": "string",
-            "description": "This is the status of the phone number.",
             "enum": [
-              "active",
-              "activating",
-              "blocked"
+              "apiRequest"
+            ],
+            "description": "The type of tool. \"apiRequest\" for API request tool."
+          },
+          "method": {
+            "type": "string",
+            "enum": [
+              "POST",
+              "GET",
+              "PUT",
+              "PATCH",
+              "DELETE"
             ]
           },
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is the timeout in seconds for the request. Defaults to 20 seconds.\n\n@default 20",
+            "minimum": 1,
+            "maximum": 300,
+            "example": 20
+          },
           "name": {
             "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
+            "description": "This is the name of the tool. This will be passed to the model.\n\nMust be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 40.",
+            "maxLength": 40,
+            "pattern": "/^[a-zA-Z0-9_-]{1,40}$/"
           },
-          "assistantId": {
+          "description": {
             "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+            "description": "This is the description of the tool. This will be passed to the model.",
+            "maxLength": 1000
           },
-          "squadId": {
+          "url": {
             "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+            "description": "This is where the request will be sent."
           },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+          "body": {
+            "description": "This is the body of the request.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/JsonSchema"
               }
             ]
           },
-          "number": {
-            "type": "string",
-            "description": "These are the digits of the phone number you own on your Vonage."
+          "headers": {
+            "description": "These are the headers to send with the request.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/JsonSchema"
+              }
+            ]
           },
-          "credentialId": {
-            "type": "string",
-            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
+          "backoffPlan": {
+            "description": "This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried).\n\n@default undefined (the request will not be retried)",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/BackoffPlan"
+              }
+            ]
+          },
+          "variableExtractionPlan": {
+            "description": "This is the plan to extract variables from the tool's response. These will be accessible during the call and stored in `call.artifact.variableValues` after the call.\n\nUsage:\n1. Use `aliases` to extract variables from the tool's response body. (Most common case)\n\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"customerName\",\n      \"value\": \"{{customer.name}}\"\n    },\n    {\n      \"key\": \"customerAge\",\n      \"value\": \"{{customer.age}}\"\n    }\n  ]\n}\n```\n\nThe tool response body is made available to the liquid template.\n\n2. Use `aliases` to extract variables from the tool's response body if the response is an array.\n\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"customerName\",\n      \"value\": \"{{$[0].name}}\"\n    },\n    {\n      \"key\": \"customerAge\",\n      \"value\": \"{{$[0].age}}\"\n    }\n  ]\n}\n```\n\n$ is a shorthand for the tool's response body. `$[0]` is the first item in the array. `$[n]` is the nth item in the array. Note, $ is available regardless of the response body type (both object and array).\n\n3. Use `aliases` to extract variables from the tool's response headers.\n\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"customerName\",\n      \"value\": \"{{tool.response.headers.customer-name}}\"\n    },\n    {\n      \"key\": \"customerAge\",\n      \"value\": \"{{tool.response.headers.customer-age}}\"\n    }\n  ]\n}\n```\n\n`tool.response` is made available to the liquid template. Particularly, both `tool.response.headers` and `tool.response.body` are available. Note, `tool.response` is available regardless of the response body type (both object and array).\n\n4. Use `schema` to extract a large portion of the tool's response body.\n\n4.1. If you hit example.com and it returns `{\"name\": \"John\", \"age\": 30}`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"name\": {\n        \"type\": \"string\"\n      },\n      \"age\": {\n        \"type\": \"number\"\n      }\n    }\n  }\n}\n```\nThese will be extracted as `{{ name }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables.\n\n4.2. If you hit example.com and it returns `{\"name\": {\"first\": \"John\", \"last\": \"Doe\"}}`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"name\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"first\": {\n            \"type\": \"string\"\n          },\n          \"last\": {\n            \"type\": \"string\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nThese will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{ name.last }}` will be accessible.\n\n4.3. If you hit example.com and it returns `[\"94123\", \"94124\"]`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"array\",\n    \"title\": \"zipCodes\",\n    \"items\": {\n      \"type\": \"string\"\n    }\n  }\n}\n```\n\nThis will be extracted as `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`.\n\n4.4. If you hit example.com and it returns `[{\"name\": \"John\", \"age\": 30, \"zipCodes\": [\"94123\", \"94124\"]}, {\"name\": \"Jane\", \"age\": 25, \"zipCodes\": [\"94125\", \"94126\"]}]`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"array\",\n    \"title\": \"people\",\n    \"items\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"age\": {\n          \"type\": \"number\"\n        },\n        \"zipCodes\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nThis will be extracted as `{{ people }}`. To access the array items, you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{ people[n].zipCodes[1] }}`.\n\nNote: Both `aliases` and `schema` can be used together.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/VariableExtractionPlan"
+              }
+            ]
           }
         },
         "required": [
-          "provider",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "number",
-          "credentialId"
+          "type",
+          "method",
+          "url"
         ]
       },
-      "SipAuthentication": {
+      "CreateOutputToolDTO": {
         "type": "object",
         "properties": {
-          "realm": {
-            "type": "string",
-            "description": "This will be expected in the `realm` field of the `authorization` header of the SIP INVITE. Defaults to sip.vapi.ai."
-          },
-          "username": {
-            "type": "string",
-            "description": "This will be expected in the `username` field of the `authorization` header of the SIP INVITE.",
-            "minLength": 20,
-            "maxLength": 40
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
           },
-          "password": {
+          "type": {
             "type": "string",
-            "description": "This will be expected to generate the `response` field of the `authorization` header of the SIP INVITE, through digest authentication.",
-            "minLength": 20,
-            "maxLength": 40
+            "enum": [
+              "output"
+            ],
+            "description": "The type of tool. \"output\" for Output tool."
           }
         },
         "required": [
-          "username",
-          "password"
+          "type"
         ]
       },
-      "VapiPhoneNumber": {
+      "CreateBashToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is to create free SIP phone numbers on Vapi.",
             "enum": [
-              "vapi"
-            ]
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the phone number."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the org that this phone number belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the phone number was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the phone number was last updated."
+              "bash"
+            ],
+            "description": "The type of tool. \"bash\" for Bash tool."
           },
-          "status": {
+          "subType": {
             "type": "string",
-            "description": "This is the status of the phone number.",
             "enum": [
-              "active",
-              "activating",
-              "blocked"
-            ]
-          },
-          "number": {
-            "type": "string",
-            "description": "These are the digits of the phone number you purchased from Vapi."
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+              "bash_20241022"
+            ],
+            "description": "The sub type of tool."
           },
           "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "numberDesiredAreaCode": {
-            "type": "string",
-            "description": "This is the area code of the phone number to purchase.",
-            "minLength": 3,
-            "maxLength": 3
-          },
-          "sipUri": {
+          "name": {
             "type": "string",
-            "description": "This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer.\n\nThis is case-insensitive."
-          },
-          "authentication": {
-            "description": "This enables authentication for incoming SIP INVITE requests to the `sipUri`.\n\nIf not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SipAuthentication"
-              }
+            "description": "The name of the tool, fixed to 'bash'",
+            "default": "bash",
+            "enum": [
+              "bash"
             ]
           }
         },
         "required": [
-          "provider",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "type",
+          "subType",
+          "name"
         ]
       },
-      "TelnyxPhoneNumber": {
+      "CreateComputerToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is to use numbers bought on Telnyx.",
             "enum": [
-              "telnyx"
-            ]
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the phone number."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the org that this phone number belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the phone number was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the phone number was last updated."
+              "computer"
+            ],
+            "description": "The type of tool. \"computer\" for Computer tool."
           },
-          "status": {
+          "subType": {
             "type": "string",
-            "description": "This is the status of the phone number.",
             "enum": [
-              "active",
-              "activating",
-              "blocked"
-            ]
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+              "computer_20241022"
+            ],
+            "description": "The sub type of tool."
           },
           "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "number": {
+          "name": {
             "type": "string",
-            "description": "These are the digits of the phone number you own on your Telnyx."
+            "description": "The name of the tool, fixed to 'computer'",
+            "default": "computer",
+            "enum": [
+              "computer"
+            ]
           },
-          "credentialId": {
-            "type": "string",
-            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
+          "displayWidthPx": {
+            "type": "number",
+            "description": "The display width in pixels"
+          },
+          "displayHeightPx": {
+            "type": "number",
+            "description": "The display height in pixels"
+          },
+          "displayNumber": {
+            "type": "number",
+            "description": "Optional display number"
           }
         },
         "required": [
-          "provider",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "number",
-          "credentialId"
+          "type",
+          "subType",
+          "name",
+          "displayWidthPx",
+          "displayHeightPx"
         ]
       },
-      "CreateByoPhoneNumberDTO": {
+      "CreateTextEditorToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is to bring your own phone numbers from your own SIP trunks or Carriers.",
             "enum": [
-              "byo-phone-number"
-            ]
-          },
-          "numberE164CheckEnabled": {
-            "type": "boolean",
-            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
-            "default": true
-          },
-          "number": {
-            "type": "string",
-            "description": "This is the number of the customer.",
-            "minLength": 3,
-            "maxLength": 40
-          },
-          "credentialId": {
-            "type": "string",
-            "description": "This is the credential of your own SIP trunk or Carrier (type `byo-sip-trunk`) which can be used to make calls to this phone number.\n\nYou can add the SIP trunk or Carrier credential in the Provider Credentials page on the Dashboard to get the credentialId."
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+              "textEditor"
+            ],
+            "description": "The type of tool. \"textEditor\" for Text Editor tool."
           },
-          "squadId": {
+          "subType": {
             "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+            "enum": [
+              "text_editor_20241022"
+            ],
+            "description": "The sub type of tool."
           },
           "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Server"
               }
             ]
+          },
+          "name": {
+            "type": "string",
+            "description": "The name of the tool, fixed to 'str_replace_editor'",
+            "default": "str_replace_editor",
+            "enum": [
+              "str_replace_editor"
+            ]
           }
         },
         "required": [
-          "provider",
-          "credentialId"
+          "type",
+          "subType",
+          "name"
         ]
       },
-      "CreateTwilioPhoneNumberDTO": {
+      "CreateSmsToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "provider": {
+          "type": {
             "type": "string",
-            "description": "This is to use numbers bought on Twilio.",
             "enum": [
-              "twilio"
-            ]
-          },
-          "number": {
-            "type": "string",
-            "description": "These are the digits of the phone number you own on your Twilio."
-          },
-          "twilioAccountSid": {
-            "type": "string",
-            "description": "This is the Twilio Account SID for the phone number."
-          },
-          "twilioAuthToken": {
-            "type": "string",
-            "description": "This is the Twilio Auth Token for the phone number."
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+              "sms"
+            ],
+            "description": "The type of tool. \"sms\" for Twilio SMS sending tool."
           }
         },
         "required": [
-          "provider",
-          "number",
-          "twilioAccountSid",
-          "twilioAuthToken"
+          "type"
         ]
       },
-      "CreateVonagePhoneNumberDTO": {
+      "UpdateApiRequestToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "provider": {
+          "method": {
             "type": "string",
-            "description": "This is to use numbers bought on Vonage.",
             "enum": [
-              "vonage"
+              "POST",
+              "GET",
+              "PUT",
+              "PATCH",
+              "DELETE"
             ]
           },
-          "number": {
-            "type": "string",
-            "description": "These are the digits of the phone number you own on your Vonage."
-          },
-          "credentialId": {
-            "type": "string",
-            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is the timeout in seconds for the request. Defaults to 20 seconds.\n\n@default 20",
+            "minimum": 1,
+            "maximum": 300,
+            "example": 20
           },
           "name": {
             "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
+            "description": "This is the name of the tool. This will be passed to the model.\n\nMust be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 40.",
+            "maxLength": 40,
+            "pattern": "/^[a-zA-Z0-9_-]{1,40}$/"
           },
-          "assistantId": {
+          "description": {
             "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+            "description": "This is the description of the tool. This will be passed to the model.",
+            "maxLength": 1000
           },
-          "squadId": {
+          "url": {
             "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+            "description": "This is where the request will be sent."
           },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+          "body": {
+            "description": "This is the body of the request.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/JsonSchema"
               }
             ]
-          }
-        },
-        "required": [
-          "provider",
-          "number",
-          "credentialId"
-        ]
-      },
-      "CreateVapiPhoneNumberDTO": {
-        "type": "object",
-        "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
+          },
+          "headers": {
+            "description": "These are the headers to send with the request.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
+                "$ref": "#/components/schemas/JsonSchema"
               }
             ]
           },
-          "hooks": {
-            "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
-                }
-              ]
-            }
-          },
-          "provider": {
-            "type": "string",
-            "description": "This is to create free SIP phone numbers on Vapi.",
-            "enum": [
-              "vapi"
-            ]
-          },
-          "numberDesiredAreaCode": {
-            "type": "string",
-            "description": "This is the area code of the phone number to purchase.",
-            "minLength": 3,
-            "maxLength": 3
-          },
-          "sipUri": {
-            "type": "string",
-            "description": "This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer.\n\nThis is case-insensitive."
-          },
-          "authentication": {
-            "description": "This enables authentication for incoming SIP INVITE requests to the `sipUri`.\n\nIf not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.",
+          "backoffPlan": {
+            "description": "This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried).\n\n@default undefined (the request will not be retried)",
             "allOf": [
               {
-                "$ref": "#/components/schemas/SipAuthentication"
+                "$ref": "#/components/schemas/BackoffPlan"
               }
             ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+          "variableExtractionPlan": {
+            "description": "This is the plan to extract variables from the tool's response. These will be accessible during the call and stored in `call.artifact.variableValues` after the call.\n\nUsage:\n1. Use `aliases` to extract variables from the tool's response body. (Most common case)\n\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"customerName\",\n      \"value\": \"{{customer.name}}\"\n    },\n    {\n      \"key\": \"customerAge\",\n      \"value\": \"{{customer.age}}\"\n    }\n  ]\n}\n```\n\nThe tool response body is made available to the liquid template.\n\n2. Use `aliases` to extract variables from the tool's response body if the response is an array.\n\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"customerName\",\n      \"value\": \"{{$[0].name}}\"\n    },\n    {\n      \"key\": \"customerAge\",\n      \"value\": \"{{$[0].age}}\"\n    }\n  ]\n}\n```\n\n$ is a shorthand for the tool's response body. `$[0]` is the first item in the array. `$[n]` is the nth item in the array. Note, $ is available regardless of the response body type (both object and array).\n\n3. Use `aliases` to extract variables from the tool's response headers.\n\n```json\n{\n  \"aliases\": [\n    {\n      \"key\": \"customerName\",\n      \"value\": \"{{tool.response.headers.customer-name}}\"\n    },\n    {\n      \"key\": \"customerAge\",\n      \"value\": \"{{tool.response.headers.customer-age}}\"\n    }\n  ]\n}\n```\n\n`tool.response` is made available to the liquid template. Particularly, both `tool.response.headers` and `tool.response.body` are available. Note, `tool.response` is available regardless of the response body type (both object and array).\n\n4. Use `schema` to extract a large portion of the tool's response body.\n\n4.1. If you hit example.com and it returns `{\"name\": \"John\", \"age\": 30}`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"name\": {\n        \"type\": \"string\"\n      },\n      \"age\": {\n        \"type\": \"number\"\n      }\n    }\n  }\n}\n```\nThese will be extracted as `{{ name }}` and `{{ age }}` respectively. To emphasize, object properties are extracted as direct global variables.\n\n4.2. If you hit example.com and it returns `{\"name\": {\"first\": \"John\", \"last\": \"Doe\"}}`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"name\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"first\": {\n            \"type\": \"string\"\n          },\n          \"last\": {\n            \"type\": \"string\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nThese will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{ name.last }}` will be accessible.\n\n4.3. If you hit example.com and it returns `[\"94123\", \"94124\"]`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"array\",\n    \"title\": \"zipCodes\",\n    \"items\": {\n      \"type\": \"string\"\n    }\n  }\n}\n```\n\nThis will be extracted as `{{ zipCodes }}`. To access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`.\n\n4.4. If you hit example.com and it returns `[{\"name\": \"John\", \"age\": 30, \"zipCodes\": [\"94123\", \"94124\"]}, {\"name\": \"Jane\", \"age\": 25, \"zipCodes\": [\"94125\", \"94126\"]}]`, then you can specify the schema as:\n\n```json\n{\n  \"schema\": {\n    \"type\": \"array\",\n    \"title\": \"people\",\n    \"items\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"age\": {\n          \"type\": \"number\"\n        },\n        \"zipCodes\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nThis will be extracted as `{{ people }}`. To access the array items, you can use `{{ people[n].name }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{ people[n].zipCodes[1] }}`.\n\nNote: Both `aliases` and `schema` can be used together.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/VariableExtractionPlan"
               }
             ]
           }
-        },
-        "required": [
-          "provider"
-        ]
+        }
       },
-      "CreateTelnyxPhoneNumberDTO": {
+      "UpdateDtmfToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          }
+        }
+      },
+      "UpdateEndCallToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
-          },
-          "provider": {
-            "type": "string",
-            "description": "This is to use numbers bought on Telnyx.",
-            "enum": [
-              "telnyx"
-            ]
-          },
-          "number": {
-            "type": "string",
-            "description": "These are the digits of the phone number you own on your Telnyx."
-          },
-          "credentialId": {
-            "type": "string",
-            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
           }
-        },
-        "required": [
-          "provider",
-          "number",
-          "credentialId"
-        ]
+        }
       },
-      "UpdateByoPhoneNumberDTO": {
+      "UpdateFunctionToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "numberE164CheckEnabled": {
+          "async": {
             "type": "boolean",
-            "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)",
-            "default": true
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+            "example": false,
+            "description": "This determines if the tool is async.\n\n  If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\n  If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\n  Defaults to synchronous (`false`)."
           },
           "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "number": {
-            "type": "string",
-            "description": "This is the number of the customer.",
-            "minLength": 3,
-            "maxLength": 40
-          },
-          "credentialId": {
-            "type": "string",
-            "description": "This is the credential of your own SIP trunk or Carrier (type `byo-sip-trunk`) which can be used to make calls to this phone number.\n\nYou can add the SIP trunk or Carrier credential in the Provider Credentials page on the Dashboard to get the credentialId."
+          "function": {
+            "description": "This is the function definition of the tool.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/OpenAIFunction"
+              }
+            ]
           }
         }
       },
-      "UpdateTwilioPhoneNumberDTO": {
+      "UpdateGhlToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "number": {
-            "type": "string",
-            "description": "These are the digits of the phone number you own on your Twilio."
-          },
-          "twilioAccountSid": {
-            "type": "string",
-            "description": "This is the Twilio Account SID for the phone number."
-          },
-          "twilioAuthToken": {
-            "type": "string",
-            "description": "This is the Twilio Auth Token for the phone number."
+          "metadata": {
+            "$ref": "#/components/schemas/GhlToolMetadata"
           }
         }
       },
-      "UpdateVonagePhoneNumberDTO": {
+      "UpdateMakeToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "number": {
-            "type": "string",
-            "description": "These are the digits of the phone number you own on your Vonage."
-          },
-          "credentialId": {
-            "type": "string",
-            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
+          "metadata": {
+            "$ref": "#/components/schemas/MakeToolMetadata"
           }
         }
       },
-      "UpdateVapiPhoneNumberDTO": {
+      "UpdateTransferCallToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "sipUri": {
-            "type": "string",
-            "description": "This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer.\n\nThis is case-insensitive."
-          },
-          "authentication": {
-            "description": "This enables authentication for incoming SIP INVITE requests to the `sipUri`.\n\nIf not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SipAuthentication"
-              }
-            ]
+          "destinations": {
+            "type": "array",
+            "description": "These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TransferDestinationAssistant",
+                  "title": "Assistant"
+                },
+                {
+                  "$ref": "#/components/schemas/TransferDestinationNumber",
+                  "title": "Number"
+                },
+                {
+                  "$ref": "#/components/schemas/TransferDestinationSip",
+                  "title": "Sip"
+                }
+              ]
+            }
           }
         }
       },
-      "UpdateTelnyxPhoneNumberDTO": {
+      "UpdateOutputToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
-            "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "number": {
-            "type": "string",
-            "description": "These are the digits of the phone number you own on your Telnyx."
-          },
-          "credentialId": {
-            "type": "string",
-            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
           }
         }
       },
-      "ImportVonagePhoneNumberDTO": {
+      "UpdateBashToolDTO": {
         "type": "object",
         "properties": {
-          "fallbackDestination": {
-            "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "NumberTransferDestination"
-              },
-              {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "SipTransferDestination"
-              }
-            ]
-          },
-          "hooks": {
+          "messages": {
             "type": "array",
-            "description": "This is the hooks that will be used for incoming calls to this phone number.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/PhoneNumberHookCallRinging",
-                  "title": "PhoneNumberHookCallRinging"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "vonagePhoneNumber": {
-            "type": "string",
-            "description": "These are the digits of the phone number you own on your Vonage.",
-            "deprecated": true
-          },
-          "credentialId": {
-            "type": "string",
-            "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups."
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the phone number. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
-          },
-          "squadId": {
+          "subType": {
             "type": "string",
-            "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected."
+            "enum": [
+              "bash_20241022"
+            ],
+            "description": "The sub type of tool."
           },
           "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Server"
               }
             ]
+          },
+          "name": {
+            "type": "string",
+            "description": "The name of the tool, fixed to 'bash'",
+            "default": "bash",
+            "enum": [
+              "bash"
+            ]
           }
-        },
-        "required": [
-          "vonagePhoneNumber",
-          "credentialId"
-        ]
+        }
       },
-      "PhoneNumberPaginatedResponse": {
+      "UpdateComputerToolDTO": {
         "type": "object",
         "properties": {
-          "results": {
+          "messages": {
             "type": "array",
-            "description": "A list of phone numbers, which can be of any provider type.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/ByoPhoneNumber"
-                },
-                {
-                  "$ref": "#/components/schemas/TwilioPhoneNumber"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/VonagePhoneNumber"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/VapiPhoneNumber"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/TelnyxPhoneNumber"
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
           },
-          "metadata": {
-            "description": "Metadata about the pagination.",
+          "subType": {
+            "type": "string",
+            "enum": [
+              "computer_20241022"
+            ],
+            "description": "The sub type of tool."
+          },
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/PaginationMeta"
+                "$ref": "#/components/schemas/Server"
               }
             ]
+          },
+          "name": {
+            "type": "string",
+            "description": "The name of the tool, fixed to 'computer'",
+            "default": "computer",
+            "enum": [
+              "computer"
+            ]
+          },
+          "displayWidthPx": {
+            "type": "number",
+            "description": "The display width in pixels"
+          },
+          "displayHeightPx": {
+            "type": "number",
+            "description": "The display height in pixels"
+          },
+          "displayNumber": {
+            "type": "number",
+            "description": "Optional display number"
           }
-        },
-        "required": [
-          "results",
-          "metadata"
-        ]
+        }
       },
-      "DtmfTool": {
+      "UpdateTextEditorToolDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -22608,64 +33763,34 @@
               ]
             }
           },
-          "type": {
+          "subType": {
             "type": "string",
             "enum": [
-              "dtmf"
+              "text_editor_20241022"
             ],
-            "description": "The type of tool. \"dtmf\" for DTMF tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
+            "description": "The sub type of tool."
           },
           "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Server"
               }
             ]
+          },
+          "name": {
+            "type": "string",
+            "description": "The name of the tool, fixed to 'str_replace_editor'",
+            "default": "str_replace_editor",
+            "enum": [
+              "str_replace_editor"
+            ]
           }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "EndCallTool": {
+      "UpdateQueryToolDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -22690,64 +33815,18 @@
               ]
             }
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "endCall"
-            ],
-            "description": "The type of tool. \"endCall\" for End Call tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "knowledgeBases": {
+            "description": "The knowledge bases to query",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/KnowledgeBase"
+            }
           }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "FunctionTool": {
+      "UpdateGoogleCalendarCreateEventToolDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -22771,65 +33850,12 @@
                 }
               ]
             }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "function"
-            ],
-            "description": "The type of tool. \"function\" for Function tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
           }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "GhlTool": {
+      "UpdateGoogleSheetsRowAppendToolDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -22853,69 +33879,12 @@
                 }
               ]
             }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "ghl"
-            ],
-            "description": "The type of tool. \"ghl\" for GHL tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "metadata": {
-            "$ref": "#/components/schemas/GhlToolMetadata"
           }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "metadata"
-        ]
+        }
       },
-      "MakeTool": {
+      "UpdateGoogleCalendarCheckAvailabilityToolDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -22939,69 +33908,12 @@
                 }
               ]
             }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "make"
-            ],
-            "description": "The type of tool. \"make\" for Make tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "metadata": {
-            "$ref": "#/components/schemas/MakeToolMetadata"
           }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "metadata"
-        ]
+        }
       },
-      "TransferCallTool": {
+      "UpdateSlackSendMessageToolDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -23025,88 +33937,41 @@
                 }
               ]
             }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "transferCall"
-            ]
-          },
-          "destinations": {
+          }
+        }
+      },
+      "UpdateSmsToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
             "type": "array",
-            "description": "These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called.",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/TransferDestinationAssistant",
-                  "title": "Assistant"
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
                 },
                 {
-                  "$ref": "#/components/schemas/TransferDestinationStep",
-                  "title": "Step"
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
                 },
                 {
-                  "$ref": "#/components/schemas/TransferDestinationNumber",
-                  "title": "Number"
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
                 },
                 {
-                  "$ref": "#/components/schemas/TransferDestinationSip",
-                  "title": "Sip"
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
                 }
               ]
             }
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
           }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "OutputTool": {
+      "UpdateMcpToolDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -23131,64 +33996,22 @@
               ]
             }
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "output"
-            ],
-            "description": "The type of tool. \"output\" for Output tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
           "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Server"
               }
             ]
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/McpToolMetadata"
           }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "BashTool": {
+      "UpdateGoHighLevelCalendarAvailabilityToolDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -23212,82 +34035,41 @@
                 }
               ]
             }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "bash"
-            ],
-            "description": "The type of tool. \"bash\" for Bash tool."
-          },
-          "subType": {
-            "type": "string",
-            "enum": [
-              "bash_20241022"
-            ],
-            "description": "The sub type of tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "name": {
-            "type": "string",
-            "description": "The name of the tool, fixed to 'bash'",
-            "default": "bash",
-            "enum": [
-              "bash"
-            ]
           }
-        },
-        "required": [
-          "type",
-          "subType",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "name"
-        ]
+        }
+      },
+      "UpdateGoHighLevelCalendarEventCreateToolDTO": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          }
+        }
       },
-      "ComputerTool": {
+      "UpdateGoHighLevelContactCreateToolDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -23311,96 +34093,12 @@
                 }
               ]
             }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "computer"
-            ],
-            "description": "The type of tool. \"computer\" for Computer tool."
-          },
-          "subType": {
-            "type": "string",
-            "enum": [
-              "computer_20241022"
-            ],
-            "description": "The sub type of tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "name": {
-            "type": "string",
-            "description": "The name of the tool, fixed to 'computer'",
-            "default": "computer",
-            "enum": [
-              "computer"
-            ]
-          },
-          "displayWidthPx": {
-            "type": "number",
-            "description": "The display width in pixels"
-          },
-          "displayHeightPx": {
-            "type": "number",
-            "description": "The display height in pixels"
-          },
-          "displayNumber": {
-            "type": "number",
-            "description": "Optional display number"
           }
-        },
-        "required": [
-          "type",
-          "subType",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "name",
-          "displayWidthPx",
-          "displayHeightPx"
-        ]
+        }
       },
-      "TextEditorTool": {
+      "UpdateGoHighLevelContactGetToolDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -23424,2707 +34122,2828 @@
                 }
               ]
             }
-          },
-          "type": {
+          }
+        }
+      },
+      "CreateFileDTO": {
+        "type": "object",
+        "properties": {
+          "file": {
+            "type": "string",
+            "description": "This is the File you want to upload for use with the Knowledge Base.",
+            "format": "binary"
+          }
+        },
+        "required": [
+          "file"
+        ]
+      },
+      "File": {
+        "type": "object",
+        "properties": {
+          "object": {
             "type": "string",
             "enum": [
-              "textEditor"
-            ],
-            "description": "The type of tool. \"textEditor\" for Text Editor tool."
+              "file"
+            ]
           },
-          "subType": {
-            "type": "string",
+          "status": {
             "enum": [
-              "text_editor_20241022"
+              "processing",
+              "done",
+              "failed"
             ],
-            "description": "The sub type of tool."
+            "type": "string"
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the file. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "originalName": {
+            "type": "string"
+          },
+          "bytes": {
+            "type": "number"
+          },
+          "purpose": {
+            "type": "string"
+          },
+          "mimetype": {
+            "type": "string"
+          },
+          "key": {
+            "type": "string"
+          },
+          "path": {
+            "type": "string"
+          },
+          "bucket": {
+            "type": "string"
+          },
+          "url": {
+            "type": "string"
+          },
+          "parsedTextUrl": {
+            "type": "string"
+          },
+          "parsedTextBytes": {
+            "type": "number"
+          },
+          "metadata": {
+            "type": "object"
           },
           "id": {
             "type": "string",
-            "description": "This is the unique identifier for the tool."
+            "description": "This is the unique identifier for the file."
           },
           "orgId": {
             "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
+            "description": "This is the unique identifier for the org that this file belongs to."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
+            "description": "This is the ISO 8601 date-time string of when the file was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+            "description": "This is the ISO 8601 date-time string of when the file was last updated."
+          }
+        },
+        "required": [
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "UpdateFileDTO": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of the file. This is just for your own reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "TrieveKnowledgeBaseSearchPlan": {
+        "type": "object",
+        "properties": {
+          "topK": {
+            "type": "number",
+            "description": "Specifies the number of top chunks to return. This corresponds to the `page_size` parameter in Trieve."
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "removeStopWords": {
+            "type": "boolean",
+            "description": "If true, stop words (specified in server/src/stop-words.txt in the git repo) will be removed. This will preserve queries that are entirely stop words."
+          },
+          "scoreThreshold": {
+            "type": "number",
+            "description": "This is the score threshold to filter out chunks with a score below the threshold for cosine distance metric. For Manhattan Distance, Euclidean Distance, and Dot Product, it will filter out scores above the threshold distance. This threshold applies before weight and bias modifications. If not specified, this defaults to no threshold. A threshold of 0 will default to no threshold."
+          },
+          "searchType": {
+            "type": "string",
+            "description": "This is the search method used when searching for relevant chunks from the vector store.",
+            "enum": [
+              "fulltext",
+              "semantic",
+              "hybrid",
+              "bm25"
+            ]
+          }
+        },
+        "required": [
+          "searchType"
+        ]
+      },
+      "TrieveKnowledgeBase": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "description": "This knowledge base is provided by Trieve.\n\nTo learn more about Trieve, visit https://trieve.ai.",
+            "enum": [
+              "trieve"
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the knowledge base."
+          },
+          "searchPlan": {
+            "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
+          "createPlan": {
+            "description": "This is the plan if you want us to create/import a new vector store using Trieve.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/TrieveKnowledgeBaseImport",
+                "title": "Import"
               }
             ]
           },
-          "name": {
+          "id": {
             "type": "string",
-            "description": "The name of the tool, fixed to 'str_replace_editor'",
-            "default": "str_replace_editor",
-            "enum": [
-              "str_replace_editor"
-            ]
+            "description": "This is the id of the knowledge base."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the org id of the knowledge base."
           }
         },
         "required": [
-          "type",
-          "subType",
+          "provider",
           "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "name"
+          "orgId"
         ]
       },
-      "QueryTool": {
+      "CustomKnowledgeBase": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
+          "provider": {
             "type": "string",
+            "description": "This knowledge base is bring your own knowledge base implementation.",
             "enum": [
-              "query"
-            ],
-            "description": "The type of tool. \"query\" for Query tool."
+              "custom-knowledge-base"
+            ]
           },
-          "knowledgeBases": {
-            "description": "The knowledge bases to query",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/KnowledgeBase"
-            }
+          "server": {
+            "description": "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"messsage\": {\n    \"type\": \"knowledge-base-request\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"content\": \"Why is ocean blue?\"\n      }\n    ],\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected:\n```\n{\n  \"message\": {\n     \"role\": \"assistant\",\n     \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n  }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK\n  \"documents\": [\n    {\n      \"content\": \"The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.\",\n      \"similarity\": 1\n    },\n    {\n      \"content\": \"Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n      \"similarity\": .5\n    }\n  ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
           },
           "id": {
             "type": "string",
-            "description": "This is the unique identifier for the tool."
+            "description": "This is the id of the knowledge base."
           },
           "orgId": {
             "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
+            "description": "This is the org id of the knowledge base."
+          }
+        },
+        "required": [
+          "provider",
+          "server",
+          "id",
+          "orgId"
+        ]
+      },
+      "CreateTrieveKnowledgeBaseDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
+            "description": "This knowledge base is provided by Trieve.\n\nTo learn more about Trieve, visit https://trieve.ai.",
+            "enum": [
+              "trieve"
+            ]
           },
-          "updatedAt": {
-            "format": "date-time",
+          "name": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+            "description": "This is the name of the knowledge base."
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "searchPlan": {
+            "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
+          "createPlan": {
+            "description": "This is the plan if you want us to create/import a new vector store using Trieve.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/TrieveKnowledgeBaseImport",
+                "title": "Import"
               }
             ]
           }
         },
         "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "provider"
         ]
       },
-      "GoogleCalendarCreateEventTool": {
+      "UpdateTrieveKnowledgeBaseDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "google.calendar.event.create"
-            ],
-            "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
+          "name": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+            "description": "This is the name of the knowledge base."
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "searchPlan": {
+            "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan"
               }
             ]
           },
+          "createPlan": {
+            "description": "This is the plan if you want us to create/import a new vector store using Trieve.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TrieveKnowledgeBaseImport",
+                "title": "Import"
+              }
+            ]
+          }
+        }
+      },
+      "UpdateCustomKnowledgeBaseDTO": {
+        "type": "object",
+        "properties": {
           "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+            "description": "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"messsage\": {\n    \"type\": \"knowledge-base-request\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"content\": \"Why is ocean blue?\"\n      }\n    ],\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected:\n```\n{\n  \"message\": {\n     \"role\": \"assistant\",\n     \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n  }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK\n  \"documents\": [\n    {\n      \"content\": \"The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.\",\n      \"similarity\": 1\n    },\n    {\n      \"content\": \"Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n      \"similarity\": .5\n    }\n  ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Server"
               }
             ]
           }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "GoogleSheetsRowAppendTool": {
+      "TrieveKnowledgeBaseChunkPlan": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
+          "fileIds": {
+            "description": "These are the file ids that will be used to create the vector store. To upload files, use the `POST /files` endpoint.",
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
+              "type": "string"
             }
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "google.sheets.row.append"
-            ],
-            "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
+          "websites": {
+            "description": "These are the websites that will be used to create the vector store.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
+          "targetSplitsPerChunk": {
+            "type": "number",
+            "description": "This is an optional field which allows you to specify the number of splits you want per chunk. If not specified, the default 20 is used. However, you may want to use a different number."
           },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          "splitDelimiters": {
+            "description": "This is an optional field which allows you to specify the delimiters to use when splitting the file before chunking the text. If not specified, the default [.!?\\n] are used to split into sentences. However, you may want to use spaces or other delimiters.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "updatedAt": {
-            "format": "date-time",
+          "rebalanceChunks": {
+            "type": "boolean",
+            "description": "This is an optional field which allows you to specify whether or not to rebalance the chunks created from the file. If not specified, the default true is used. If true, Trieve will evenly distribute remainder splits across chunks such that 66 splits with a target_splits_per_chunk of 20 will result in 3 chunks with 22 splits each."
+          }
+        }
+      },
+      "TrieveKnowledgeBaseCreate": {
+        "type": "object",
+        "properties": {
+          "type": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
+            "description": "This is to create a new dataset on Trieve.",
+            "enum": [
+              "create"
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "chunkPlans": {
+            "description": "These are the chunk plans used to create the dataset.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/TrieveKnowledgeBaseChunkPlan"
+            }
           }
         },
         "required": [
           "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "chunkPlans"
         ]
       },
-      "GoogleCalendarCheckAvailabilityTool": {
+      "TrieveKnowledgeBaseImport": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
           "type": {
             "type": "string",
+            "description": "This is to import an existing dataset from Trieve.",
             "enum": [
-              "google.calendar.availability.check"
-            ],
-            "description": "The type of tool. \"google.calendar.availability.check\" for Google Calendar availability check tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
+              "import"
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "providerId": {
+            "type": "string",
+            "description": "This is the `datasetId` of the dataset on your Trieve account."
           }
         },
         "required": [
           "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "providerId"
         ]
       },
-      "SlackSendMessageTool": {
+      "Workflow": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
+          "nodes": {
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/ConversationNode",
+                  "title": "ConversationNode"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
+                  "$ref": "#/components/schemas/ToolNode",
+                  "title": "ToolNode"
                 }
               ]
             }
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "slack.message.send"
-            ],
-            "description": "The type of tool. \"slack.message.send\" for Slack send message tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
+          "model": {
+            "description": "This is the model for the workflow.\n\nThis can be overridden at node level using `nodes[n].model`.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/WorkflowOpenAIModel",
+                "title": "WorkflowOpenAIModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowAnthropicModel",
+                "title": "WorkflowAnthropicModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowGoogleModel",
+                "title": "WorkflowGoogleModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowCustomModel",
+                "title": "WorkflowCustomModel"
+              }
+            ]
           },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
+          "transcriber": {
+            "description": "This is the transcriber for the workflow.\n\nThis can be overridden at node level using `nodes[n].transcriber`.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AssemblyAITranscriber",
+                "title": "AssemblyAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/AzureSpeechTranscriber",
+                "title": "AzureSpeechTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CustomTranscriber",
+                "title": "CustomTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramTranscriber",
+                "title": "DeepgramTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsTranscriber",
+                "title": "ElevenLabsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GladiaTranscriber",
+                "title": "GladiaTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleTranscriber",
+                "title": "GoogleTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
+                "title": "SpeechmaticsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/TalkscriberTranscriber",
+                "title": "TalkscriberTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAITranscriber",
+                "title": "OpenAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaTranscriber",
+                "title": "CartesiaTranscriber"
+              }
+            ]
           },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+          "voice": {
+            "description": "This is the voice for the workflow.\n\nThis can be overridden at node level using `nodes[n].voice`.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AzureVoice",
+                "title": "AzureVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaVoice",
+                "title": "CartesiaVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CustomVoice",
+                "title": "CustomVoice"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramVoice",
+                "title": "DeepgramVoice"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsVoice",
+                "title": "ElevenLabsVoice"
+              },
+              {
+                "$ref": "#/components/schemas/HumeVoice",
+                "title": "HumeVoice"
+              },
+              {
+                "$ref": "#/components/schemas/LMNTVoice",
+                "title": "LMNTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/NeuphonicVoice",
+                "title": "NeuphonicVoice"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoice",
+                "title": "OpenAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/PlayHTVoice",
+                "title": "PlayHTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/RimeAIVoice",
+                "title": "RimeAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SmallestAIVoice",
+                "title": "SmallestAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/TavusVoice",
+                "title": "TavusVoice"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoice",
+                "title": "VapiVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SesameVoice",
+                "title": "SesameVoice"
+              },
+              {
+                "$ref": "#/components/schemas/InworldVoice",
+                "title": "InworldVoice"
+              },
+              {
+                "$ref": "#/components/schemas/MinimaxVoice",
+                "title": "MinimaxVoice"
+              }
+            ]
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "observabilityPlan": {
+            "description": "This is the plan for observability of workflow's calls.\n\nCurrently, only Langfuse is supported.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
+                "title": "Langfuse"
+              }
+            ],
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
+          "backgroundSound": {
+            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "type": "enum",
+                "enum": [
+                  "off",
+                  "office"
+                ],
+                "example": "office"
+              },
+              {
+                "type": "string",
+                "format": "uri",
+                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
               }
             ]
-          }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
-      },
-      "SmsSendTool": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
           },
-          "messages": {
+          "hooks": {
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "description": "This is a set of actions that will be performed on certain events.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
+                  "$ref": "#/components/schemas/CallHookCallEnding",
+                  "title": "CallHookCallEnding"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
+                  "$ref": "#/components/schemas/CallHookAssistantSpeechInterrupted",
+                  "title": "CallHookAssistantSpeechInterrupted"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechInterrupted",
+                  "title": "CallHookCustomerSpeechInterrupted"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechTimeout",
+                  "title": "CallHookCustomerSpeechTimeout"
                 }
               ]
             }
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "sms"
-            ],
-            "description": "The type of tool. \"sms\" for Twilio SMS sending tool."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
-      },
-      "McpTool": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
+          "credentials": {
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "description": "These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
+                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "title": "AnthropicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "title": "AnyscaleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "title": "AssemblyAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
+                  "title": "AzureCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "title": "AzureOpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "title": "ByoSipTrunkCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "title": "CartesiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "title": "CerebrasCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "title": "CloudflareCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "title": "CustomLLMCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "title": "DeepgramCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "title": "DeepInfraCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "title": "DeepSeekCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "title": "ElevenLabsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
+                  "title": "GcpCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "title": "GladiaCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "title": "GhlCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "title": "GoogleCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
+                  "title": "GroqCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
+                  "title": "HumeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "title": "InflectionAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "title": "LangfuseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
+                  "title": "LmntCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
+                  "title": "MakeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
+                  "title": "MistralCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "title": "NeuphonicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "title": "OpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "title": "OpenRouterCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "title": "PerplexityAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "title": "PlayHTCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "title": "RimeAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "title": "RunpodCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
+                  "title": "S3Credential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "title": "SmallestAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "title": "SpeechmaticsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "title": "SupabaseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
+                  "title": "TavusCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "title": "TogetherAICredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
+                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "title": "TrieveCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "title": "TwilioCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
+                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
+                  "title": "VonageCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "title": "WebhookCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
+                  "title": "XAiCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "title": "GoogleCalendarOAuth2ClientCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "title": "SlackOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "title": "GoHighLevelMCPCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInworldCredentialDTO",
+                  "title": "InworldCredential"
                 }
-              ]
+              ],
+              "discriminator": {
+                "propertyName": "provider",
+                "mapping": {
+                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
+                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
+                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
+                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
+                  "make": "#/components/schemas/CreateMakeCredentialDTO",
+                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "s3": "#/components/schemas/CreateS3CredentialDTO",
+                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
+                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
+                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
+                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
+                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
+                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "inworld": "#/components/schemas/CreateInworldCredentialDTO",
+                  "minimax": "#/components/schemas/CreateMinimaxCredentialDTO"
+                }
+              }
             }
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "mcp"
-            ],
-            "description": "The type of tool. \"mcp\" for MCP tool."
-          },
           "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the tool."
+            "type": "string"
           },
           "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization that this tool belongs to."
+            "type": "string"
           },
           "createdAt": {
             "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was created."
+            "type": "string"
           },
           "updatedAt": {
             "format": "date-time",
+            "type": "string"
+          },
+          "name": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the tool was last updated."
+            "maxLength": 80
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
+          "edges": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/Edge"
+            }
+          },
+          "globalPrompt": {
+            "type": "string",
+            "maxLength": 5000
           },
           "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. tool.server\n2. workflow.server / assistant.server\n3. phoneNumber.server\n4. org.server",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Server"
               }
             ]
-          }
-        },
-        "required": [
-          "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
-      },
-      "CreateOutputToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "output"
-            ],
-            "description": "The type of tool. \"output\" for Output tool."
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "compliancePlan": {
+            "description": "This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/CompliancePlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "analysisPlan": {
+            "description": "This is the plan for analysis of workflow's calls. Stored in `call.analysis`.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/AnalysisPlan"
               }
             ]
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "CreateBashToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "bash"
-            ],
-            "description": "The type of tool. \"bash\" for Bash tool."
           },
-          "subType": {
-            "type": "string",
-            "enum": [
-              "bash_20241022"
-            ],
-            "description": "The sub type of tool."
-          },
-          "name": {
-            "type": "string",
-            "description": "The name of the tool, fixed to 'bash'",
-            "default": "bash",
-            "enum": [
-              "bash"
+          "artifactPlan": {
+            "description": "This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ArtifactPlan"
+              }
             ]
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "startSpeakingPlan": {
+            "description": "This is the plan for when the workflow nodes should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/StartSpeakingPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "stopSpeakingPlan": {
+            "description": "This is the plan for when workflow nodes should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/StopSpeakingPlan"
               }
             ]
-          }
-        },
-        "required": [
-          "type",
-          "subType",
-          "name"
-        ]
-      },
-      "CreateComputerToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "computer"
-            ],
-            "description": "The type of tool. \"computer\" for Computer tool."
-          },
-          "subType": {
-            "type": "string",
-            "enum": [
-              "computer_20241022"
-            ],
-            "description": "The sub type of tool."
           },
-          "name": {
-            "type": "string",
-            "description": "The name of the tool, fixed to 'computer'",
-            "default": "computer",
-            "enum": [
-              "computer"
+          "monitorPlan": {
+            "description": "This is the plan for real-time monitoring of the workflow's calls.\n\nUsage:\n- To enable live listening of the workflow's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the workflow's calls, set `monitorPlan.controlEnabled` to `true`.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/MonitorPlan"
+              }
             ]
           },
-          "displayWidthPx": {
-            "type": "number",
-            "description": "The display width in pixels"
-          },
-          "displayHeightPx": {
-            "type": "number",
-            "description": "The display height in pixels"
-          },
-          "displayNumber": {
-            "type": "number",
-            "description": "Optional display number"
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "backgroundSpeechDenoisingPlan": {
+            "description": "This enables filtering of noise and background speech while the user is talking.\n\nFeatures:\n- Smart denoising using Krisp\n- Fourier denoising\n\nBoth can be used together. Order of precedence:\n- Smart denoising\n- Fourier denoising",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/BackgroundSpeechDenoisingPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "credentialIds": {
+            "description": "These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "keypadInputPlan": {
+            "description": "This is the plan for keypad input handling during workflow calls.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/KeypadInputPlan"
               }
             ]
           }
         },
         "required": [
-          "type",
-          "subType",
+          "nodes",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
           "name",
-          "displayWidthPx",
-          "displayHeightPx"
+          "edges"
         ]
       },
-      "CreateTextEditorToolDTO": {
+      "UpdateWorkflowDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
+          "nodes": {
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/ConversationNode",
+                  "title": "ConversationNode"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
+                  "$ref": "#/components/schemas/ToolNode",
+                  "title": "ToolNode"
                 }
               ]
             }
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "textEditor"
-            ],
-            "description": "The type of tool. \"textEditor\" for Text Editor tool."
-          },
-          "subType": {
-            "type": "string",
-            "enum": [
-              "text_editor_20241022"
-            ],
-            "description": "The sub type of tool."
-          },
-          "name": {
-            "type": "string",
-            "description": "The name of the tool, fixed to 'str_replace_editor'",
-            "default": "str_replace_editor",
-            "enum": [
-              "str_replace_editor"
-            ]
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
+          "model": {
+            "description": "This is the model for the workflow.\n\nThis can be overridden at node level using `nodes[n].model`.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/WorkflowOpenAIModel",
+                "title": "WorkflowOpenAIModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowAnthropicModel",
+                "title": "WorkflowAnthropicModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowGoogleModel",
+                "title": "WorkflowGoogleModel"
+              },
+              {
+                "$ref": "#/components/schemas/WorkflowCustomModel",
+                "title": "WorkflowCustomModel"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
+          "transcriber": {
+            "description": "This is the transcriber for the workflow.\n\nThis can be overridden at node level using `nodes[n].transcriber`.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/AssemblyAITranscriber",
+                "title": "AssemblyAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/AzureSpeechTranscriber",
+                "title": "AzureSpeechTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CustomTranscriber",
+                "title": "CustomTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramTranscriber",
+                "title": "DeepgramTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsTranscriber",
+                "title": "ElevenLabsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GladiaTranscriber",
+                "title": "GladiaTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleTranscriber",
+                "title": "GoogleTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/SpeechmaticsTranscriber",
+                "title": "SpeechmaticsTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/TalkscriberTranscriber",
+                "title": "TalkscriberTranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAITranscriber",
+                "title": "OpenAITranscriber"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaTranscriber",
+                "title": "CartesiaTranscriber"
               }
             ]
-          }
-        },
-        "required": [
-          "type",
-          "subType",
-          "name"
-        ]
-      },
-      "CreateSmsSendToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
           },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
+          "voice": {
+            "description": "This is the voice for the workflow.\n\nThis can be overridden at node level using `nodes[n].voice`.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/AzureVoice",
+                "title": "AzureVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CartesiaVoice",
+                "title": "CartesiaVoice"
+              },
+              {
+                "$ref": "#/components/schemas/CustomVoice",
+                "title": "CustomVoice"
+              },
+              {
+                "$ref": "#/components/schemas/DeepgramVoice",
+                "title": "DeepgramVoice"
+              },
+              {
+                "$ref": "#/components/schemas/ElevenLabsVoice",
+                "title": "ElevenLabsVoice"
+              },
+              {
+                "$ref": "#/components/schemas/HumeVoice",
+                "title": "HumeVoice"
+              },
+              {
+                "$ref": "#/components/schemas/LMNTVoice",
+                "title": "LMNTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/NeuphonicVoice",
+                "title": "NeuphonicVoice"
+              },
+              {
+                "$ref": "#/components/schemas/OpenAIVoice",
+                "title": "OpenAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/PlayHTVoice",
+                "title": "PlayHTVoice"
+              },
+              {
+                "$ref": "#/components/schemas/RimeAIVoice",
+                "title": "RimeAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SmallestAIVoice",
+                "title": "SmallestAIVoice"
+              },
+              {
+                "$ref": "#/components/schemas/TavusVoice",
+                "title": "TavusVoice"
+              },
+              {
+                "$ref": "#/components/schemas/VapiVoice",
+                "title": "VapiVoice"
+              },
+              {
+                "$ref": "#/components/schemas/SesameVoice",
+                "title": "SesameVoice"
+              },
+              {
+                "$ref": "#/components/schemas/InworldVoice",
+                "title": "InworldVoice"
+              },
+              {
+                "$ref": "#/components/schemas/MinimaxVoice",
+                "title": "MinimaxVoice"
+              }
+            ]
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "sms"
+          "observabilityPlan": {
+            "description": "This is the plan for observability of workflow's calls.\n\nCurrently, only Langfuse is supported.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan",
+                "title": "Langfuse"
+              }
             ],
-            "description": "The type of tool. \"sms\" for Twilio SMS sending tool."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/LangfuseObservabilityPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
+          "backgroundSound": {
+            "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.",
+            "oneOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "type": "enum",
+                "enum": [
+                  "off",
+                  "office"
+                ],
+                "example": "office"
+              },
+              {
+                "type": "string",
+                "format": "uri",
+                "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3"
               }
             ]
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "CreateMcpToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
           },
-          "messages": {
+          "hooks": {
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "description": "This is a set of actions that will be performed on certain events.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
+                  "$ref": "#/components/schemas/CallHookCallEnding",
+                  "title": "CallHookCallEnding"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
+                  "$ref": "#/components/schemas/CallHookAssistantSpeechInterrupted",
+                  "title": "CallHookAssistantSpeechInterrupted"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechInterrupted",
+                  "title": "CallHookCustomerSpeechInterrupted"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
+                  "$ref": "#/components/schemas/CallHookCustomerSpeechTimeout",
+                  "title": "CallHookCustomerSpeechTimeout"
                 }
               ]
             }
           },
-          "type": {
-            "type": "string",
-            "enum": [
-              "mcp"
-            ],
-            "description": "The type of tool. \"mcp\" for MCP tool."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "UpdateDtmfToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
+          "credentials": {
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "description": "These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
+                  "$ref": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "title": "AnthropicCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
+                  "$ref": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "title": "AnyscaleCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "title": "AssemblyAICredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          }
-        }
-      },
-      "UpdateEndCallToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
+                  "$ref": "#/components/schemas/CreateAzureCredentialDTO",
+                  "title": "AzureCredential"
+                },
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
+                  "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "title": "AzureOpenAICredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
+                  "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "title": "ByoSipTrunkCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "title": "CartesiaCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          }
-        }
-      },
-      "UpdateFunctionToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
+                  "$ref": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "title": "CerebrasCredential"
+                },
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
+                  "$ref": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "title": "CloudflareCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
+                  "$ref": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "title": "CustomLLMCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "title": "DeepgramCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          }
-        }
-      },
-      "UpdateGhlToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
+                  "$ref": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "title": "DeepInfraCredential"
+                },
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
+                  "$ref": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "title": "DeepSeekCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
+                  "$ref": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "title": "ElevenLabsCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/CreateGcpCredentialDTO",
+                  "title": "GcpCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "metadata": {
-            "$ref": "#/components/schemas/GhlToolMetadata"
-          }
-        }
-      },
-      "UpdateMakeToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
+                  "$ref": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "title": "GladiaCredential"
+                },
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
+                  "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "title": "GhlCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
+                  "$ref": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "title": "GoogleCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/CreateGroqCredentialDTO",
+                  "title": "GroqCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
-          },
-          "metadata": {
-            "$ref": "#/components/schemas/MakeToolMetadata"
-          }
-        }
-      },
-      "UpdateTransferCallToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
+                  "$ref": "#/components/schemas/CreateHumeCredentialDTO",
+                  "title": "HumeCredential"
+                },
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
+                  "$ref": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "title": "InflectionAICredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
+                  "$ref": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "title": "LangfuseCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
+                  "$ref": "#/components/schemas/CreateLmntCredentialDTO",
+                  "title": "LmntCredential"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
+                  "$ref": "#/components/schemas/CreateMakeCredentialDTO",
+                  "title": "MakeCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateMistralCredentialDTO",
+                  "title": "MistralCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "title": "NeuphonicCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "title": "OpenAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "title": "OpenRouterCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "title": "PerplexityAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "title": "PlayHTCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "title": "RimeAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "title": "RunpodCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateS3CredentialDTO",
+                  "title": "S3Credential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "title": "SmallestAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "title": "SpeechmaticsCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "title": "SupabaseCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTavusCredentialDTO",
+                  "title": "TavusCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "title": "TogetherAICredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "title": "TrieveCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "title": "TwilioCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateVonageCredentialDTO",
+                  "title": "VonageCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "title": "WebhookCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateXAiCredentialDTO",
+                  "title": "XAiCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "title": "GoogleCalendarOAuth2ClientCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleCalendarOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "title": "GoogleSheetsOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "title": "SlackOAuth2AuthorizationCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "title": "GoHighLevelMCPCredential"
+                },
+                {
+                  "$ref": "#/components/schemas/CreateInworldCredentialDTO",
+                  "title": "InworldCredential"
+                }
+              ],
+              "discriminator": {
+                "propertyName": "provider",
+                "mapping": {
+                  "11labs": "#/components/schemas/CreateElevenLabsCredentialDTO",
+                  "anthropic": "#/components/schemas/CreateAnthropicCredentialDTO",
+                  "anyscale": "#/components/schemas/CreateAnyscaleCredentialDTO",
+                  "assembly-ai": "#/components/schemas/CreateAssemblyAICredentialDTO",
+                  "azure-openai": "#/components/schemas/CreateAzureOpenAICredentialDTO",
+                  "azure": "#/components/schemas/CreateAzureCredentialDTO",
+                  "byo-sip-trunk": "#/components/schemas/CreateByoSipTrunkCredentialDTO",
+                  "cartesia": "#/components/schemas/CreateCartesiaCredentialDTO",
+                  "cerebras": "#/components/schemas/CreateCerebrasCredentialDTO",
+                  "cloudflare": "#/components/schemas/CreateCloudflareCredentialDTO",
+                  "custom-llm": "#/components/schemas/CreateCustomLLMCredentialDTO",
+                  "deepgram": "#/components/schemas/CreateDeepgramCredentialDTO",
+                  "deepinfra": "#/components/schemas/CreateDeepInfraCredentialDTO",
+                  "deep-seek": "#/components/schemas/CreateDeepSeekCredentialDTO",
+                  "gcp": "#/components/schemas/CreateGcpCredentialDTO",
+                  "gladia": "#/components/schemas/CreateGladiaCredentialDTO",
+                  "gohighlevel": "#/components/schemas/CreateGoHighLevelCredentialDTO",
+                  "google": "#/components/schemas/CreateGoogleCredentialDTO",
+                  "groq": "#/components/schemas/CreateGroqCredentialDTO",
+                  "inflection-ai": "#/components/schemas/CreateInflectionAICredentialDTO",
+                  "langfuse": "#/components/schemas/CreateLangfuseCredentialDTO",
+                  "lmnt": "#/components/schemas/CreateLmntCredentialDTO",
+                  "make": "#/components/schemas/CreateMakeCredentialDTO",
+                  "openai": "#/components/schemas/CreateOpenAICredentialDTO",
+                  "openrouter": "#/components/schemas/CreateOpenRouterCredentialDTO",
+                  "perplexity-ai": "#/components/schemas/CreatePerplexityAICredentialDTO",
+                  "playht": "#/components/schemas/CreatePlayHTCredentialDTO",
+                  "rime-ai": "#/components/schemas/CreateRimeAICredentialDTO",
+                  "runpod": "#/components/schemas/CreateRunpodCredentialDTO",
+                  "s3": "#/components/schemas/CreateS3CredentialDTO",
+                  "supabase": "#/components/schemas/CreateSupabaseCredentialDTO",
+                  "smallest-ai": "#/components/schemas/CreateSmallestAICredentialDTO",
+                  "tavus": "#/components/schemas/CreateTavusCredentialDTO",
+                  "together-ai": "#/components/schemas/CreateTogetherAICredentialDTO",
+                  "twilio": "#/components/schemas/CreateTwilioCredentialDTO",
+                  "vonage": "#/components/schemas/CreateVonageCredentialDTO",
+                  "webhook": "#/components/schemas/CreateWebhookCredentialDTO",
+                  "xai": "#/components/schemas/CreateXAiCredentialDTO",
+                  "neuphonic": "#/components/schemas/CreateNeuphonicCredentialDTO",
+                  "hume": "#/components/schemas/CreateHumeCredentialDTO",
+                  "mistral": "#/components/schemas/CreateMistralCredentialDTO",
+                  "speechmatics": "#/components/schemas/CreateSpeechmaticsCredentialDTO",
+                  "trieve": "#/components/schemas/CreateTrieveCredentialDTO",
+                  "google.calendar.oauth2-client": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO",
+                  "google.calendar.oauth2-authorization": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO",
+                  "google.sheets.oauth2-authorization": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO",
+                  "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO",
+                  "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO",
+                  "inworld": "#/components/schemas/CreateInworldCredentialDTO",
+                  "minimax": "#/components/schemas/CreateMinimaxCredentialDTO"
                 }
-              ]
+              }
             }
           },
-          "destinations": {
+          "name": {
+            "type": "string",
+            "maxLength": 80
+          },
+          "edges": {
             "type": "array",
-            "description": "These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TransferDestinationAssistant",
-                  "title": "Assistant"
-                },
-                {
-                  "$ref": "#/components/schemas/TransferDestinationStep",
-                  "title": "Step"
-                },
-                {
-                  "$ref": "#/components/schemas/TransferDestinationNumber",
-                  "title": "Number"
-                },
-                {
-                  "$ref": "#/components/schemas/TransferDestinationSip",
-                  "title": "Sip"
-                }
-              ]
+              "$ref": "#/components/schemas/Edge"
             }
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "globalPrompt": {
+            "type": "string",
+            "maxLength": 5000
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. tool.server\n2. workflow.server / assistant.server\n3. phoneNumber.server\n4. org.server",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "compliancePlan": {
+            "description": "This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/CompliancePlan"
               }
             ]
-          }
-        }
-      },
-      "UpdateOutputToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "analysisPlan": {
+            "description": "This is the plan for analysis of workflow's calls. Stored in `call.analysis`.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/AnalysisPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "artifactPlan": {
+            "description": "This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/ArtifactPlan"
               }
             ]
-          }
-        }
-      },
-      "UpdateBashToolDTO": {
-        "type": "object",
-        "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
           },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
+          "startSpeakingPlan": {
+            "description": "This is the plan for when the workflow nodes should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StartSpeakingPlan"
+              }
+            ]
           },
-          "subType": {
-            "type": "string",
-            "enum": [
-              "bash_20241022"
-            ],
-            "description": "The sub type of tool."
+          "stopSpeakingPlan": {
+            "description": "This is the plan for when workflow nodes should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/StopSpeakingPlan"
+              }
+            ]
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "monitorPlan": {
+            "description": "This is the plan for real-time monitoring of the workflow's calls.\n\nUsage:\n- To enable live listening of the workflow's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the workflow's calls, set `monitorPlan.controlEnabled` to `true`.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/MonitorPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "backgroundSpeechDenoisingPlan": {
+            "description": "This enables filtering of noise and background speech while the user is talking.\n\nFeatures:\n- Smart denoising using Krisp\n- Fourier denoising\n\nBoth can be used together. Order of precedence:\n- Smart denoising\n- Fourier denoising",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/BackgroundSpeechDenoisingPlan"
               }
             ]
           },
-          "name": {
-            "type": "string",
-            "description": "The name of the tool, fixed to 'bash'",
-            "default": "bash",
-            "enum": [
-              "bash"
+          "credentialIds": {
+            "description": "These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "keypadInputPlan": {
+            "description": "This is the plan for keypad input handling during workflow calls.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/KeypadInputPlan"
+              }
             ]
           }
         }
       },
-      "UpdateComputerToolDTO": {
+      "Squad": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
+          "name": {
+            "type": "string",
+            "description": "This is the name of the squad."
           },
-          "messages": {
+          "members": {
+            "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.",
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
+              "$ref": "#/components/schemas/SquadMemberDTO"
             }
           },
-          "subType": {
-            "type": "string",
-            "enum": [
-              "computer_20241022"
-            ],
-            "description": "The sub type of tool."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "membersOverrides": {
+            "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/AssistantOverrides"
               }
             ]
           },
-          "name": {
+          "id": {
             "type": "string",
-            "description": "The name of the tool, fixed to 'computer'",
-            "default": "computer",
-            "enum": [
-              "computer"
-            ]
+            "description": "This is the unique identifier for the squad."
           },
-          "displayWidthPx": {
-            "type": "number",
-            "description": "The display width in pixels"
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this squad belongs to."
           },
-          "displayHeightPx": {
-            "type": "number",
-            "description": "The display height in pixels"
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the squad was created."
           },
-          "displayNumber": {
-            "type": "number",
-            "description": "Optional display number"
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the squad was last updated."
           }
-        }
+        },
+        "required": [
+          "members",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
       },
-      "UpdateTextEditorToolDTO": {
+      "UpdateSquadDTO": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
+          "name": {
+            "type": "string",
+            "description": "This is the name of the squad."
           },
-          "messages": {
+          "members": {
+            "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.",
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
+              "$ref": "#/components/schemas/SquadMemberDTO"
             }
           },
-          "subType": {
-            "type": "string",
-            "enum": [
-              "text_editor_20241022"
-            ],
-            "description": "The sub type of tool."
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "membersOverrides": {
+            "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/AssistantOverrides"
               }
             ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          }
+        },
+        "required": [
+          "members"
+        ]
+      },
+      "TesterPlan": {
+        "type": "object",
+        "properties": {
+          "assistant": {
+            "description": "Pass a transient assistant to use for the test assistant.\n\nMake sure to write a detailed system prompt for a test assistant, and use the {{test.script}} variable to access the test script.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/CreateAssistantDTO"
               }
             ]
           },
-          "name": {
+          "assistantId": {
             "type": "string",
-            "description": "The name of the tool, fixed to 'str_replace_editor'",
-            "default": "str_replace_editor",
-            "enum": [
-              "str_replace_editor"
+            "description": "Pass an assistant id that can be access\n\nMake sure to write a detailed system prompt for the test assistant, and use the {{test.script}} variable to access the test script."
+          },
+          "assistantOverrides": {
+            "description": "Add any assistant overrides to the test assistant.\n\nOne use case is if you want to pass custom variables into the test using variableValues, that you can then access in the script\nand rubric using {{varName}}.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AssistantOverrides"
+              }
             ]
           }
         }
       },
-      "UpdateQueryToolDTO": {
+      "TestSuitePhoneNumber": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
+          "provider": {
+            "type": "string",
+            "description": "This is the provider of the phone number.",
+            "enum": [
+              "test-suite"
+            ]
           },
-          "knowledgeBases": {
-            "description": "The knowledge bases to query",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/KnowledgeBase"
-            }
+          "number": {
+            "type": "string",
+            "description": "This is the phone number that is being tested.",
+            "maxLength": 50
+          }
+        },
+        "required": [
+          "provider",
+          "number"
+        ]
+      },
+      "TargetPlan": {
+        "type": "object",
+        "properties": {
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the phone number that is being tested.\nDuring the actual test, it'll be called and the assistant attached to it will pick up and be tested.\nTo test an assistant directly, send assistantId instead."
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "phoneNumber": {
+            "description": "This can be any phone number (even not on Vapi).\nDuring the actual test, it'll be called.\nTo test a Vapi number, send phoneNumberId. To test an assistant directly, send assistantId instead.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/TestSuitePhoneNumber"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "assistantId": {
+            "type": "string",
+            "description": "This is the assistant being tested.\nDuring the actual test, it'll invoked directly.\nTo test the assistant over phone number, send phoneNumberId instead."
+          },
+          "assistantOverrides": {
+            "description": "This is the assistant overrides applied to assistantId before it is tested.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/AssistantOverrides"
               }
             ]
           }
         }
       },
-      "UpdateGoogleCalendarCreateEventToolDTO": {
+      "TestSuite": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the test suite."
           },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this test suite belongs to."
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the test suite was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the test suite was last updated."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the test suite.",
+            "maxLength": 80
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the phone number ID associated with this test suite.",
+            "deprecated": true
+          },
+          "testerPlan": {
+            "description": "Override the default tester plan by providing custom assistant configuration for the test agent.\n\nWe recommend only using this if you are confident, as we have already set sensible defaults on the tester plan.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/TesterPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "targetPlan": {
+            "description": "These are the configuration for the assistant / phone number that is being tested.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/TargetPlan"
               }
             ]
           }
-        }
+        },
+        "required": [
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
       },
-      "UpdateGoogleSheetsRowAppendToolDTO": {
+      "TestSuitesPaginatedResponse": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
+          "results": {
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
+              "$ref": "#/components/schemas/TestSuite"
             }
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "metadata": {
+            "$ref": "#/components/schemas/PaginationMeta"
+          }
+        },
+        "required": [
+          "results",
+          "metadata"
+        ]
+      },
+      "CreateTestSuiteDto": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of the test suite.",
+            "maxLength": 80
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the phone number ID associated with this test suite.",
+            "deprecated": true
+          },
+          "testerPlan": {
+            "description": "Override the default tester plan by providing custom assistant configuration for the test agent.\n\nWe recommend only using this if you are confident, as we have already set sensible defaults on the tester plan.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/TesterPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "targetPlan": {
+            "description": "These are the configuration for the assistant / phone number that is being tested.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/TargetPlan"
               }
             ]
           }
         }
       },
-      "UpdateGoogleCalendarCheckAvailabilityToolDTO": {
+      "UpdateTestSuiteDto": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
+          "name": {
+            "type": "string",
+            "description": "This is the name of the test suite.",
+            "maxLength": 80
           },
-          "messages": {
-            "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
-                }
-              ]
-            }
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the phone number ID associated with this test suite.",
+            "deprecated": true
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "testerPlan": {
+            "description": "Override the default tester plan by providing custom assistant configuration for the test agent.\n\nWe recommend only using this if you are confident, as we have already set sensible defaults on the tester plan.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/TesterPlan"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "targetPlan": {
+            "description": "These are the configuration for the assistant / phone number that is being tested.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/TargetPlan"
               }
             ]
           }
         }
       },
-      "UpdateSlackSendMessageToolDTO": {
+      "TestSuiteTestVoice": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
+          "scorers": {
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "description": "These are the scorers used to evaluate the test.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
+                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
+                  "title": "AI"
                 }
               ]
             }
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
+          "type": {
+            "type": "string",
+            "description": "This is the type of the test, which must be voice.",
+            "enum": [
+              "voice"
+            ],
+            "maxLength": 100
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the test."
+          },
+          "testSuiteId": {
+            "type": "string",
+            "description": "This is the unique identifier for the test suite this test belongs to."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization this test belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the test was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the test was last updated."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the test.",
+            "maxLength": 80
+          },
+          "script": {
+            "type": "string",
+            "description": "This is the script to be used for the voice test.",
+            "maxLength": 10000
+          },
+          "numAttempts": {
+            "type": "number",
+            "description": "This is the number of attempts allowed for the test.",
+            "minimum": 1,
+            "maximum": 10
           }
-        }
+        },
+        "required": [
+          "scorers",
+          "type",
+          "id",
+          "testSuiteId",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "script"
+        ]
       },
-      "UpdateSmsSendToolDTO": {
+      "TestSuiteTestChat": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
+          "scorers": {
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "description": "These are the scorers used to evaluate the test.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
+                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
+                  "title": "AI"
                 }
               ]
             }
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
+          "type": {
+            "type": "string",
+            "description": "This is the type of the test, which must be chat.",
+            "enum": [
+              "chat"
+            ],
+            "maxLength": 100
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the test."
+          },
+          "testSuiteId": {
+            "type": "string",
+            "description": "This is the unique identifier for the test suite this test belongs to."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the organization this test belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the test was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the test was last updated."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the test.",
+            "maxLength": 80
+          },
+          "script": {
+            "type": "string",
+            "description": "This is the script to be used for the chat test.",
+            "maxLength": 10000
+          },
+          "numAttempts": {
+            "type": "number",
+            "description": "This is the number of attempts allowed for the test.",
+            "minimum": 1,
+            "maximum": 10
           }
-        }
+        },
+        "required": [
+          "scorers",
+          "type",
+          "id",
+          "testSuiteId",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "script"
+        ]
       },
-      "UpdateMcpToolDTO": {
+      "CreateTestSuiteTestVoiceDto": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
-          "messages": {
+          "scorers": {
             "type": "array",
-            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "description": "These are the scorers used to evaluate the test.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/ToolMessageStart",
-                  "title": "ToolMessageStart"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageDelayed",
-                  "title": "ToolMessageDelayed"
+                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
+                  "title": "AI"
                 }
               ]
             }
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
+          "type": {
+            "type": "string",
+            "description": "This is the type of the test, which must be voice.",
+            "enum": [
+              "voice"
+            ],
+            "maxLength": 100
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "script": {
+            "type": "string",
+            "description": "This is the script to be used for the voice test.",
+            "maxLength": 10000
+          },
+          "numAttempts": {
+            "type": "number",
+            "description": "This is the number of attempts allowed for the test.",
+            "minimum": 1,
+            "maximum": 10
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the test.",
+            "maxLength": 80
           }
-        }
+        },
+        "required": [
+          "scorers",
+          "type",
+          "script"
+        ]
       },
-      "CreateFileDTO": {
+      "CreateTestSuiteTestChatDto": {
         "type": "object",
         "properties": {
-          "file": {
+          "scorers": {
+            "type": "array",
+            "description": "These are the scorers used to evaluate the test.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
+                  "title": "AI"
+                }
+              ]
+            }
+          },
+          "type": {
             "type": "string",
-            "description": "This is the File you want to upload for use with the Knowledge Base.",
-            "format": "binary"
+            "description": "This is the type of the test, which must be chat.",
+            "enum": [
+              "chat"
+            ],
+            "maxLength": 100
+          },
+          "script": {
+            "type": "string",
+            "description": "This is the script to be used for the chat test.",
+            "maxLength": 10000
+          },
+          "numAttempts": {
+            "type": "number",
+            "description": "This is the number of attempts allowed for the test.",
+            "minimum": 1,
+            "maximum": 10
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the test.",
+            "maxLength": 80
           }
         },
         "required": [
-          "file"
+          "scorers",
+          "type",
+          "script"
         ]
       },
-      "File": {
+      "UpdateTestSuiteTestVoiceDto": {
         "type": "object",
         "properties": {
-          "object": {
-            "type": "string",
-            "enum": [
-              "file"
-            ]
+          "scorers": {
+            "type": "array",
+            "description": "These are the scorers used to evaluate the test.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
+                  "title": "AI"
+                }
+              ]
+            }
           },
-          "status": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of the test, which must be voice.",
             "enum": [
-              "processing",
-              "done",
-              "failed"
+              "voice"
             ],
-            "type": "string"
+            "maxLength": 100
           },
           "name": {
             "type": "string",
-            "description": "This is the name of the file. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "originalName": {
-            "type": "string"
-          },
-          "bytes": {
-            "type": "number"
-          },
-          "purpose": {
-            "type": "string"
+            "description": "This is the name of the test.",
+            "maxLength": 80
           },
-          "mimetype": {
-            "type": "string"
+          "script": {
+            "type": "string",
+            "description": "This is the script to be used for the voice test.",
+            "maxLength": 10000
           },
-          "key": {
-            "type": "string"
+          "numAttempts": {
+            "type": "number",
+            "description": "This is the number of attempts allowed for the test.",
+            "minimum": 1,
+            "maximum": 10
+          }
+        }
+      },
+      "UpdateTestSuiteTestChatDto": {
+        "type": "object",
+        "properties": {
+          "scorers": {
+            "type": "array",
+            "description": "These are the scorers used to evaluate the test.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
+                  "title": "AI"
+                }
+              ]
+            }
           },
-          "path": {
-            "type": "string"
+          "type": {
+            "type": "string",
+            "description": "This is the type of the test, which must be chat.",
+            "enum": [
+              "chat"
+            ],
+            "maxLength": 100
           },
-          "bucket": {
-            "type": "string"
+          "name": {
+            "type": "string",
+            "description": "This is the name of the test.",
+            "maxLength": 80
           },
-          "url": {
-            "type": "string"
+          "script": {
+            "type": "string",
+            "description": "This is the script to be used for the chat test.",
+            "maxLength": 10000
           },
-          "parsedTextUrl": {
-            "type": "string"
+          "numAttempts": {
+            "type": "number",
+            "description": "This is the number of attempts allowed for the test.",
+            "minimum": 1,
+            "maximum": 10
+          }
+        }
+      },
+      "TestSuiteTestScorerAI": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of the scorer, which must be AI.",
+            "enum": [
+              "ai"
+            ],
+            "maxLength": 100
           },
-          "parsedTextBytes": {
-            "type": "number"
+          "rubric": {
+            "type": "string",
+            "description": "This is the rubric used by the AI scorer.",
+            "maxLength": 10000
+          }
+        },
+        "required": [
+          "type",
+          "rubric"
+        ]
+      },
+      "TestSuiteTestsPaginatedResponse": {
+        "type": "object",
+        "properties": {
+          "results": {
+            "type": "array",
+            "description": "A list of test suite tests.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TestSuiteTestVoice"
+                },
+                {
+                  "$ref": "#/components/schemas/TestSuiteTestChat"
+                }
+              ]
+            }
           },
           "metadata": {
-            "type": "object"
-          },
-          "id": {
+            "description": "Metadata about the pagination.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/PaginationMeta"
+              }
+            ]
+          }
+        },
+        "required": [
+          "results",
+          "metadata"
+        ]
+      },
+      "TestSuiteRunScorerAI": {
+        "type": "object",
+        "properties": {
+          "type": {
             "type": "string",
-            "description": "This is the unique identifier for the file."
+            "description": "This is the type of the scorer, which must be AI.",
+            "enum": [
+              "ai"
+            ],
+            "maxLength": 100
           },
-          "orgId": {
+          "result": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this file belongs to."
+            "description": "This is the result of the test suite.",
+            "enum": [
+              "pass",
+              "fail"
+            ],
+            "maxLength": 100
           },
-          "createdAt": {
-            "format": "date-time",
+          "reasoning": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the file was created."
+            "description": "This is the reasoning provided by the AI scorer.",
+            "maxLength": 10000
           },
-          "updatedAt": {
-            "format": "date-time",
+          "rubric": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the file was last updated."
+            "description": "This is the rubric used by the AI scorer.",
+            "maxLength": 10000
           }
         },
         "required": [
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "type",
+          "result",
+          "reasoning",
+          "rubric"
         ]
       },
-      "UpdateFileDTO": {
+      "TestSuiteRunTestAttemptCall": {
         "type": "object",
         "properties": {
-          "name": {
-            "type": "string",
-            "description": "This is the name of the file. This is just for your own reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "artifact": {
+            "description": "This is the artifact of the call.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Artifact"
+              }
+            ]
           }
-        }
+        },
+        "required": [
+          "artifact"
+        ]
       },
-      "TrieveKnowledgeBaseSearchPlan": {
+      "TestSuiteRunTestAttemptMetadata": {
         "type": "object",
         "properties": {
-          "topK": {
-            "type": "number",
-            "description": "Specifies the number of top chunks to return. This corresponds to the `page_size` parameter in Trieve."
-          },
-          "removeStopWords": {
-            "type": "boolean",
-            "description": "If true, stop words (specified in server/src/stop-words.txt in the git repo) will be removed. This will preserve queries that are entirely stop words."
-          },
-          "scoreThreshold": {
-            "type": "number",
-            "description": "This is the score threshold to filter out chunks with a score below the threshold for cosine distance metric. For Manhattan Distance, Euclidean Distance, and Dot Product, it will filter out scores above the threshold distance. This threshold applies before weight and bias modifications. If not specified, this defaults to no threshold. A threshold of 0 will default to no threshold."
-          },
-          "searchType": {
+          "sessionId": {
             "type": "string",
-            "description": "This is the search method used when searching for relevant chunks from the vector store.",
-            "enum": [
-              "fulltext",
-              "semantic",
-              "hybrid",
-              "bm25"
-            ]
+            "description": "This is the session ID for the test attempt."
           }
         },
         "required": [
-          "searchType"
+          "sessionId"
         ]
       },
-      "TrieveKnowledgeBase": {
+      "TestSuiteRunTestAttempt": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This knowledge base is provided by Trieve.\n\nTo learn more about Trieve, visit https://trieve.ai.",
-            "enum": [
-              "trieve"
+          "scorerResults": {
+            "type": "array",
+            "description": "These are the results of the scorers used to evaluate the test attempt.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/TestSuiteRunScorerAI",
+                  "title": "AI"
+                }
+              ]
+            }
+          },
+          "call": {
+            "description": "This is the call made during the test attempt.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/TestSuiteRunTestAttemptCall"
+              }
             ]
           },
-          "name": {
+          "callId": {
             "type": "string",
-            "description": "This is the name of the knowledge base."
+            "description": "This is the call ID for the test attempt."
           },
-          "searchPlan": {
-            "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.",
+          "metadata": {
+            "description": "This is the metadata for the test attempt.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan"
+                "$ref": "#/components/schemas/TestSuiteRunTestAttemptMetadata"
               }
             ]
-          },
-          "createPlan": {
-            "description": "This is the plan if you want us to create/import a new vector store using Trieve.",
+          }
+        },
+        "required": [
+          "scorerResults"
+        ]
+      },
+      "TestSuiteRunTestResult": {
+        "type": "object",
+        "properties": {
+          "test": {
+            "description": "This is the test that was run.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/TrieveKnowledgeBaseImport",
-                "title": "Import"
+                "$ref": "#/components/schemas/TestSuiteTestVoice",
+                "title": "TestSuiteTestVoice"
               }
             ]
           },
-          "id": {
-            "type": "string",
-            "description": "This is the id of the knowledge base."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the org id of the knowledge base."
+          "attempts": {
+            "description": "These are the attempts made for this test.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/TestSuiteRunTestAttempt"
+            }
           }
         },
         "required": [
-          "provider",
-          "id",
-          "orgId"
+          "test",
+          "attempts"
         ]
       },
-      "CustomKnowledgeBase": {
+      "TestSuiteRun": {
         "type": "object",
         "properties": {
-          "provider": {
+          "status": {
             "type": "string",
-            "description": "This knowledge base is bring your own knowledge base implementation.",
+            "description": "This is the current status of the test suite run.",
             "enum": [
-              "custom-knowledge-base"
-            ]
-          },
-          "server": {
-            "description": "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"messsage\": {\n    \"type\": \"knowledge-base-request\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"content\": \"Why is ocean blue?\"\n      }\n    ],\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected:\n```\n{\n  \"message\": {\n     \"role\": \"assistant\",\n     \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n  }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK\n  \"documents\": [\n    {\n      \"content\": \"The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.\",\n      \"similarity\": 1\n    },\n    {\n      \"content\": \"Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n      \"similarity\": .5\n    }\n  ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
+              "queued",
+              "in-progress",
+              "completed",
+              "failed"
             ]
           },
           "id": {
             "type": "string",
-            "description": "This is the id of the knowledge base."
+            "description": "This is the unique identifier for the test suite run."
           },
           "orgId": {
             "type": "string",
-            "description": "This is the org id of the knowledge base."
+            "description": "This is the unique identifier for the organization this run belongs to."
+          },
+          "testSuiteId": {
+            "type": "string",
+            "description": "This is the unique identifier for the test suite this run belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the test suite run was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the test suite run was last updated."
+          },
+          "testResults": {
+            "description": "These are the results of the tests in this test suite run.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/TestSuiteRunTestResult"
+            }
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the test suite run.",
+            "maxLength": 80
           }
         },
         "required": [
-          "provider",
-          "server",
+          "status",
           "id",
-          "orgId"
+          "orgId",
+          "testSuiteId",
+          "createdAt",
+          "updatedAt",
+          "testResults"
         ]
       },
-      "CreateTrieveKnowledgeBaseDTO": {
+      "TestSuiteRunsPaginatedResponse": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This knowledge base is provided by Trieve.\n\nTo learn more about Trieve, visit https://trieve.ai.",
-            "enum": [
-              "trieve"
-            ]
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the knowledge base."
-          },
-          "searchPlan": {
-            "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan"
-              }
-            ]
+          "results": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/TestSuiteRun"
+            }
           },
-          "createPlan": {
-            "description": "This is the plan if you want us to create/import a new vector store using Trieve.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TrieveKnowledgeBaseImport",
-                "title": "Import"
-              }
-            ]
+          "metadata": {
+            "$ref": "#/components/schemas/PaginationMeta"
           }
         },
         "required": [
-          "provider"
+          "results",
+          "metadata"
         ]
       },
-      "UpdateTrieveKnowledgeBaseDTO": {
+      "CreateTestSuiteRunDto": {
         "type": "object",
         "properties": {
           "name": {
             "type": "string",
-            "description": "This is the name of the knowledge base."
-          },
-          "searchPlan": {
-            "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan"
-              }
-            ]
-          },
-          "createPlan": {
-            "description": "This is the plan if you want us to create/import a new vector store using Trieve.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/TrieveKnowledgeBaseImport",
-                "title": "Import"
-              }
-            ]
+            "description": "This is the name of the test suite run.",
+            "maxLength": 80
           }
         }
       },
-      "UpdateCustomKnowledgeBaseDTO": {
+      "UpdateTestSuiteRunDto": {
         "type": "object",
         "properties": {
-          "server": {
-            "description": "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n  \"messsage\": {\n    \"type\": \"knowledge-base-request\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"content\": \"Why is ocean blue?\"\n      }\n    ],\n    ...other metadata about the call...\n  }\n}\n\nResponse Expected:\n```\n{\n  \"message\": {\n     \"role\": \"assistant\",\n     \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n  }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK\n  \"documents\": [\n    {\n      \"content\": \"The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.\",\n      \"similarity\": 1\n    },\n    {\n      \"content\": \"Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n      \"similarity\": .5\n    }\n  ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "name": {
+            "type": "string",
+            "description": "This is the name of the test suite run.",
+            "maxLength": 80
           }
         }
       },
-      "TrieveKnowledgeBaseChunkPlan": {
+      "TimeRange": {
         "type": "object",
         "properties": {
-          "fileIds": {
-            "description": "These are the file ids that will be used to create the vector store. To upload files, use the `POST /files` endpoint.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "websites": {
-            "description": "These are the websites that will be used to create the vector store.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "step": {
+            "type": "string",
+            "description": "This is the time step for aggregations.\n\nIf not provided, defaults to returning for the entire time range.",
+            "enum": [
+              "second",
+              "minute",
+              "hour",
+              "day",
+              "week",
+              "month",
+              "quarter",
+              "year",
+              "decade",
+              "century",
+              "millennium"
+            ]
           },
-          "targetSplitsPerChunk": {
-            "type": "number",
-            "description": "This is an optional field which allows you to specify the number of splits you want per chunk. If not specified, the default 20 is used. However, you may want to use a different number."
+          "start": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the start date for the time range.\n\nIf not provided, defaults to the 7 days ago."
           },
-          "splitDelimiters": {
-            "description": "This is an optional field which allows you to specify the delimiters to use when splitting the file before chunking the text. If not specified, the default [.!?\\n] are used to split into sentences. However, you may want to use spaces or other delimiters.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "end": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the end date for the time range.\n\nIf not provided, defaults to now."
           },
-          "rebalanceChunks": {
-            "type": "boolean",
-            "description": "This is an optional field which allows you to specify whether or not to rebalance the chunks created from the file. If not specified, the default true is used. If true, Trieve will evenly distribute remainder splits across chunks such that 66 splits with a target_splits_per_chunk of 20 will result in 3 chunks with 22 splits each."
+          "timezone": {
+            "type": "string",
+            "description": "This is the timezone you want to set for the query.\n\nIf not provided, defaults to UTC."
           }
         }
       },
-      "TrieveKnowledgeBaseCreate": {
+      "AnalyticsOperation": {
         "type": "object",
         "properties": {
-          "type": {
+          "operation": {
             "type": "string",
-            "description": "This is to create a new dataset on Trieve.",
+            "description": "This is the aggregation operation you want to perform.",
             "enum": [
-              "create"
+              "sum",
+              "avg",
+              "count",
+              "min",
+              "max",
+              "history"
             ]
           },
-          "chunkPlans": {
-            "description": "These are the chunk plans used to create the dataset.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/TrieveKnowledgeBaseChunkPlan"
-            }
-          }
-        },
-        "required": [
-          "type",
-          "chunkPlans"
-        ]
-      },
-      "TrieveKnowledgeBaseImport": {
-        "type": "object",
-        "properties": {
-          "type": {
+          "column": {
             "type": "string",
-            "description": "This is to import an existing dataset from Trieve.",
+            "description": "This is the columns you want to perform the aggregation operation on.",
             "enum": [
-              "import"
+              "id",
+              "cost",
+              "costBreakdown.llm",
+              "costBreakdown.stt",
+              "costBreakdown.tts",
+              "costBreakdown.vapi",
+              "costBreakdown.ttsCharacters",
+              "costBreakdown.llmPromptTokens",
+              "costBreakdown.llmCompletionTokens",
+              "duration",
+              "concurrency",
+              "minutesUsed"
             ]
           },
-          "providerId": {
+          "alias": {
             "type": "string",
-            "description": "This is the `datasetId` of the dataset on your Trieve account."
+            "description": "This is the alias for column name returned. Defaults to `${operation}${column}`.",
+            "maxLength": 40
           }
         },
         "required": [
-          "type",
-          "providerId"
+          "operation",
+          "column"
         ]
       },
-      "UpdateWorkflowDTO": {
+      "AnalyticsQuery": {
         "type": "object",
         "properties": {
-          "nodes": {
+          "table": {
+            "type": "string",
+            "description": "This is the table you want to query.",
+            "enum": [
+              "call",
+              "subscription"
+            ]
+          },
+          "groupBy": {
             "type": "array",
+            "description": "This is the list of columns you want to group by.",
+            "enum": [
+              "type",
+              "assistantId",
+              "endedReason",
+              "analysis.successEvaluation",
+              "status"
+            ],
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/Say",
-                  "title": "Say"
-                },
-                {
-                  "$ref": "#/components/schemas/Gather",
-                  "title": "Gather"
-                },
-                {
-                  "$ref": "#/components/schemas/ApiRequest",
-                  "title": "ApiRequest"
-                },
-                {
-                  "$ref": "#/components/schemas/Hangup",
-                  "title": "Hangup"
-                },
-                {
-                  "$ref": "#/components/schemas/Transfer",
-                  "title": "Transfer"
-                }
+              "type": "string",
+              "enum": [
+                "type",
+                "assistantId",
+                "endedReason",
+                "analysis.successEvaluation",
+                "status"
               ]
             }
           },
-          "model": {
-            "description": "These are the options for the workflow's LLM.",
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/AnthropicModel",
-                "title": "Anthropic"
-              },
-              {
-                "$ref": "#/components/schemas/AnyscaleModel",
-                "title": "Anyscale"
-              },
-              {
-                "$ref": "#/components/schemas/CerebrasModel",
-                "title": "Cerebras"
-              },
-              {
-                "$ref": "#/components/schemas/CustomLLMModel",
-                "title": "CustomLLM"
-              },
-              {
-                "$ref": "#/components/schemas/DeepInfraModel",
-                "title": "DeepInfra"
-              },
-              {
-                "$ref": "#/components/schemas/DeepSeekModel",
-                "title": "DeepSeek"
-              },
-              {
-                "$ref": "#/components/schemas/GoogleModel",
-                "title": "Google"
-              },
-              {
-                "$ref": "#/components/schemas/GroqModel",
-                "title": "Groq"
-              },
-              {
-                "$ref": "#/components/schemas/InflectionAIModel",
-                "title": "InflectionAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenAIModel",
-                "title": "OpenAI"
-              },
-              {
-                "$ref": "#/components/schemas/OpenRouterModel",
-                "title": "OpenRouter"
-              },
-              {
-                "$ref": "#/components/schemas/PerplexityAIModel",
-                "title": "PerplexityAI"
-              },
-              {
-                "$ref": "#/components/schemas/TogetherAIModel",
-                "title": "Together"
-              },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the query. This will be used to identify the query in the response.",
+            "maxLength": 40
+          },
+          "timeRange": {
+            "description": "This is the time range for the query.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/XaiModel",
-                "title": "XAI"
+                "$ref": "#/components/schemas/TimeRange"
               }
             ]
           },
-          "name": {
-            "type": "string",
-            "maxLength": 80
-          },
-          "edges": {
+          "operations": {
+            "description": "This is the list of operations you want to perform.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/AnalyticsOperation"
+            }
+          }
+        },
+        "required": [
+          "table",
+          "name",
+          "operations"
+        ]
+      },
+      "AnalyticsQueryDTO": {
+        "type": "object",
+        "properties": {
+          "queries": {
+            "description": "This is the list of metric queries you want to perform.",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/Edge"
+              "$ref": "#/components/schemas/AnalyticsQuery"
             }
           }
-        }
+        },
+        "required": [
+          "queries"
+        ]
       },
-      "Squad": {
+      "AnalyticsQueryResult": {
         "type": "object",
         "properties": {
           "name": {
             "type": "string",
-            "description": "This is the name of the squad."
-          },
-          "members": {
-            "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/SquadMemberDTO"
-            }
+            "description": "This is the unique key for the query."
           },
-          "membersOverrides": {
-            "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.",
+          "timeRange": {
+            "description": "This is the time range for the query.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/AssistantOverrides"
+                "$ref": "#/components/schemas/TimeRange"
               }
             ]
           },
-          "id": {
+          "result": {
+            "description": "This is the result of the query, a list of unique groups with result of their aggregations.\n\nExample:\n\"result\": [\n  { \"date\": \"2023-01-01\", \"assistantId\": \"123\", \"endedReason\": \"customer-ended-call\", \"sumDuration\": 120, \"avgCost\": 10.5 },\n  { \"date\": \"2023-01-02\", \"assistantId\": \"123\", \"endedReason\": \"customer-did-not-give-microphone-permission\", \"sumDuration\": 0, \"avgCost\": 0 },\n  // Additional results\n]",
+            "type": "array",
+            "items": {
+              "type": "object"
+            }
+          }
+        },
+        "required": [
+          "name",
+          "timeRange",
+          "result"
+        ]
+      },
+      "CallLogPrivileged": {
+        "type": "object",
+        "properties": {
+          "callId": {
             "type": "string",
-            "description": "This is the unique identifier for the squad."
+            "description": "This is the unique identifier for the call."
           },
           "orgId": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this squad belongs to."
+            "description": "This is the unique identifier for the org that this call log belongs to."
           },
-          "createdAt": {
-            "format": "date-time",
+          "log": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the squad was created."
+            "description": "This is the log message associated with the call."
           },
-          "updatedAt": {
+          "level": {
+            "type": "string",
+            "description": "This is the level of the log message.",
+            "enum": [
+              "INFO",
+              "LOG",
+              "WARN",
+              "ERROR",
+              "CHECKPOINT"
+            ]
+          },
+          "time": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the squad was last updated."
+            "description": "This is the ISO 8601 date-time string of when the log was created."
           }
         },
         "required": [
-          "members",
-          "id",
+          "callId",
           "orgId",
-          "createdAt",
-          "updatedAt"
+          "log",
+          "level",
+          "time"
         ]
       },
-      "UpdateSquadDTO": {
+      "CallLogsPaginatedResponse": {
         "type": "object",
         "properties": {
-          "name": {
-            "type": "string",
-            "description": "This is the name of the squad."
-          },
-          "members": {
-            "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.",
+          "results": {
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/SquadMemberDTO"
+              "$ref": "#/components/schemas/CallLogPrivileged"
             }
           },
-          "membersOverrides": {
-            "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AssistantOverrides"
-              }
-            ]
+          "metadata": {
+            "$ref": "#/components/schemas/PaginationMeta"
           }
         },
         "required": [
-          "members"
+          "results",
+          "metadata"
         ]
       },
-      "TesterPlan": {
-        "type": "object",
-        "properties": {
-          "assistant": {
-            "description": "Pass a transient assistant to use for the test assistant.\n\nMake sure to write a detailed system prompt for a test assistant, and use the {{test.script}} variable to access the test script.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CreateAssistantDTO"
-              }
-            ]
-          },
-          "assistantId": {
-            "type": "string",
-            "description": "Pass an assistant id that can be access\n\nMake sure to write a detailed system prompt for the test assistant, and use the {{test.script}} variable to access the test script."
-          },
-          "assistantOverrides": {
-            "description": "Add any assistant overrides to the test assistant.\n\nOne use case is if you want to pass custom variables into the test using variableValues, that you can then access in the script\nand rubric using {{varName}}.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AssistantOverrides"
-              }
-            ]
-          }
-        }
-      },
-      "TestSuitePhoneNumber": {
+      "Error": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the provider of the phone number.",
-            "enum": [
-              "test-suite"
-            ]
-          },
-          "number": {
-            "type": "string",
-            "description": "This is the phone number that is being tested.",
-            "maxLength": 50
+          "message": {
+            "type": "string"
           }
         },
         "required": [
-          "provider",
-          "number"
+          "message"
         ]
       },
-      "TargetPlan": {
+      "Log": {
         "type": "object",
         "properties": {
-          "phoneNumberId": {
+          "time": {
             "type": "string",
-            "description": "This is the phone number that is being tested.\nDuring the actual test, it'll be called and the assistant attached to it will pick up and be tested.\nTo test an assistant directly, send assistantId instead."
+            "description": "This is the timestamp at which the log was written."
           },
-          "phoneNumber": {
-            "description": "This can be any phone number (even not on Vapi).\nDuring the actual test, it'll be called.\nTo test a Vapi number, send phoneNumberId. To test an assistant directly, send assistantId instead.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/TestSuitePhoneNumber"
-              }
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this log belongs to."
+          },
+          "type": {
+            "type": "string",
+            "description": "This is the type of the log.",
+            "enum": [
+              "API",
+              "Webhook",
+              "Call",
+              "Provider"
             ]
           },
-          "assistantId": {
+          "webhookType": {
             "type": "string",
-            "description": "This is the assistant being tested.\nDuring the actual test, it'll invoked directly.\nTo test the assistant over phone number, send phoneNumberId instead."
+            "description": "This is the type of the webhook, given the log is from a webhook."
           },
-          "assistantOverrides": {
-            "description": "This is the assistant overrides applied to assistantId before it is tested.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AssistantOverrides"
-              }
+          "resource": {
+            "type": "string",
+            "description": "This is the specific resource, relevant only to API logs.",
+            "enum": [
+              "org",
+              "assistant",
+              "analytics",
+              "credential",
+              "phone-number",
+              "block",
+              "voice-library",
+              "provider",
+              "tool",
+              "token",
+              "template",
+              "squad",
+              "call",
+              "file",
+              "metric",
+              "log"
             ]
-          }
-        }
-      },
-      "TestSuite": {
-        "type": "object",
-        "properties": {
-          "id": {
+          },
+          "requestDurationSeconds": {
+            "type": "number",
+            "description": "'This is how long the request took.",
+            "minimum": 0
+          },
+          "requestStartedAt": {
             "type": "string",
-            "description": "This is the unique identifier for the test suite."
+            "description": "This is the timestamp at which the request began."
           },
-          "orgId": {
+          "requestFinishedAt": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this test suite belongs to."
+            "description": "This is the timestamp at which the request finished."
           },
-          "createdAt": {
-            "format": "date-time",
+          "requestBody": {
+            "type": "object",
+            "description": "This is the body of the request."
+          },
+          "requestHttpMethod": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the test suite was created."
+            "description": "This is the request method.",
+            "enum": [
+              "POST",
+              "GET",
+              "PUT",
+              "PATCH",
+              "DELETE"
+            ]
           },
-          "updatedAt": {
-            "format": "date-time",
+          "requestUrl": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the test suite was last updated."
+            "description": "This is the request URL."
           },
-          "name": {
+          "requestPath": {
             "type": "string",
-            "description": "This is the name of the test suite.",
-            "maxLength": 80
+            "description": "This is the request path."
           },
-          "phoneNumberId": {
+          "requestQuery": {
             "type": "string",
-            "description": "This is the phone number ID associated with this test suite.",
-            "deprecated": true
+            "description": "This is the request query."
           },
-          "testerPlan": {
-            "description": "Override the default tester plan by providing custom assistant configuration for the test agent.\n\nWe recommend only using this if you are confident, as we have already set sensible defaults on the tester plan.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/TesterPlan"
-              }
-            ]
+          "responseHttpCode": {
+            "type": "number",
+            "description": "This the HTTP status code of the response."
           },
-          "targetPlan": {
-            "description": "These are the configuration for the assistant / phone number that is being tested.",
+          "requestIpAddress": {
+            "type": "string",
+            "description": "This is the request IP address."
+          },
+          "requestOrigin": {
+            "type": "string",
+            "description": "This is the origin of the request"
+          },
+          "responseBody": {
+            "type": "object",
+            "description": "This is the body of the response."
+          },
+          "requestHeaders": {
+            "type": "object",
+            "description": "These are the headers of the request."
+          },
+          "error": {
+            "description": "This is the error, if one occurred.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TargetPlan"
+                "$ref": "#/components/schemas/Error"
               }
             ]
+          },
+          "assistantId": {
+            "type": "string",
+            "description": "This is the ID of the assistant."
+          },
+          "phoneNumberId": {
+            "type": "string",
+            "description": "This is the ID of the phone number."
+          },
+          "customerId": {
+            "type": "string",
+            "description": "This is the ID of the customer."
+          },
+          "squadId": {
+            "type": "string",
+            "description": "This is the ID of the squad."
+          },
+          "callId": {
+            "type": "string",
+            "description": "This is the ID of the call."
           }
         },
         "required": [
-          "id",
+          "time",
           "orgId",
-          "createdAt",
-          "updatedAt"
+          "type"
         ]
       },
-      "TestSuitesPaginatedResponse": {
+      "LogsPaginatedResponse": {
         "type": "object",
         "properties": {
           "results": {
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/TestSuite"
+              "$ref": "#/components/schemas/Log"
             }
           },
           "metadata": {
@@ -26136,1855 +36955,2008 @@
           "metadata"
         ]
       },
-      "CreateTestSuiteDto": {
+      "CreateOrgDTO": {
         "type": "object",
         "properties": {
+          "hipaaEnabled": {
+            "type": "boolean",
+            "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.",
+            "example": false
+          },
+          "subscriptionId": {
+            "type": "string",
+            "description": "This is the ID of the subscription the org belongs to."
+          },
           "name": {
             "type": "string",
-            "description": "This is the name of the test suite.",
-            "maxLength": 80
+            "description": "This is the name of the org. This is just for your own reference.",
+            "maxLength": 40
           },
-          "phoneNumberId": {
+          "channel": {
             "type": "string",
-            "description": "This is the phone number ID associated with this test suite.",
-            "deprecated": true
+            "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.",
+            "enum": [
+              "default",
+              "weekly"
+            ]
           },
-          "testerPlan": {
-            "description": "Override the default tester plan by providing custom assistant configuration for the test agent.\n\nWe recommend only using this if you are confident, as we have already set sensible defaults on the tester plan.",
+          "billingLimit": {
+            "type": "number",
+            "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.",
+            "minimum": 0,
+            "maximum": 1000
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TesterPlan"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "targetPlan": {
-            "description": "These are the configuration for the assistant / phone number that is being tested.",
+          "concurrencyLimit": {
+            "type": "number",
+            "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.",
+            "deprecated": true,
+            "minimum": 1,
+            "maximum": 10
+          },
+          "compliancePlan": {
+            "description": "Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field.\nWhen this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost.\nAt the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided.\nDefaults to false.\nWhen PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers.\nThis is due to the compliance requirements of PCI. Other providers may not meet these requirements.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TargetPlan"
+                "$ref": "#/components/schemas/CompliancePlan"
               }
             ]
           }
         }
       },
-      "UpdateTestSuiteDto": {
+      "AutoReloadPlan": {
         "type": "object",
         "properties": {
-          "name": {
+          "credits": {
+            "type": "number",
+            "description": "This the amount of credits to reload."
+          },
+          "threshold": {
+            "type": "number",
+            "description": "This is the limit at which the reload is triggered."
+          }
+        },
+        "required": [
+          "credits",
+          "threshold"
+        ]
+      },
+      "InvoicePlan": {
+        "type": "object",
+        "properties": {
+          "companyName": {
             "type": "string",
-            "description": "This is the name of the test suite.",
-            "maxLength": 80
+            "description": "This is the name of the company."
           },
-          "phoneNumberId": {
+          "companyAddress": {
             "type": "string",
-            "description": "This is the phone number ID associated with this test suite.",
-            "deprecated": true
+            "description": "This is the address of the company."
+          },
+          "companyTaxId": {
+            "type": "string",
+            "description": "This is the tax ID of the company."
+          },
+          "companyEmail": {
+            "type": "string",
+            "description": "This is the preferred invoicing email of the company. If not specified, defaults to the subscription's email."
+          }
+        }
+      },
+      "Subscription": {
+        "type": "object",
+        "properties": {
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the subscription."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the timestamp when the subscription was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the timestamp when the subscription was last updated."
+          },
+          "type": {
+            "type": "string",
+            "description": "This is the type / tier of the subscription.",
+            "enum": [
+              "pay-as-you-go",
+              "enterprise",
+              "agency",
+              "startup",
+              "growth",
+              "scale"
+            ]
+          },
+          "status": {
+            "type": "string",
+            "description": "This is the status of the subscription. Past due subscriptions are subscriptions\nwith past due payments.",
+            "enum": [
+              "active",
+              "frozen"
+            ]
+          },
+          "credits": {
+            "type": "string",
+            "description": "This is the number of credits the subscription currently has.\n\nNote: This is a string to avoid floating point precision issues."
+          },
+          "concurrencyCounter": {
+            "type": "number",
+            "description": "This is the total number of active calls (concurrency) across all orgs under this subscription.",
+            "minimum": 1
+          },
+          "concurrencyLimitIncluded": {
+            "type": "number",
+            "description": "This is the default concurrency limit for the subscription.",
+            "minimum": 1
+          },
+          "phoneNumbersCounter": {
+            "type": "number",
+            "description": "This is the number of free phone numbers the subscription has",
+            "minimum": 1
+          },
+          "phoneNumbersIncluded": {
+            "type": "number",
+            "description": "This is the maximum number of free phone numbers the subscription can have",
+            "minimum": 1
+          },
+          "concurrencyLimitPurchased": {
+            "type": "number",
+            "description": "This is the purchased add-on concurrency limit for the subscription.",
+            "minimum": 1
+          },
+          "monthlyChargeScheduleId": {
+            "type": "number",
+            "description": "This is the ID of the monthly job that charges for subscription add ons and phone numbers."
+          },
+          "monthlyCreditCheckScheduleId": {
+            "type": "number",
+            "description": "This is the ID of the monthly job that checks whether the credit balance of the subscription\nis sufficient for the monthly charge."
+          },
+          "stripeCustomerId": {
+            "type": "string",
+            "description": "This is the Stripe customer ID."
+          },
+          "stripePaymentMethodId": {
+            "type": "string",
+            "description": "This is the Stripe payment ID."
+          },
+          "slackSupportEnabled": {
+            "type": "boolean",
+            "description": "If this flag is true, then the user has purchased slack support."
+          },
+          "slackChannelId": {
+            "type": "string",
+            "description": "If this subscription has a slack support subscription, the slack channel's ID will be stored here."
+          },
+          "hipaaEnabled": {
+            "type": "boolean",
+            "description": "This is the HIPAA enabled flag for the subscription. It determines whether orgs under this\nsubscription have the option to enable HIPAA compliance."
+          },
+          "hipaaCommonPaperAgreementId": {
+            "type": "string",
+            "description": "This is the ID for the Common Paper agreement outlining the HIPAA contract."
+          },
+          "stripePaymentMethodFingerprint": {
+            "type": "string",
+            "description": "This is the Stripe fingerprint of the payment method (card). It allows us\nto detect users who try to abuse our system through multiple sign-ups."
+          },
+          "stripeCustomerEmail": {
+            "type": "string",
+            "description": "This is the customer's email on Stripe."
+          },
+          "referredByEmail": {
+            "type": "string",
+            "description": "This is the email of the referrer for the subscription."
           },
-          "testerPlan": {
-            "description": "Override the default tester plan by providing custom assistant configuration for the test agent.\n\nWe recommend only using this if you are confident, as we have already set sensible defaults on the tester plan.",
+          "autoReloadPlan": {
+            "description": "This is the auto reload plan configured for the subscription.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TesterPlan"
+                "$ref": "#/components/schemas/AutoReloadPlan"
               }
             ]
           },
-          "targetPlan": {
-            "description": "These are the configuration for the assistant / phone number that is being tested.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/TargetPlan"
-              }
-            ]
-          }
-        }
-      },
-      "TestSuiteTestVoice": {
-        "type": "object",
-        "properties": {
-          "scorers": {
+          "minutesIncluded": {
+            "type": "number",
+            "description": "The number of minutes included in the subscription.",
+            "minimum": 0
+          },
+          "minutesUsed": {
+            "type": "number",
+            "description": "The number of minutes used in the subscription.",
+            "minimum": 0
+          },
+          "minutesUsedNextResetAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the timestamp at which the number of monthly free minutes is scheduled to reset at."
+          },
+          "minutesOverageCost": {
+            "type": "number",
+            "description": "The per minute charge on minutes that exceed the included minutes. Enterprise only."
+          },
+          "providersIncluded": {
+            "description": "The list of providers included in the subscription. Enterprise only.",
             "type": "array",
-            "description": "These are the scorers used to evaluate the test.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
-                  "title": "AI"
-                }
-              ]
+              "type": "string"
             }
           },
-          "type": {
-            "type": "string",
-            "description": "This is the type of the test, which must be voice.",
-            "enum": [
-              "voice"
-            ],
-            "maxLength": 100
+          "outboundCallsDailyLimit": {
+            "type": "number",
+            "description": "The maximum number of outbound calls this subscription may make in a day. Resets every night.",
+            "minimum": 1
           },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the test."
+          "outboundCallsCounter": {
+            "type": "number",
+            "description": "The current number of outbound calls the subscription has made in the current day.",
+            "minimum": 1
           },
-          "testSuiteId": {
+          "outboundCallsCounterNextResetAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the unique identifier for the test suite this test belongs to."
+            "description": "This is the timestamp at which the outbound calls counter is scheduled to reset at."
           },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the organization this test belongs to."
+          "couponIds": {
+            "description": "This is the IDs of the coupons applicable to this subscription.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
           },
-          "createdAt": {
-            "format": "date-time",
+          "couponUsageLeft": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the test was created."
+            "description": "This is the number of credits left obtained from a coupon."
           },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the test was last updated."
+          "invoicePlan": {
+            "description": "This is the invoice plan for the subscription.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/InvoicePlan"
+              }
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the test.",
-            "maxLength": 80
+          "pciEnabled": {
+            "type": "boolean",
+            "description": "This is the PCI enabled flag for the subscription. It determines whether orgs under this\nsubscription have the option to enable PCI compliance."
           },
-          "script": {
+          "pciCommonPaperAgreementId": {
             "type": "string",
-            "description": "This is the script to be used for the voice test.",
-            "maxLength": 10000
-          },
-          "numAttempts": {
-            "type": "number",
-            "description": "This is the number of attempts allowed for the test.",
-            "minimum": 1,
-            "maximum": 10
+            "description": "This is the ID for the Common Paper agreement outlining the PCI contract."
           }
         },
         "required": [
-          "scorers",
-          "type",
           "id",
-          "testSuiteId",
-          "orgId",
           "createdAt",
           "updatedAt",
-          "script"
+          "type",
+          "status",
+          "credits",
+          "concurrencyCounter",
+          "concurrencyLimitIncluded",
+          "concurrencyLimitPurchased"
         ]
       },
-      "TestSuiteTestChat": {
+      "OrgPlan": {
         "type": "object",
         "properties": {
-          "scorers": {
+          "includedProviders": {
             "type": "array",
-            "description": "These are the scorers used to evaluate the test.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
-                  "title": "AI"
-                }
-              ]
+              "type": "object"
             }
           },
-          "type": {
-            "type": "string",
-            "description": "This is the type of the test, which must be chat.",
-            "enum": [
-              "chat"
-            ],
-            "maxLength": 100
+          "includedMinutes": {
+            "type": "number"
           },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the test."
+          "costPerOverageMinute": {
+            "type": "number"
+          }
+        }
+      },
+      "Org": {
+        "type": "object",
+        "properties": {
+          "hipaaEnabled": {
+            "type": "boolean",
+            "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.",
+            "example": false
           },
-          "testSuiteId": {
+          "subscription": {
+            "$ref": "#/components/schemas/Subscription"
+          },
+          "subscriptionId": {
             "type": "string",
-            "description": "This is the unique identifier for the test suite this test belongs to."
+            "description": "This is the ID of the subscription the org belongs to."
           },
-          "orgId": {
+          "id": {
             "type": "string",
-            "description": "This is the unique identifier for the organization this test belongs to."
+            "description": "This is the unique identifier for the org."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the test was created."
+            "description": "This is the ISO 8601 date-time string of when the org was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the test was last updated."
+            "description": "This is the ISO 8601 date-time string of when the org was last updated."
           },
-          "name": {
+          "stripeSubscriptionId": {
             "type": "string",
-            "description": "This is the name of the test.",
-            "maxLength": 80
+            "description": "This is the subscription for the org."
           },
-          "script": {
+          "stripeSubscriptionItemId": {
             "type": "string",
-            "description": "This is the script to be used for the chat test.",
-            "maxLength": 10000
+            "description": "This is the subscription's subscription item."
           },
-          "numAttempts": {
-            "type": "number",
-            "description": "This is the number of attempts allowed for the test.",
-            "minimum": 1,
-            "maximum": 10
-          }
-        },
-        "required": [
-          "scorers",
-          "type",
-          "id",
-          "testSuiteId",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "script"
-        ]
-      },
-      "CreateTestSuiteTestVoiceDto": {
-        "type": "object",
-        "properties": {
-          "scorers": {
-            "type": "array",
-            "description": "These are the scorers used to evaluate the test.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
-                  "title": "AI"
-                }
-              ]
-            }
+          "stripeSubscriptionCurrentPeriodStart": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the subscription's current period start."
           },
-          "type": {
+          "stripeSubscriptionStatus": {
             "type": "string",
-            "description": "This is the type of the test, which must be voice.",
-            "enum": [
-              "voice"
-            ],
-            "maxLength": 100
+            "description": "This is the subscription's status."
           },
-          "script": {
+          "plan": {
+            "description": "This is the plan for the org.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/OrgPlan"
+              }
+            ]
+          },
+          "jwtSecret": {
             "type": "string",
-            "description": "This is the script to be used for the voice test.",
-            "maxLength": 10000
+            "description": "This is the secret key used for signing JWT tokens for the org."
           },
-          "numAttempts": {
+          "minutesUsed": {
             "type": "number",
-            "description": "This is the number of attempts allowed for the test.",
-            "minimum": 1,
-            "maximum": 10
+            "description": "This is the total number of call minutes used by this org across all time."
           },
           "name": {
             "type": "string",
-            "description": "This is the name of the test.",
-            "maxLength": 80
-          }
-        },
-        "required": [
-          "scorers",
-          "type",
-          "script"
-        ]
-      },
-      "CreateTestSuiteTestChatDto": {
-        "type": "object",
-        "properties": {
-          "scorers": {
-            "type": "array",
-            "description": "These are the scorers used to evaluate the test.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
-                  "title": "AI"
-                }
-              ]
-            }
+            "description": "This is the name of the org. This is just for your own reference.",
+            "maxLength": 40
           },
-          "type": {
+          "channel": {
             "type": "string",
-            "description": "This is the type of the test, which must be chat.",
+            "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.",
             "enum": [
-              "chat"
-            ],
-            "maxLength": 100
+              "default",
+              "weekly"
+            ]
           },
-          "script": {
-            "type": "string",
-            "description": "This is the script to be used for the chat test.",
-            "maxLength": 10000
+          "billingLimit": {
+            "type": "number",
+            "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.",
+            "minimum": 0,
+            "maximum": 1000
           },
-          "numAttempts": {
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "concurrencyLimit": {
             "type": "number",
-            "description": "This is the number of attempts allowed for the test.",
+            "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.",
+            "deprecated": true,
             "minimum": 1,
             "maximum": 10
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the test.",
-            "maxLength": 80
+          "compliancePlan": {
+            "description": "Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field.\nWhen this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost.\nAt the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided.\nDefaults to false.\nWhen PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers.\nThis is due to the compliance requirements of PCI. Other providers may not meet these requirements.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CompliancePlan"
+              }
+            ]
           }
         },
         "required": [
-          "scorers",
-          "type",
-          "script"
+          "id",
+          "createdAt",
+          "updatedAt"
         ]
       },
-      "UpdateTestSuiteTestVoiceDto": {
+      "UpdateOrgDTO": {
         "type": "object",
         "properties": {
-          "scorers": {
-            "type": "array",
-            "description": "These are the scorers used to evaluate the test.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
-                  "title": "AI"
-                }
-              ]
-            }
+          "hipaaEnabled": {
+            "type": "boolean",
+            "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.",
+            "example": false
           },
-          "type": {
+          "subscriptionId": {
             "type": "string",
-            "description": "This is the type of the test, which must be voice.",
-            "enum": [
-              "voice"
-            ],
-            "maxLength": 100
+            "description": "This is the ID of the subscription the org belongs to."
           },
           "name": {
             "type": "string",
-            "description": "This is the name of the test.",
-            "maxLength": 80
+            "description": "This is the name of the org. This is just for your own reference.",
+            "maxLength": 40
           },
-          "script": {
+          "channel": {
             "type": "string",
-            "description": "This is the script to be used for the voice test.",
-            "maxLength": 10000
+            "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.",
+            "enum": [
+              "default",
+              "weekly"
+            ]
           },
-          "numAttempts": {
+          "billingLimit": {
             "type": "number",
-            "description": "This is the number of attempts allowed for the test.",
+            "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.",
+            "minimum": 0,
+            "maximum": 1000
+          },
+          "server": {
+            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
+          "concurrencyLimit": {
+            "type": "number",
+            "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.",
+            "deprecated": true,
             "minimum": 1,
             "maximum": 10
+          },
+          "compliancePlan": {
+            "description": "Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field.\nWhen this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost.\nAt the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided.\nDefaults to false.\nWhen PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers.\nThis is due to the compliance requirements of PCI. Other providers may not meet these requirements.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CompliancePlan"
+              }
+            ]
           }
         }
       },
-      "UpdateTestSuiteTestChatDto": {
+      "User": {
         "type": "object",
         "properties": {
-          "scorers": {
-            "type": "array",
-            "description": "These are the scorers used to evaluate the test.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TestSuiteTestScorerAI",
-                  "title": "AI"
-                }
-              ]
-            }
-          },
-          "type": {
+          "id": {
             "type": "string",
-            "description": "This is the type of the test, which must be chat.",
-            "enum": [
-              "chat"
-            ],
-            "maxLength": 100
+            "description": "This is the unique identifier for the profile or user."
           },
-          "name": {
+          "createdAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the name of the test.",
-            "maxLength": 80
+            "description": "This is the ISO 8601 date-time string of when the profile was created."
           },
-          "script": {
+          "updatedAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the script to be used for the chat test.",
-            "maxLength": 10000
+            "description": "This is the ISO 8601 date-time string of when the profile was last updated."
           },
-          "numAttempts": {
-            "type": "number",
-            "description": "This is the number of attempts allowed for the test.",
-            "minimum": 1,
-            "maximum": 10
-          }
-        }
-      },
-      "TestSuiteTestScorerAI": {
-        "type": "object",
-        "properties": {
-          "type": {
+          "email": {
             "type": "string",
-            "description": "This is the type of the scorer, which must be AI.",
-            "enum": [
-              "ai"
-            ],
-            "maxLength": 100
+            "description": "This is the email of the user that is associated with the profile."
           },
-          "rubric": {
+          "fullName": {
             "type": "string",
-            "description": "This is the rubric used by the AI scorer.",
-            "maxLength": 1000
+            "description": "This is the full name of the user that is associated with the profile."
           }
         },
         "required": [
-          "type",
-          "rubric"
+          "id",
+          "createdAt",
+          "updatedAt",
+          "email"
         ]
       },
-      "TestSuiteTestsPaginatedResponse": {
+      "InviteUserDTO": {
         "type": "object",
         "properties": {
-          "results": {
+          "emails": {
+            "maxItems": 100,
             "type": "array",
-            "description": "A list of test suite tests.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TestSuiteTestVoice"
-                },
-                {
-                  "$ref": "#/components/schemas/TestSuiteTestChat"
-                }
-              ]
+              "type": "string"
             }
           },
-          "metadata": {
-            "description": "Metadata about the pagination.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/PaginationMeta"
-              }
-            ]
-          }
-        },
-        "required": [
-          "results",
-          "metadata"
-        ]
-      },
-      "TestSuiteRunScorerAI": {
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string",
-            "description": "This is the type of the scorer, which must be AI.",
-            "enum": [
-              "ai"
-            ],
-            "maxLength": 100
-          },
-          "result": {
-            "type": "string",
-            "description": "This is the result of the test suite.",
+          "role": {
             "enum": [
-              "pass",
-              "fail"
+              "admin",
+              "editor",
+              "viewer"
             ],
-            "maxLength": 100
-          },
-          "reasoning": {
-            "type": "string",
-            "description": "This is the reasoning provided by the AI scorer.",
-            "maxLength": 10000
+            "type": "string"
           },
-          "rubric": {
-            "type": "string",
-            "description": "This is the rubric used by the AI scorer.",
-            "maxLength": 1000
+          "redirectTo": {
+            "type": "string"
           }
         },
         "required": [
-          "type",
-          "result",
-          "reasoning",
-          "rubric"
+          "emails",
+          "role"
         ]
       },
-      "TestSuiteRunTestAttemptCall": {
+      "UpdateUserRoleDTO": {
         "type": "object",
         "properties": {
-          "artifact": {
-            "description": "This is the artifact of the call.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Artifact"
-              }
-            ]
+          "userId": {
+            "type": "string"
+          },
+          "role": {
+            "enum": [
+              "admin",
+              "editor",
+              "viewer"
+            ],
+            "type": "string"
           }
         },
         "required": [
-          "artifact"
+          "userId",
+          "role"
         ]
       },
-      "TestSuiteRunTestAttemptMetadata": {
+      "JwtResponse": {
         "type": "object",
         "properties": {
-          "sessionId": {
-            "type": "string",
-            "description": "This is the session ID for the test attempt."
+          "accessToken": {
+            "type": "string"
+          },
+          "aud": {
+            "type": "object"
           }
         },
         "required": [
-          "sessionId"
+          "accessToken",
+          "aud"
         ]
       },
-      "TestSuiteRunTestAttempt": {
+      "TokenRestrictions": {
         "type": "object",
         "properties": {
-          "scorerResults": {
+          "enabled": {
+            "type": "boolean",
+            "description": "This determines whether the token is enabled or disabled. Default is true, it's enabled."
+          },
+          "allowedOrigins": {
+            "description": "This determines the allowed origins for this token. Validates the `Origin` header. Default is any origin.\n\nOnly relevant for `public` tokens.",
             "type": "array",
-            "description": "These are the results of the scorers used to evaluate the test attempt.",
             "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/TestSuiteRunScorerAI",
-                  "title": "AI"
-                }
-              ]
+              "type": "string"
             }
           },
-          "call": {
-            "description": "This is the call made during the test attempt.",
+          "allowedAssistantIds": {
+            "description": "This determines which assistantIds can be used when creating a call. Default is any assistantId.\n\nOnly relevant for `public` tokens.",
+            "type": "array",
+            "items": {
+              "type": "string"
+            }
+          },
+          "allowTransientAssistant": {
+            "type": "boolean",
+            "description": "This determines whether transient assistants can be used when creating a call. Default is true.\n\nIf `allowedAssistantIds` is provided, this is automatically false.\n\nOnly relevant for `public` tokens."
+          }
+        }
+      },
+      "CreateTokenDTO": {
+        "type": "object",
+        "properties": {
+          "tag": {
+            "type": "string",
+            "description": "This is the tag for the token. It represents its scope.",
+            "enum": [
+              "private",
+              "public"
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the token. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "restrictions": {
+            "description": "This are the restrictions for the token.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TestSuiteRunTestAttemptCall"
+                "$ref": "#/components/schemas/TokenRestrictions"
               }
             ]
+          }
+        }
+      },
+      "Token": {
+        "type": "object",
+        "properties": {
+          "tag": {
+            "type": "string",
+            "description": "This is the tag for the token. It represents its scope.",
+            "enum": [
+              "private",
+              "public"
+            ]
           },
-          "callId": {
+          "id": {
             "type": "string",
-            "description": "This is the call ID for the test attempt."
+            "description": "This is the unique identifier for the token."
           },
-          "metadata": {
-            "description": "This is the metadata for the test attempt.",
+          "orgId": {
+            "type": "string",
+            "description": "This is unique identifier for the org that this token belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the token was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the token was last updated."
+          },
+          "value": {
+            "type": "string",
+            "description": "This is the token key."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the token. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "restrictions": {
+            "description": "This are the restrictions for the token.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TestSuiteRunTestAttemptMetadata"
+                "$ref": "#/components/schemas/TokenRestrictions"
               }
             ]
           }
         },
         "required": [
-          "scorerResults"
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "value"
         ]
       },
-      "TestSuiteRunTestResult": {
+      "UpdateTokenDTO": {
         "type": "object",
         "properties": {
-          "test": {
-            "description": "This is the test that was run.",
-            "oneOf": [
+          "tag": {
+            "type": "string",
+            "description": "This is the tag for the token. It represents its scope.",
+            "enum": [
+              "private",
+              "public"
+            ]
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of the token. This is just for your own reference.",
+            "maxLength": 40
+          },
+          "restrictions": {
+            "description": "This are the restrictions for the token.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/TestSuiteTestVoice",
-                "title": "TestSuiteTestVoice"
+                "$ref": "#/components/schemas/TokenRestrictions"
               }
             ]
-          },
-          "attempts": {
-            "description": "These are the attempts made for this test.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/TestSuiteRunTestAttempt"
-            }
           }
-        },
-        "required": [
-          "test",
-          "attempts"
-        ]
+        }
       },
-      "TestSuiteRun": {
+      "AnthropicCredential": {
         "type": "object",
         "properties": {
-          "status": {
+          "provider": {
             "type": "string",
-            "description": "This is the current status of the test suite run.",
             "enum": [
-              "queued",
-              "in-progress",
-              "completed",
-              "failed"
+              "anthropic"
             ]
           },
-          "id": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the unique identifier for the test suite run."
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "orgId": {
+          "id": {
             "type": "string",
-            "description": "This is the unique identifier for the organization this run belongs to."
+            "description": "This is the unique identifier for the credential."
           },
-          "testSuiteId": {
+          "orgId": {
             "type": "string",
-            "description": "This is the unique identifier for the test suite this run belongs to."
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the test suite run was created."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the test suite run was last updated."
-          },
-          "testResults": {
-            "description": "These are the results of the tests in this test suite run.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/TestSuiteRunTestResult"
-            }
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
           "name": {
             "type": "string",
-            "description": "This is the name of the test suite run.",
-            "maxLength": 80
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
         },
         "required": [
-          "status",
+          "provider",
+          "apiKey",
           "id",
           "orgId",
-          "testSuiteId",
           "createdAt",
-          "updatedAt",
-          "testResults"
+          "updatedAt"
         ]
       },
-      "TestSuiteRunsPaginatedResponse": {
+      "AnyscaleCredential": {
         "type": "object",
         "properties": {
-          "results": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/TestSuiteRun"
-            }
+          "provider": {
+            "type": "string",
+            "enum": [
+              "anyscale"
+            ]
           },
-          "metadata": {
-            "$ref": "#/components/schemas/PaginationMeta"
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
         },
         "required": [
-          "results",
-          "metadata"
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
         ]
       },
-      "CreateTestSuiteRunDto": {
+      "AssemblyAICredential": {
         "type": "object",
         "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "assembly-ai"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+          },
           "name": {
             "type": "string",
-            "description": "This is the name of the test suite run.",
-            "maxLength": 80
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
-        }
+        },
+        "required": [
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
       },
-      "UpdateTestSuiteRunDto": {
+      "AzureCredential": {
         "type": "object",
         "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "azure"
+            ]
+          },
+          "service": {
+            "type": "string",
+            "description": "This is the service being used in Azure.",
+            "enum": [
+              "speech",
+              "blob_storage"
+            ],
+            "default": "speech"
+          },
+          "region": {
+            "type": "string",
+            "description": "This is the region of the Azure resource.",
+            "enum": [
+              "australia",
+              "canadaeast",
+              "canadacentral",
+              "eastus2",
+              "eastus",
+              "france",
+              "india",
+              "japaneast",
+              "japanwest",
+              "uaenorth",
+              "northcentralus",
+              "norway",
+              "southcentralus",
+              "swedencentral",
+              "switzerland",
+              "uk",
+              "westus",
+              "westus3"
+            ]
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API.",
+            "maxLength": 10000
+          },
+          "fallbackIndex": {
+            "type": "number",
+            "minimum": 1,
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order."
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+          },
           "name": {
             "type": "string",
-            "description": "This is the name of the test suite run.",
-            "maxLength": 80
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          },
+          "bucketPlan": {
+            "description": "This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AzureBlobStorageBucketPlan"
+              }
+            ]
           }
-        }
+        },
+        "required": [
+          "provider",
+          "service",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
       },
-      "Metrics": {
+      "AzureOpenAICredential": {
         "type": "object",
         "properties": {
-          "orgId": {
-            "type": "string"
-          },
-          "rangeStart": {
-            "type": "string"
-          },
-          "rangeEnd": {
-            "type": "string"
-          },
-          "bill": {
-            "type": "number"
+          "provider": {
+            "type": "string",
+            "enum": [
+              "azure-openai"
+            ]
           },
-          "billWithinBillingLimit": {
-            "type": "boolean"
+          "region": {
+            "type": "string",
+            "enum": [
+              "australia",
+              "canadaeast",
+              "canadacentral",
+              "eastus2",
+              "eastus",
+              "france",
+              "india",
+              "japaneast",
+              "japanwest",
+              "uaenorth",
+              "northcentralus",
+              "norway",
+              "southcentralus",
+              "swedencentral",
+              "switzerland",
+              "uk",
+              "westus",
+              "westus3"
+            ]
           },
-          "billDailyBreakdown": {
-            "type": "object"
+          "models": {
+            "type": "array",
+            "enum": [
+              "gpt-4.1-2025-04-14",
+              "gpt-4.1-mini-2025-04-14",
+              "gpt-4.1-nano-2025-04-14",
+              "gpt-4o-2024-11-20",
+              "gpt-4o-2024-08-06",
+              "gpt-4o-2024-05-13",
+              "gpt-4o-mini-2024-07-18",
+              "gpt-4-turbo-2024-04-09",
+              "gpt-4-0125-preview",
+              "gpt-4-1106-preview",
+              "gpt-4-0613",
+              "gpt-35-turbo-0125",
+              "gpt-35-turbo-1106"
+            ],
+            "example": [
+              "gpt-4-0125-preview",
+              "gpt-4-0613"
+            ],
+            "items": {
+              "type": "string",
+              "enum": [
+                "gpt-4.1-2025-04-14",
+                "gpt-4.1-mini-2025-04-14",
+                "gpt-4.1-nano-2025-04-14",
+                "gpt-4o-2024-11-20",
+                "gpt-4o-2024-08-06",
+                "gpt-4o-2024-05-13",
+                "gpt-4o-mini-2024-07-18",
+                "gpt-4-turbo-2024-04-09",
+                "gpt-4-0125-preview",
+                "gpt-4-1106-preview",
+                "gpt-4-0613",
+                "gpt-35-turbo-0125",
+                "gpt-35-turbo-1106"
+              ]
+            }
           },
-          "callActive": {
-            "type": "number"
+          "openAIKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "callActiveWithinConcurrencyLimit": {
-            "type": "boolean"
+          "ocpApimSubscriptionKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
           },
-          "callMinutes": {
-            "type": "number"
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
           },
-          "callMinutesDailyBreakdown": {
-            "type": "object"
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
-          "callMinutesAverage": {
-            "type": "number"
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
-          "callMinutesAverageDailyBreakdown": {
-            "type": "object"
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "callCount": {
-            "type": "number"
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           },
-          "callCountDailyBreakdown": {
-            "type": "object"
+          "openAIEndpoint": {
+            "type": "string",
+            "maxLength": 10000
           }
         },
         "required": [
+          "provider",
+          "region",
+          "models",
+          "openAIKey",
+          "id",
           "orgId",
-          "rangeStart",
-          "rangeEnd",
-          "bill",
-          "billWithinBillingLimit",
-          "billDailyBreakdown",
-          "callActive",
-          "callActiveWithinConcurrencyLimit",
-          "callMinutes",
-          "callMinutesDailyBreakdown",
-          "callMinutesAverage",
-          "callMinutesAverageDailyBreakdown",
-          "callCount",
-          "callCountDailyBreakdown"
+          "createdAt",
+          "updatedAt",
+          "openAIEndpoint"
         ]
       },
-      "TimeRange": {
+      "ByoSipTrunkCredential": {
         "type": "object",
         "properties": {
-          "step": {
+          "provider": {
             "type": "string",
-            "description": "This is the time step for aggregations.\n\nIf not provided, defaults to returning for the entire time range.",
+            "description": "This can be used to bring your own SIP trunks or to connect to a Carrier.",
             "enum": [
-              "second",
-              "minute",
-              "hour",
-              "day",
-              "week",
-              "month",
-              "quarter",
-              "year",
-              "decade",
-              "century",
-              "millennium"
+              "byo-sip-trunk"
             ]
           },
-          "start": {
-            "format": "date-time",
+          "id": {
             "type": "string",
-            "description": "This is the start date for the time range.\n\nIf not provided, defaults to the 7 days ago."
+            "description": "This is the unique identifier for the credential."
           },
-          "end": {
-            "format": "date-time",
+          "orgId": {
             "type": "string",
-            "description": "This is the end date for the time range.\n\nIf not provided, defaults to now."
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
-          "timezone": {
-            "type": "string",
-            "description": "This is the timezone you want to set for the query.\n\nIf not provided, defaults to UTC."
-          }
-        }
-      },
-      "AnalyticsOperation": {
-        "type": "object",
-        "properties": {
-          "operation": {
+          "createdAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the aggregation operation you want to perform.",
-            "enum": [
-              "sum",
-              "avg",
-              "count",
-              "min",
-              "max",
-              "history"
-            ]
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
-          "column": {
+          "updatedAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the columns you want to perform the aggregation operation on.",
-            "enum": [
-              "id",
-              "cost",
-              "costBreakdown.llm",
-              "costBreakdown.stt",
-              "costBreakdown.tts",
-              "costBreakdown.vapi",
-              "costBreakdown.ttsCharacters",
-              "costBreakdown.llmPromptTokens",
-              "costBreakdown.llmCompletionTokens",
-              "duration",
-              "concurrency",
-              "minutesUsed"
-            ]
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "alias": {
+          "name": {
             "type": "string",
-            "description": "This is the alias for column name returned. Defaults to `${operation}${column}`.",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
             "maxLength": 40
-          }
-        },
-        "required": [
-          "operation",
-          "column"
-        ]
-      },
-      "AnalyticsQuery": {
-        "type": "object",
-        "properties": {
-          "table": {
-            "type": "string",
-            "description": "This is the table you want to query.",
-            "enum": [
-              "call",
-              "subscription"
-            ]
           },
-          "groupBy": {
+          "gateways": {
+            "description": "This is the list of SIP trunk's gateways.",
             "type": "array",
-            "description": "This is the list of columns you want to group by.",
-            "enum": [
-              "type",
-              "assistantId",
-              "endedReason",
-              "analysis.successEvaluation",
-              "status"
-            ],
             "items": {
-              "type": "string",
-              "enum": [
-                "type",
-                "assistantId",
-                "endedReason",
-                "analysis.successEvaluation",
-                "status"
-              ]
+              "$ref": "#/components/schemas/SipTrunkGateway"
             }
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the query. This will be used to identify the query in the response.",
-            "maxLength": 40
-          },
-          "timeRange": {
-            "description": "This is the time range for the query.",
+          "outboundAuthenticationPlan": {
+            "description": "This can be used to configure the outbound authentication if required by the SIP trunk.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TimeRange"
+                "$ref": "#/components/schemas/SipTrunkOutboundAuthenticationPlan"
               }
             ]
           },
-          "operations": {
-            "description": "This is the list of operations you want to perform.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/AnalyticsOperation"
-            }
-          }
-        },
-        "required": [
-          "table",
-          "name",
-          "operations"
-        ]
-      },
-      "AnalyticsQueryDTO": {
-        "type": "object",
-        "properties": {
-          "queries": {
-            "description": "This is the list of metric queries you want to perform.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/AnalyticsQuery"
-            }
-          }
-        },
-        "required": [
-          "queries"
-        ]
-      },
-      "AnalyticsQueryResult": {
-        "type": "object",
-        "properties": {
-          "name": {
+          "outboundLeadingPlusEnabled": {
+            "type": "boolean",
+            "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false"
+          },
+          "techPrefix": {
             "type": "string",
-            "description": "This is the unique key for the query."
+            "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.",
+            "maxLength": 10000
           },
-          "timeRange": {
-            "description": "This is the time range for the query.",
+          "sipDiversionHeader": {
+            "type": "string",
+            "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.",
+            "maxLength": 10000
+          },
+          "sbcConfiguration": {
+            "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/TimeRange"
+                "$ref": "#/components/schemas/SbcConfiguration"
               }
             ]
-          },
-          "result": {
-            "description": "This is the result of the query, a list of unique groups with result of their aggregations.\n\nExample:\n\"result\": [\n  { \"date\": \"2023-01-01\", \"assistantId\": \"123\", \"endedReason\": \"customer-ended-call\", \"sumDuration\": 120, \"avgCost\": 10.5 },\n  { \"date\": \"2023-01-02\", \"assistantId\": \"123\", \"endedReason\": \"customer-did-not-give-microphone-permission\", \"sumDuration\": 0, \"avgCost\": 0 },\n  // Additional results\n]",
-            "type": "array",
-            "items": {
-              "type": "object"
-            }
           }
         },
         "required": [
-          "name",
-          "timeRange",
-          "result"
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
+          "gateways"
         ]
       },
-      "CallLogPrivileged": {
+      "CartesiaCredential": {
         "type": "object",
         "properties": {
-          "callId": {
+          "provider": {
             "type": "string",
-            "description": "This is the unique identifier for the call."
+            "enum": [
+              "cartesia"
+            ]
           },
-          "orgId": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this call log belongs to."
+            "description": "This is not returned in the API."
           },
-          "log": {
+          "id": {
             "type": "string",
-            "description": "This is the log message associated with the call."
+            "description": "This is the unique identifier for the credential."
           },
-          "level": {
+          "orgId": {
             "type": "string",
-            "description": "This is the level of the log message.",
-            "enum": [
-              "INFO",
-              "LOG",
-              "WARN",
-              "ERROR",
-              "CHECKPOINT"
-            ]
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
-          "time": {
+          "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the log was created."
-          }
-        },
-        "required": [
-          "callId",
-          "orgId",
-          "log",
-          "level",
-          "time"
-        ]
-      },
-      "CallLogsPaginatedResponse": {
-        "type": "object",
-        "properties": {
-          "results": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/CallLogPrivileged"
-            }
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
-          "metadata": {
-            "$ref": "#/components/schemas/PaginationMeta"
-          }
-        },
-        "required": [
-          "results",
-          "metadata"
-        ]
-      },
-      "Error": {
-        "type": "object",
-        "properties": {
-          "message": {
-            "type": "string"
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
         },
         "required": [
-          "message"
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
         ]
       },
-      "Log": {
+      "CerebrasCredential": {
         "type": "object",
         "properties": {
-          "time": {
-            "type": "string",
-            "description": "This is the timestamp at which the log was written."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the org that this log belongs to."
-          },
-          "type": {
+          "provider": {
             "type": "string",
-            "description": "This is the type of the log.",
             "enum": [
-              "API",
-              "Webhook",
-              "Call",
-              "Provider"
+              "cerebras"
             ]
           },
-          "webhookType": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the type of the webhook, given the log is from a webhook."
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "resource": {
+          "id": {
             "type": "string",
-            "description": "This is the specific resource, relevant only to API logs.",
-            "enum": [
-              "org",
-              "assistant",
-              "analytics",
-              "credential",
-              "phone-number",
-              "block",
-              "voice-library",
-              "provider",
-              "tool",
-              "token",
-              "template",
-              "squad",
-              "call",
-              "file",
-              "metric",
-              "log"
-            ]
-          },
-          "requestDurationSeconds": {
-            "type": "number",
-            "description": "'This is how long the request took.",
-            "minimum": 0
+            "description": "This is the unique identifier for the credential."
           },
-          "requestStartedAt": {
+          "orgId": {
             "type": "string",
-            "description": "This is the timestamp at which the request began."
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
-          "requestFinishedAt": {
+          "createdAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the timestamp at which the request finished."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
-          "requestBody": {
-            "type": "object",
-            "description": "This is the body of the request."
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "requestHttpMethod": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "CloudflareCredential": {
+        "type": "object",
+        "properties": {
+          "provider": {
             "type": "string",
-            "description": "This is the request method.",
             "enum": [
-              "POST",
-              "GET",
-              "PUT",
-              "PATCH",
-              "DELETE"
-            ]
+              "cloudflare"
+            ],
+            "description": "Credential provider. Only allowed value is cloudflare"
           },
-          "requestUrl": {
+          "accountId": {
             "type": "string",
-            "description": "This is the request URL."
+            "description": "Cloudflare Account Id."
           },
-          "requestPath": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the request path."
+            "description": "Cloudflare API Key / Token."
           },
-          "requestQuery": {
+          "accountEmail": {
             "type": "string",
-            "description": "This is the request query."
+            "description": "Cloudflare Account Email."
           },
-          "responseHttpCode": {
+          "fallbackIndex": {
             "type": "number",
-            "description": "This the HTTP status code of the response."
-          },
-          "requestIpAddress": {
-            "type": "string",
-            "description": "This is the request IP address."
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.",
+            "minimum": 1
           },
-          "requestOrigin": {
+          "id": {
             "type": "string",
-            "description": "This is the origin of the request"
-          },
-          "responseBody": {
-            "type": "object",
-            "description": "This is the body of the response."
-          },
-          "requestHeaders": {
-            "type": "object",
-            "description": "These are the headers of the request."
-          },
-          "error": {
-            "description": "This is the error, if one occurred.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Error"
-              }
-            ]
+            "description": "This is the unique identifier for the credential."
           },
-          "assistantId": {
+          "orgId": {
             "type": "string",
-            "description": "This is the ID of the assistant."
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
-          "phoneNumberId": {
+          "createdAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the ID of the phone number."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
-          "customerId": {
+          "updatedAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the ID of the customer."
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "squadId": {
+          "name": {
             "type": "string",
-            "description": "This is the ID of the squad."
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           },
-          "callId": {
-            "type": "string",
-            "description": "This is the ID of the call."
+          "bucketPlan": {
+            "description": "This is the bucket plan that can be provided to store call artifacts in R2",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CloudflareR2BucketPlan"
+              }
+            ]
           }
         },
         "required": [
-          "time",
+          "provider",
+          "id",
           "orgId",
-          "type"
+          "createdAt",
+          "updatedAt"
         ]
       },
-      "LogsPaginatedResponse": {
+      "Oauth2AuthenticationSession": {
         "type": "object",
         "properties": {
-          "results": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/Log"
-            }
+          "accessToken": {
+            "type": "string",
+            "description": "This is the OAuth2 access token."
           },
-          "metadata": {
-            "$ref": "#/components/schemas/PaginationMeta"
+          "expiresAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the OAuth2 access token expiration."
+          },
+          "refreshToken": {
+            "type": "string",
+            "description": "This is the OAuth2 refresh token."
           }
-        },
-        "required": [
-          "results",
-          "metadata"
-        ]
+        }
       },
-      "CreateOrgDTO": {
+      "CustomLLMCredential": {
         "type": "object",
         "properties": {
-          "hipaaEnabled": {
-            "type": "boolean",
-            "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.",
-            "example": false
-          },
-          "subscriptionId": {
-            "type": "string",
-            "description": "This is the ID of the subscription the org belongs to."
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the org. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "channel": {
+          "provider": {
             "type": "string",
-            "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.",
             "enum": [
-              "default",
-              "weekly"
-            ]
-          },
-          "billingLimit": {
-            "type": "number",
-            "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.",
-            "minimum": 0,
-            "maximum": 1000
+              "custom-llm"
+            ]
           },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
+          },
+          "authenticationPlan": {
+            "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
               }
             ]
           },
-          "concurrencyLimit": {
-            "type": "number",
-            "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.",
-            "minimum": 1,
-            "maximum": 10
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
           },
-          "compliancePlan": {
-            "description": "Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field.\nWhen this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost.\nAt the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided.\nDefaults to false.\nWhen PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers.\nThis is due to the compliance requirements of PCI. Other providers may not meet these requirements.",
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+          },
+          "authenticationSession": {
+            "description": "This is the authentication session for the credential. Available for credentials that have an authentication plan.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/CompliancePlan"
+                "$ref": "#/components/schemas/Oauth2AuthenticationSession"
               }
             ]
-          }
-        }
-      },
-      "AutoReloadPlan": {
-        "type": "object",
-        "properties": {
-          "credits": {
-            "type": "number",
-            "description": "This the amount of credits to reload."
           },
-          "threshold": {
-            "type": "number",
-            "description": "This is the limit at which the reload is triggered."
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
         },
         "required": [
-          "credits",
-          "threshold"
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
         ]
       },
-      "InvoicePlan": {
+      "DeepgramCredential": {
         "type": "object",
         "properties": {
-          "companyName": {
+          "provider": {
             "type": "string",
-            "description": "This is the name of the company."
+            "enum": [
+              "deepgram"
+            ]
           },
-          "companyAddress": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the address of the company."
+            "description": "This is not returned in the API."
           },
-          "companyTaxId": {
+          "id": {
             "type": "string",
-            "description": "This is the tax ID of the company."
+            "description": "This is the unique identifier for the credential."
           },
-          "companyEmail": {
-            "type": "string",
-            "description": "This is the preferred invoicing email of the company. If not specified, defaults to the subscription's email."
-          }
-        }
-      },
-      "Subscription": {
-        "type": "object",
-        "properties": {
-          "id": {
+          "orgId": {
             "type": "string",
-            "description": "This is the unique identifier for the subscription."
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the timestamp when the subscription was created."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the timestamp when the subscription was last updated."
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "type": {
+          "name": {
             "type": "string",
-            "description": "This is the type / tier of the subscription.",
-            "enum": [
-              "trial",
-              "pay-as-you-go",
-              "enterprise"
-            ]
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           },
-          "status": {
+          "apiUrl": {
+            "type": "string",
+            "description": "This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com."
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "DeepInfraCredential": {
+        "type": "object",
+        "properties": {
+          "provider": {
             "type": "string",
-            "description": "This is the status of the subscription. Past due subscriptions are subscriptions\nwith past due payments.",
             "enum": [
-              "active",
-              "frozen"
+              "deepinfra"
             ]
           },
-          "credits": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the number of credits the subscription currently has.\n\nNote: This is a string to avoid floating point precision issues."
-          },
-          "concurrencyCounter": {
-            "type": "number",
-            "description": "This is the total number of active calls (concurrency) across all orgs under this subscription.",
-            "minimum": 1
-          },
-          "concurrencyLimitIncluded": {
-            "type": "number",
-            "description": "This is the default concurrency limit for the subscription.",
-            "minimum": 1
-          },
-          "phoneNumbersCounter": {
-            "type": "number",
-            "description": "This is the number of free phone numbers the subscription has",
-            "minimum": 1
-          },
-          "phoneNumbersIncluded": {
-            "type": "number",
-            "description": "This is the maximum number of free phone numbers the subscription can have",
-            "minimum": 1
-          },
-          "concurrencyLimitPurchased": {
-            "type": "number",
-            "description": "This is the purchased add-on concurrency limit for the subscription.",
-            "minimum": 1
-          },
-          "monthlyChargeScheduleId": {
-            "type": "number",
-            "description": "This is the ID of the monthly job that charges for subscription add ons and phone numbers."
+            "description": "This is not returned in the API."
           },
-          "monthlyCreditCheckScheduleId": {
-            "type": "number",
-            "description": "This is the ID of the monthly job that checks whether the credit balance of the subscription\nis sufficient for the monthly charge."
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
           },
-          "stripeCustomerId": {
+          "orgId": {
             "type": "string",
-            "description": "This is the Stripe customer ID."
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
-          "stripePaymentMethodId": {
+          "createdAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the Stripe payment ID."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
-          "slackSupportEnabled": {
-            "type": "boolean",
-            "description": "If this flag is true, then the user has purchased slack support."
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "slackChannelId": {
+          "name": {
             "type": "string",
-            "description": "If this subscription has a slack support subscription, the slack channel's ID will be stored here."
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "DeepSeekCredential": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "deep-seek"
+            ]
           },
-          "hipaaEnabled": {
-            "type": "boolean",
-            "description": "This is the HIPAA enabled flag for the subscription. It determines whether orgs under this\nsubscription have the option to enable HIPAA compliance."
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
           },
-          "hipaaCommonPaperAgreementId": {
+          "id": {
             "type": "string",
-            "description": "This is the ID for the Common Paper agreement outlining the HIPAA contract."
+            "description": "This is the unique identifier for the credential."
           },
-          "stripePaymentMethodFingerprint": {
+          "orgId": {
             "type": "string",
-            "description": "This is the Stripe fingerprint of the payment method (card). It allows us\nto detect users who try to abuse our system through multiple sign-ups."
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
-          "stripeCustomerEmail": {
+          "createdAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the customer's email on Stripe."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
-          "referredByEmail": {
+          "updatedAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the email of the referrer for the subscription."
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "autoReloadPlan": {
-            "description": "This is the auto reload plan configured for the subscription.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AutoReloadPlan"
-              }
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "ElevenLabsCredential": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "11labs"
             ]
           },
-          "minutesIncluded": {
-            "type": "number",
-            "description": "The number of minutes included in the subscription.",
-            "minimum": 0
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "minutesUsed": {
-            "type": "number",
-            "description": "The number of minutes used in the subscription.",
-            "minimum": 0
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
           },
-          "minutesUsedNextResetAt": {
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
+          },
+          "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the timestamp at which the number of monthly free minutes is scheduled to reset at."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
-          "minutesOverageCost": {
-            "type": "number",
-            "description": "The per minute charge on minutes that exceed the included minutes. Enterprise only."
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "providersIncluded": {
-            "description": "The list of providers included in the subscription. Enterprise only.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "GcpCredential": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "gcp"
+            ]
           },
-          "outboundCallsDailyLimit": {
+          "fallbackIndex": {
             "type": "number",
-            "description": "The maximum number of outbound calls this subscription may make in a day. Resets every night.",
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.",
             "minimum": 1
           },
-          "outboundCallsCounter": {
-            "type": "number",
-            "description": "The current number of outbound calls the subscription has made in the current day.",
-            "minimum": 1
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
           },
-          "outboundCallsCounterNextResetAt": {
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
+          },
+          "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the timestamp at which the outbound calls counter is scheduled to reset at."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
-          "couponIds": {
-            "description": "This is the IDs of the coupons applicable to this subscription.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "couponUsageLeft": {
+          "name": {
             "type": "string",
-            "description": "This is the number of credits left obtained from a coupon."
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           },
-          "invoicePlan": {
-            "description": "This is the invoice plan for the subscription.",
+          "gcpKey": {
+            "description": "This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details/<service-account-id>/keys.\n\nThe schema is identical to the JSON that GCP outputs.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/InvoicePlan"
+                "$ref": "#/components/schemas/GcpKey"
               }
             ]
           },
-          "pciEnabled": {
-            "type": "boolean",
-            "description": "This is the PCI enabled flag for the subscription. It determines whether orgs under this\nsubscription have the option to enable PCI compliance."
-          },
-          "pciCommonPaperAgreementId": {
+          "region": {
             "type": "string",
-            "description": "This is the ID for the Common Paper agreement outlining the PCI contract."
+            "description": "This is the region of the GCP resource.",
+            "maxLength": 40
+          },
+          "bucketPlan": {
+            "$ref": "#/components/schemas/BucketPlan"
           }
         },
         "required": [
+          "provider",
           "id",
+          "orgId",
           "createdAt",
           "updatedAt",
-          "type",
-          "status",
-          "credits",
-          "concurrencyCounter",
-          "concurrencyLimitIncluded",
-          "concurrencyLimitPurchased"
+          "gcpKey"
         ]
       },
-      "OrgPlan": {
-        "type": "object",
-        "properties": {
-          "includedProviders": {
-            "type": "array",
-            "items": {
-              "type": "object"
-            }
-          },
-          "includedMinutes": {
-            "type": "number"
-          },
-          "costPerOverageMinute": {
-            "type": "number"
-          }
-        }
-      },
-      "Org": {
+      "GladiaCredential": {
         "type": "object",
         "properties": {
-          "hipaaEnabled": {
-            "type": "boolean",
-            "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.",
-            "example": false
-          },
-          "subscription": {
-            "$ref": "#/components/schemas/Subscription"
+          "provider": {
+            "type": "string",
+            "enum": [
+              "gladia"
+            ]
           },
-          "subscriptionId": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the ID of the subscription the org belongs to."
+            "description": "This is not returned in the API."
           },
           "id": {
             "type": "string",
-            "description": "This is the unique identifier for the org."
+            "description": "This is the unique identifier for the credential."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the org was created."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the org was last updated."
-          },
-          "stripeCustomerId": {
-            "type": "string",
-            "description": "This is the Stripe customer for the org."
-          },
-          "stripeSubscriptionId": {
-            "type": "string",
-            "description": "This is the subscription for the org."
-          },
-          "stripeSubscriptionItemId": {
-            "type": "string",
-            "description": "This is the subscription's subscription item."
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "stripeSubscriptionCurrentPeriodStart": {
-            "format": "date-time",
+          "name": {
             "type": "string",
-            "description": "This is the subscription's current period start."
-          },
-          "stripeSubscriptionStatus": {
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
+      },
+      "GoHighLevelCredential": {
+        "type": "object",
+        "properties": {
+          "provider": {
             "type": "string",
-            "description": "This is the subscription's status."
-          },
-          "plan": {
-            "description": "This is the plan for the org.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OrgPlan"
-              }
+            "enum": [
+              "gohighlevel"
             ]
           },
-          "jwtSecret": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the secret key used for signing JWT tokens for the org."
+            "description": "This is not returned in the API."
           },
-          "name": {
+          "id": {
             "type": "string",
-            "description": "This is the name of the org. This is just for your own reference.",
-            "maxLength": 40
+            "description": "This is the unique identifier for the credential."
           },
-          "channel": {
+          "orgId": {
             "type": "string",
-            "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.",
-            "enum": [
-              "default",
-              "weekly"
-            ]
-          },
-          "billingLimit": {
-            "type": "number",
-            "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.",
-            "minimum": 0,
-            "maximum": 1000
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
-          "concurrencyLimit": {
-            "type": "number",
-            "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.",
-            "minimum": 1,
-            "maximum": 10
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "compliancePlan": {
-            "description": "Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field.\nWhen this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost.\nAt the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided.\nDefaults to false.\nWhen PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers.\nThis is due to the compliance requirements of PCI. Other providers may not meet these requirements.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CompliancePlan"
-              }
-            ]
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
         },
         "required": [
+          "provider",
+          "apiKey",
           "id",
+          "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "UpdateOrgDTO": {
+      "GoogleCredential": {
         "type": "object",
         "properties": {
-          "hipaaEnabled": {
-            "type": "boolean",
-            "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.",
-            "example": false
-          },
-          "subscriptionId": {
-            "type": "string",
-            "description": "This is the ID of the subscription the org belongs to."
-          },
-          "name": {
-            "type": "string",
-            "description": "This is the name of the org. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "channel": {
+          "provider": {
             "type": "string",
-            "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.",
+            "description": "This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey",
             "enum": [
-              "default",
-              "weekly"
-            ]
-          },
-          "billingLimit": {
-            "type": "number",
-            "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.",
-            "minimum": 0,
-            "maximum": 1000
-          },
-          "server": {
-            "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
+              "google"
             ]
           },
-          "concurrencyLimit": {
-            "type": "number",
-            "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.",
-            "minimum": 1,
-            "maximum": 10
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "compliancePlan": {
-            "description": "Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field.\nWhen this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost.\nAt the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided.\nDefaults to false.\nWhen PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers.\nThis is due to the compliance requirements of PCI. Other providers may not meet these requirements.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CompliancePlan"
-              }
-            ]
-          }
-        }
-      },
-      "User": {
-        "type": "object",
-        "properties": {
           "id": {
             "type": "string",
-            "description": "This is the unique identifier for the profile or user."
+            "description": "This is the unique identifier for the credential."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the profile was created."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the profile was last updated."
-          },
-          "email": {
-            "type": "string",
-            "description": "This is the email of the user that is associated with the profile."
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "fullName": {
+          "name": {
             "type": "string",
-            "description": "This is the full name of the user that is associated with the profile."
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
         },
         "required": [
+          "provider",
+          "apiKey",
           "id",
+          "orgId",
           "createdAt",
-          "updatedAt",
-          "email"
+          "updatedAt"
         ]
       },
-      "InviteUserDTO": {
+      "GroqCredential": {
         "type": "object",
         "properties": {
-          "emails": {
-            "maxItems": 100,
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
-          },
-          "role": {
+          "provider": {
+            "type": "string",
             "enum": [
-              "admin",
-              "editor",
-              "viewer"
-            ],
-            "type": "string"
+              "groq"
+            ]
           },
-          "redirectTo": {
-            "type": "string"
-          }
-        },
-        "required": [
-          "emails",
-          "role"
-        ]
-      },
-      "UpdateUserRoleDTO": {
-        "type": "object",
-        "properties": {
-          "userId": {
-            "type": "string"
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
           },
-          "role": {
-            "enum": [
-              "admin",
-              "editor",
-              "viewer"
-            ],
-            "type": "string"
-          }
-        },
-        "required": [
-          "userId",
-          "role"
-        ]
-      },
-      "JwtResponse": {
-        "type": "object",
-        "properties": {
-          "accessToken": {
-            "type": "string"
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
           },
-          "aud": {
-            "type": "object"
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+          },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           }
         },
         "required": [
-          "accessToken",
-          "aud"
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
         ]
       },
-      "TokenRestrictions": {
+      "HumeCredential": {
         "type": "object",
         "properties": {
-          "enabled": {
-            "type": "boolean",
-            "description": "This determines whether the token is enabled or disabled. Default is true, it's enabled."
+          "provider": {
+            "type": "string",
+            "enum": [
+              "hume"
+            ]
           },
-          "allowedOrigins": {
-            "description": "This determines the allowed origins for this token. Validates the `Origin` header. Default is any origin.\n\nOnly relevant for `public` tokens.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "allowedAssistantIds": {
-            "description": "This determines which assistantIds can be used when creating a call. Default is any assistantId.\n\nOnly relevant for `public` tokens.",
-            "type": "array",
-            "items": {
-              "type": "string"
-            }
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
           },
-          "allowTransientAssistant": {
-            "type": "boolean",
-            "description": "This determines whether transient assistants can be used when creating a call. Default is true.\n\nIf `allowedAssistantIds` is provided, this is automatically false.\n\nOnly relevant for `public` tokens."
-          }
-        }
-      },
-      "CreateTokenDTO": {
-        "type": "object",
-        "properties": {
-          "tag": {
+          "orgId": {
             "type": "string",
-            "description": "This is the tag for the token. It represents its scope.",
-            "enum": [
-              "private",
-              "public"
-            ]
+            "description": "This is the unique identifier for the org that this credential belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
           "name": {
             "type": "string",
-            "description": "This is the name of the token. This is just for your own reference.",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
             "maxLength": 40
-          },
-          "restrictions": {
-            "description": "This are the restrictions for the token.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/TokenRestrictions"
-              }
-            ]
           }
-        }
+        },
+        "required": [
+          "provider",
+          "apiKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
       },
-      "Token": {
+      "InflectionAICredential": {
         "type": "object",
         "properties": {
-          "tag": {
+          "provider": {
             "type": "string",
-            "description": "This is the tag for the token. It represents its scope.",
+            "description": "This is the api key for Pi in InflectionAI's console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup",
             "enum": [
-              "private",
-              "public"
+              "inflection-ai"
             ]
           },
+          "apiKey": {
+            "type": "string",
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
+          },
           "id": {
             "type": "string",
-            "description": "This is the unique identifier for the token."
+            "description": "This is the unique identifier for the credential."
           },
           "orgId": {
             "type": "string",
-            "description": "This is unique identifier for the org that this token belongs to."
+            "description": "This is the unique identifier for the org that this credential belongs to."
           },
           "createdAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the token was created."
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
           },
           "updatedAt": {
             "format": "date-time",
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the token was last updated."
-          },
-          "value": {
-            "type": "string",
-            "description": "This is the token key."
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
           "name": {
             "type": "string",
-            "description": "This is the name of the token. This is just for your own reference.",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
             "maxLength": 40
-          },
-          "restrictions": {
-            "description": "This are the restrictions for the token.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/TokenRestrictions"
-              }
-            ]
           }
         },
         "required": [
+          "provider",
+          "apiKey",
           "id",
           "orgId",
           "createdAt",
-          "updatedAt",
-          "value"
+          "updatedAt"
         ]
       },
-      "UpdateTokenDTO": {
+      "LangfuseCredential": {
         "type": "object",
         "properties": {
-          "tag": {
+          "provider": {
             "type": "string",
-            "description": "This is the tag for the token. It represents its scope.",
             "enum": [
-              "private",
-              "public"
+              "langfuse"
             ]
           },
+          "publicKey": {
+            "type": "string",
+            "description": "The public key for Langfuse project. Eg: pk-lf-..."
+          },
+          "apiKey": {
+            "type": "string",
+            "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API."
+          },
+          "apiUrl": {
+            "type": "string",
+            "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com"
+          },
+          "id": {
+            "type": "string",
+            "description": "This is the unique identifier for the credential."
+          },
+          "orgId": {
+            "type": "string",
+            "description": "This is the unique identifier for the org that this credential belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the credential was created."
+          },
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+          },
           "name": {
             "type": "string",
-            "description": "This is the name of the token. This is just for your own reference.",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
             "maxLength": 40
-          },
-          "restrictions": {
-            "description": "This are the restrictions for the token.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/TokenRestrictions"
-              }
-            ]
           }
-        }
+        },
+        "required": [
+          "provider",
+          "publicKey",
+          "apiKey",
+          "apiUrl",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
       },
-      "AnthropicCredential": {
+      "LmntCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "anthropic"
+              "lmnt"
             ]
           },
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
           "id": {
@@ -28021,18 +38993,25 @@
           "updatedAt"
         ]
       },
-      "AnyscaleCredential": {
+      "MakeCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "anyscale"
+              "make"
             ]
           },
+          "teamId": {
+            "type": "string",
+            "description": "Team ID"
+          },
+          "region": {
+            "type": "string",
+            "description": "Region of your application. For example: eu1, eu2, us1, us2"
+          },
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
           "id": {
@@ -28062,6 +39041,8 @@
         },
         "required": [
           "provider",
+          "teamId",
+          "region",
           "apiKey",
           "id",
           "orgId",
@@ -28069,17 +39050,18 @@
           "updatedAt"
         ]
       },
-      "AssemblyAICredential": {
+      "MistralCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "assembly-ai"
+              "mistral"
             ]
           },
           "apiKey": {
             "type": "string",
+            "maxLength": 100,
             "description": "This is not returned in the API."
           },
           "id": {
@@ -28116,52 +39098,18 @@
           "updatedAt"
         ]
       },
-      "AzureCredential": {
+      "NeuphonicCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "azure"
-            ]
-          },
-          "service": {
-            "type": "string",
-            "description": "This is the service being used in Azure.",
-            "enum": [
-              "speech",
-              "blob_storage"
-            ],
-            "default": "speech"
-          },
-          "region": {
-            "type": "string",
-            "description": "This is the region of the Azure resource.",
-            "enum": [
-              "australia",
-              "canadaeast",
-              "canadacentral",
-              "eastus2",
-              "eastus",
-              "france",
-              "india",
-              "japaneast",
-              "japanwest",
-              "uaenorth",
-              "northcentralus",
-              "norway",
-              "southcentralus",
-              "swedencentral",
-              "switzerland",
-              "uk",
-              "westus",
-              "westus3"
+              "neuphonic"
             ]
           },
           "apiKey": {
             "type": "string",
-            "description": "This is not returned in the API.",
-            "maxLength": 10000
+            "description": "This is not returned in the API."
           },
           "id": {
             "type": "string",
@@ -28186,97 +39134,27 @@
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "bucketPlan": {
-            "description": "This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AzureBlobStorageBucketPlan"
-              }
-            ]
           }
         },
         "required": [
           "provider",
-          "service",
+          "apiKey",
           "id",
           "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "AzureOpenAICredential": {
+      "OpenAICredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "azure-openai"
-            ]
-          },
-          "region": {
-            "type": "string",
-            "enum": [
-              "australia",
-              "canadaeast",
-              "canadacentral",
-              "eastus2",
-              "eastus",
-              "france",
-              "india",
-              "japaneast",
-              "japanwest",
-              "uaenorth",
-              "northcentralus",
-              "norway",
-              "southcentralus",
-              "swedencentral",
-              "switzerland",
-              "uk",
-              "westus",
-              "westus3"
+              "openai"
             ]
           },
-          "models": {
-            "type": "array",
-            "enum": [
-              "gpt-4o-2024-11-20",
-              "gpt-4o-2024-08-06",
-              "gpt-4o-mini-2024-07-18",
-              "gpt-4o-2024-05-13",
-              "gpt-4-turbo-2024-04-09",
-              "gpt-4-0125-preview",
-              "gpt-4-1106-preview",
-              "gpt-4-0613",
-              "gpt-35-turbo-0125",
-              "gpt-35-turbo-1106"
-            ],
-            "example": [
-              "gpt-4-0125-preview",
-              "gpt-4-0613"
-            ],
-            "items": {
-              "type": "string",
-              "enum": [
-                "gpt-4o-2024-11-20",
-                "gpt-4o-2024-08-06",
-                "gpt-4o-mini-2024-07-18",
-                "gpt-4o-2024-05-13",
-                "gpt-4-turbo-2024-04-09",
-                "gpt-4-0125-preview",
-                "gpt-4-1106-preview",
-                "gpt-4-0613",
-                "gpt-35-turbo-0125",
-                "gpt-35-turbo-1106"
-              ]
-            }
-          },
-          "openAIKey": {
-            "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
-          },
-          "ocpApimSubscriptionKey": {
+          "apiKey": {
             "type": "string",
             "description": "This is not returned in the API."
           },
@@ -28303,34 +39181,30 @@
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "openAIEndpoint": {
-            "type": "string",
-            "maxLength": 10000
           }
         },
         "required": [
           "provider",
-          "region",
-          "models",
-          "openAIKey",
+          "apiKey",
           "id",
           "orgId",
           "createdAt",
-          "updatedAt",
-          "openAIEndpoint"
+          "updatedAt"
         ]
       },
-      "ByoSipTrunkCredential": {
+      "OpenRouterCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
-            "description": "This can be used to bring your own SIP trunks or to connect to a Carrier.",
             "enum": [
-              "byo-sip-trunk"
+              "openrouter"
             ]
           },
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
           "id": {
             "type": "string",
             "description": "This is the unique identifier for the credential."
@@ -28354,60 +39228,24 @@
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "gateways": {
-            "description": "This is the list of SIP trunk's gateways.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/SipTrunkGateway"
-            }
-          },
-          "outboundAuthenticationPlan": {
-            "description": "This can be used to configure the outbound authentication if required by the SIP trunk.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SipTrunkOutboundAuthenticationPlan"
-              }
-            ]
-          },
-          "outboundLeadingPlusEnabled": {
-            "type": "boolean",
-            "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false"
-          },
-          "techPrefix": {
-            "type": "string",
-            "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.",
-            "maxLength": 10000
-          },
-          "sipDiversionHeader": {
-            "type": "string",
-            "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.",
-            "maxLength": 10000
-          },
-          "sbcConfiguration": {
-            "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SbcConfiguration"
-              }
-            ]
           }
         },
         "required": [
+          "provider",
+          "apiKey",
           "id",
           "orgId",
           "createdAt",
-          "updatedAt",
-          "gateways"
+          "updatedAt"
         ]
       },
-      "CartesiaCredential": {
+      "PerplexityAICredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "cartesia"
+              "perplexity-ai"
             ]
           },
           "apiKey": {
@@ -28448,18 +39286,17 @@
           "updatedAt"
         ]
       },
-      "CerebrasCredential": {
+      "PlayHTCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "cerebras"
+              "playht"
             ]
           },
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
           "id": {
@@ -28485,6 +39322,9 @@
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
+          },
+          "userId": {
+            "type": "string"
           }
         },
         "required": [
@@ -28493,30 +39333,22 @@
           "id",
           "orgId",
           "createdAt",
-          "updatedAt"
+          "updatedAt",
+          "userId"
         ]
       },
-      "CloudflareCredential": {
+      "RimeAICredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "cloudflare"
-            ],
-            "description": "Credential provider. Only allowed value is cloudflare"
-          },
-          "accountId": {
-            "type": "string",
-            "description": "Cloudflare Account Id."
+              "rime-ai"
+            ]
           },
           "apiKey": {
             "type": "string",
-            "description": "Cloudflare API Key / Token."
-          },
-          "accountEmail": {
-            "type": "string",
-            "description": "Cloudflare Account Email."
+            "description": "This is not returned in the API."
           },
           "id": {
             "type": "string",
@@ -28541,60 +39373,30 @@
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "bucketPlan": {
-            "description": "This is the bucket plan that can be provided to store call artifacts in R2",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CloudflareR2BucketPlan"
-              }
-            ]
           }
         },
         "required": [
           "provider",
+          "apiKey",
           "id",
           "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "Oauth2AuthenticationSession": {
-        "type": "object",
-        "properties": {
-          "accessToken": {
-            "type": "string",
-            "description": "This is the OAuth2 access token."
-          },
-          "expiresAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the OAuth2 access token expiration."
-          }
-        }
-      },
-      "CustomLLMCredential": {
+      "RunpodCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "custom-llm"
+              "runpod"
             ]
           },
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
-          "authenticationPlan": {
-            "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
-              }
-            ]
-          },
           "id": {
             "type": "string",
             "description": "This is the unique identifier for the credential."
@@ -28613,14 +39415,6 @@
             "type": "string",
             "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
-          "authenticationSession": {
-            "description": "This is the authentication session for the credential. Available for credentials that have an authentication plan.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Oauth2AuthenticationSession"
-              }
-            ]
-          },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
@@ -28637,69 +39431,40 @@
           "updatedAt"
         ]
       },
-      "DeepgramCredential": {
+      "S3Credential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "deepgram"
-            ]
-          },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the credential."
+              "s3"
+            ],
+            "description": "Credential provider. Only allowed value is s3"
           },
-          "orgId": {
+          "awsAccessKeyId": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "AWS access key ID."
           },
-          "createdAt": {
-            "format": "date-time",
+          "awsSecretAccessKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
+            "description": "AWS access key secret. This is not returned in the API."
           },
-          "updatedAt": {
-            "format": "date-time",
+          "region": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "AWS region in which the S3 bucket is located."
           },
-          "name": {
+          "s3BucketName": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "AWS S3 bucket name."
           },
-          "apiUrl": {
-            "type": "string",
-            "description": "This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com."
-          }
-        },
-        "required": [
-          "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
-      },
-      "DeepInfraCredential": {
-        "type": "object",
-        "properties": {
-          "provider": {
+          "s3PathPrefix": {
             "type": "string",
-            "enum": [
-              "deepinfra"
-            ]
+            "description": "The path prefix for the uploaded recording. Ex. \"recordings/\""
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "fallbackIndex": {
+            "type": "number",
+            "minimum": 1,
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order."
           },
           "id": {
             "type": "string",
@@ -28728,20 +39493,24 @@
         },
         "required": [
           "provider",
-          "apiKey",
+          "awsAccessKeyId",
+          "awsSecretAccessKey",
+          "region",
+          "s3BucketName",
+          "s3PathPrefix",
           "id",
           "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "DeepSeekCredential": {
+      "SmallestAICredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "deep-seek"
+              "smallest-ai"
             ]
           },
           "apiKey": {
@@ -28782,18 +39551,17 @@
           "updatedAt"
         ]
       },
-      "ElevenLabsCredential": {
+      "SpeechmaticsCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "11labs"
+              "speechmatics"
             ]
           },
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
           "id": {
@@ -28830,14 +39598,20 @@
           "updatedAt"
         ]
       },
-      "GcpCredential": {
+      "SupabaseCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "gcp"
-            ]
+              "supabase"
+            ],
+            "description": "This is for supabase storage."
+          },
+          "fallbackIndex": {
+            "type": "number",
+            "minimum": 1,
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order."
           },
           "id": {
             "type": "string",
@@ -28863,21 +39637,8 @@
             "minLength": 1,
             "maxLength": 40
           },
-          "gcpKey": {
-            "description": "This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details/<service-account-id>/keys.\n\nThe schema is identical to the JSON that GCP outputs.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/GcpKey"
-              }
-            ]
-          },
           "bucketPlan": {
-            "description": "This is the bucket plan that can be provided to store call artifacts in GCP.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/BucketPlan"
-              }
-            ]
+            "$ref": "#/components/schemas/SupabaseBucketPlan"
           }
         },
         "required": [
@@ -28885,17 +39646,16 @@
           "id",
           "orgId",
           "createdAt",
-          "updatedAt",
-          "gcpKey"
+          "updatedAt"
         ]
       },
-      "GladiaCredential": {
+      "TavusCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "gladia"
+              "tavus"
             ]
           },
           "apiKey": {
@@ -28936,13 +39696,13 @@
           "updatedAt"
         ]
       },
-      "GoHighLevelCredential": {
+      "TogetherAICredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "gohighlevel"
+              "together-ai"
             ]
           },
           "apiKey": {
@@ -28983,19 +39743,17 @@
           "updatedAt"
         ]
       },
-      "GoogleCredential": {
+      "TrieveCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
-            "description": "This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey",
             "enum": [
-              "google"
+              "trieve"
             ]
           },
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
           "id": {
@@ -29032,19 +39790,27 @@
           "updatedAt"
         ]
       },
-      "GroqCredential": {
+      "TwilioCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "groq"
+              "twilio"
             ]
           },
+          "authToken": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
           "apiKey": {
             "type": "string",
             "description": "This is not returned in the API."
           },
+          "apiSecret": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
           "id": {
             "type": "string",
             "description": "This is the unique identifier for the credential."
@@ -29068,29 +39834,36 @@
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
+          },
+          "accountSid": {
+            "type": "string"
           }
         },
         "required": [
           "provider",
-          "apiKey",
           "id",
           "orgId",
           "createdAt",
-          "updatedAt"
+          "updatedAt",
+          "accountSid"
         ]
       },
-      "HumeCredential": {
+      "VonageCredential": {
         "type": "object",
         "properties": {
+          "vonageApplicationPrivateKey": {
+            "type": "string",
+            "description": "This is not returned in the API.",
+            "maxLength": 10000
+          },
           "provider": {
             "type": "string",
             "enum": [
-              "hume"
+              "vonage"
             ]
           },
-          "apiKey": {
+          "apiSecret": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
           "id": {
@@ -29111,36 +39884,59 @@
             "type": "string",
             "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
+          "vonageApplicationId": {
+            "type": "string",
+            "description": "This is the Vonage Application ID for the credential.\n\nOnly relevant for Vonage credentials.",
+            "maxLength": 10000
+          },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
+          },
+          "apiKey": {
+            "type": "string"
           }
         },
         "required": [
+          "vonageApplicationPrivateKey",
           "provider",
-          "apiKey",
+          "apiSecret",
           "id",
           "orgId",
           "createdAt",
-          "updatedAt"
+          "updatedAt",
+          "vonageApplicationId",
+          "apiKey"
         ]
       },
-      "InflectionAICredential": {
+      "WebhookCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
-            "description": "This is the api key for Pi in InflectionAI's console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup",
             "enum": [
-              "inflection-ai"
+              "webhook"
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+          "authenticationPlan": {
+            "description": "This is the authentication plan. Supports OAuth2 RFC 6749 and HMAC signing.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
+              },
+              {
+                "$ref": "#/components/schemas/HMACAuthenticationPlan"
+              }
+            ],
+            "discriminator": {
+              "propertyName": "type",
+              "mapping": {
+                "oauth2": "#/components/schemas/OAuth2AuthenticationPlan",
+                "hmac": "#/components/schemas/HMACAuthenticationPlan"
+              }
+            }
           },
           "id": {
             "type": "string",
@@ -29160,6 +39956,14 @@
             "type": "string",
             "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
           },
+          "authenticationSession": {
+            "description": "This is the authentication session for the credential. Available for credentials that have an authentication plan.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Oauth2AuthenticationSession"
+              }
+            ]
+          },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
@@ -29169,33 +39973,28 @@
         },
         "required": [
           "provider",
-          "apiKey",
+          "authenticationPlan",
           "id",
           "orgId",
           "createdAt",
-          "updatedAt"
+          "updatedAt",
+          "authenticationSession"
         ]
       },
-      "LangfuseCredential": {
+      "XAiCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
+            "description": "This is the api key for Grok in XAi's console. Get it from here: https://console.x.ai",
             "enum": [
-              "langfuse"
+              "xai"
             ]
           },
-          "publicKey": {
-            "type": "string",
-            "description": "The public key for Langfuse project. Eg: pk-lf-..."
-          },
           "apiKey": {
             "type": "string",
-            "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API."
-          },
-          "apiUrl": {
-            "type": "string",
-            "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com"
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
           "id": {
             "type": "string",
@@ -29224,28 +40023,22 @@
         },
         "required": [
           "provider",
-          "publicKey",
           "apiKey",
-          "apiUrl",
           "id",
           "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "LmntCredential": {
+      "GoogleCalendarOAuth2ClientCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "lmnt"
+              "google.calendar.oauth2-client"
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
-          },
           "id": {
             "type": "string",
             "description": "This is the unique identifier for the credential."
@@ -29273,33 +40066,24 @@
         },
         "required": [
           "provider",
-          "apiKey",
           "id",
           "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "MakeCredential": {
+      "GoogleCalendarOAuth2AuthorizationCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "make"
+              "google.calendar.oauth2-authorization"
             ]
           },
-          "teamId": {
-            "type": "string",
-            "description": "Team ID"
-          },
-          "region": {
-            "type": "string",
-            "description": "Region of your application. For example: eu1, eu2, us1, us2"
-          },
-          "apiKey": {
+          "authorizationId": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The authorization ID for the OAuth2 authorization"
           },
           "id": {
             "type": "string",
@@ -29328,28 +40112,25 @@
         },
         "required": [
           "provider",
-          "teamId",
-          "region",
-          "apiKey",
+          "authorizationId",
           "id",
           "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "MistralCredential": {
+      "GoogleSheetsOAuth2AuthorizationCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "mistral"
+              "google.sheets.oauth2-authorization"
             ]
           },
-          "apiKey": {
+          "authorizationId": {
             "type": "string",
-            "maxLength": 100,
-            "description": "This is not returned in the API."
+            "description": "The authorization ID for the OAuth2 authorization"
           },
           "id": {
             "type": "string",
@@ -29378,25 +40159,25 @@
         },
         "required": [
           "provider",
-          "apiKey",
+          "authorizationId",
           "id",
           "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "NeuphonicCredential": {
+      "SlackOAuth2AuthorizationCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "neuphonic"
+              "slack.oauth2-authorization"
             ]
           },
-          "apiKey": {
+          "authorizationId": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The authorization ID for the OAuth2 authorization"
           },
           "id": {
             "type": "string",
@@ -29425,25 +40206,29 @@
         },
         "required": [
           "provider",
-          "apiKey",
+          "authorizationId",
           "id",
           "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "OpenAICredential": {
+      "GoHighLevelMCPCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "openai"
+              "ghl.oauth2-authorization"
             ]
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "authenticationSession": {
+            "description": "This is the authentication session for the credential.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Oauth2AuthenticationSession"
+              }
+            ]
           },
           "id": {
             "type": "string",
@@ -29472,25 +40257,26 @@
         },
         "required": [
           "provider",
-          "apiKey",
+          "authenticationSession",
           "id",
           "orgId",
           "createdAt",
           "updatedAt"
         ]
       },
-      "OpenRouterCredential": {
+      "InworldCredential": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "openrouter"
+              "inworld"
             ]
           },
           "apiKey": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the Inworld Basic (Base64) authentication token. This is not returned in the API.",
+            "example": "your-base64-token-here"
           },
           "id": {
             "type": "string",
@@ -29526,36 +40312,72 @@
           "updatedAt"
         ]
       },
-      "PerplexityAICredential": {
+      "CreateCerebrasCredentialDTO": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "perplexity-ai"
+              "cerebras"
             ]
           },
           "apiKey": {
             "type": "string",
+            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
-          "id": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateGoogleCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "description": "This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey",
+            "enum": [
+              "google"
+            ]
           },
-          "orgId": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "createdAt": {
-            "format": "date-time",
+          "name": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateHumeCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "hume"
+            ]
           },
-          "updatedAt": {
-            "format": "date-time",
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
@@ -29566,95 +40388,100 @@
         },
         "required": [
           "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "apiKey"
         ]
       },
-      "PlayHTCredential": {
+      "CreateInflectionAICredentialDTO": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
+            "description": "This is the api key for Pi in InflectionAI's console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup",
             "enum": [
-              "playht"
+              "inflection-ai"
             ]
           },
           "apiKey": {
             "type": "string",
+            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
-          "id": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateMistralCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "mistral"
+            ]
           },
-          "orgId": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "maxLength": 100,
+            "description": "This is not returned in the API."
           },
-          "createdAt": {
-            "format": "date-time",
+          "name": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        },
+        "required": [
+          "provider",
+          "apiKey"
+        ]
+      },
+      "CreateNeuphonicCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "neuphonic"
+            ]
           },
-          "updatedAt": {
-            "format": "date-time",
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "userId": {
-            "type": "string"
           }
         },
-        "required": [
-          "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "userId"
+        "required": [
+          "provider",
+          "apiKey"
         ]
       },
-      "RimeAICredential": {
+      "CreateSpeechmaticsCredentialDTO": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "rime-ai"
+              "speechmatics"
             ]
           },
           "apiKey": {
             "type": "string",
             "description": "This is not returned in the API."
           },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
-          },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
@@ -29664,44 +40491,22 @@
         },
         "required": [
           "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "apiKey"
         ]
       },
-      "RunpodCredential": {
+      "CreateTrieveCredentialDTO": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "runpod"
+              "trieve"
             ]
           },
           "apiKey": {
             "type": "string",
             "description": "This is not returned in the API."
           },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
-          },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
@@ -29711,60 +40516,25 @@
         },
         "required": [
           "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "apiKey"
         ]
       },
-      "S3Credential": {
+      "CreateGoHighLevelMCPCredentialDTO": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "s3"
-            ],
-            "description": "Credential provider. Only allowed value is s3"
-          },
-          "awsAccessKeyId": {
-            "type": "string",
-            "description": "AWS access key ID."
-          },
-          "awsSecretAccessKey": {
-            "type": "string",
-            "description": "AWS access key secret. This is not returned in the API."
-          },
-          "region": {
-            "type": "string",
-            "description": "AWS region in which the S3 bucket is located."
-          },
-          "s3BucketName": {
-            "type": "string",
-            "description": "AWS S3 bucket name."
-          },
-          "s3PathPrefix": {
-            "type": "string",
-            "description": "The path prefix for the uploaded recording. Ex. \"recordings/\""
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
+              "ghl.oauth2-authorization"
+            ]
           },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+          "authenticationSession": {
+            "description": "This is the authentication session for the credential.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Oauth2AuthenticationSession"
+              }
+            ]
           },
           "name": {
             "type": "string",
@@ -29775,47 +40545,22 @@
         },
         "required": [
           "provider",
-          "awsAccessKeyId",
-          "awsSecretAccessKey",
-          "region",
-          "s3BucketName",
-          "s3PathPrefix",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "authenticationSession"
         ]
       },
-      "SmallestAICredential": {
+      "CreateInworldCredentialDTO": {
         "type": "object",
         "properties": {
           "provider": {
             "type": "string",
             "enum": [
-              "smallest-ai"
+              "inworld"
             ]
           },
           "apiKey": {
             "type": "string",
-            "description": "This is not returned in the API."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "This is the Inworld Basic (Base64) authentication token. This is not returned in the API.",
+            "example": "your-base64-token-here"
           },
           "name": {
             "type": "string",
@@ -29826,43 +40571,47 @@
         },
         "required": [
           "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "apiKey"
         ]
       },
-      "SpeechmaticsCredential": {
+      "UpdateAnthropicCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "speechmatics"
-            ]
-          },
           "apiKey": {
             "type": "string",
+            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
-          "id": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateAnyscaleCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "createdAt": {
-            "format": "date-time",
+          "name": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateAssemblyAICredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
@@ -29870,43 +40619,53 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "SupabaseCredential": {
+      "UpdateAzureCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
+          "service": {
             "type": "string",
+            "description": "This is the service being used in Azure.",
             "enum": [
-              "supabase"
+              "speech",
+              "blob_storage"
             ],
-            "description": "This is for supabase storage."
-          },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the credential."
+            "default": "speech"
           },
-          "orgId": {
+          "region": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "This is the region of the Azure resource.",
+            "enum": [
+              "australia",
+              "canadaeast",
+              "canadacentral",
+              "eastus2",
+              "eastus",
+              "france",
+              "india",
+              "japaneast",
+              "japanwest",
+              "uaenorth",
+              "northcentralus",
+              "norway",
+              "southcentralus",
+              "swedencentral",
+              "switzerland",
+              "uk",
+              "westus",
+              "westus3"
+            ]
           },
-          "createdAt": {
-            "format": "date-time",
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
+            "description": "This is not returned in the API.",
+            "maxLength": 10000
           },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+          "fallbackIndex": {
+            "type": "number",
+            "minimum": 1,
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order."
           },
           "name": {
             "type": "string",
@@ -29915,47 +40674,156 @@
             "maxLength": 40
           },
           "bucketPlan": {
-            "$ref": "#/components/schemas/SupabaseBucketPlan"
+            "description": "This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/AzureBlobStorageBucketPlan"
+              }
+            ]
           }
-        },
-        "required": [
-          "provider",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "TavusCredential": {
+      "UpdateAzureOpenAICredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
+          "region": {
             "type": "string",
             "enum": [
-              "tavus"
+              "australia",
+              "canadaeast",
+              "canadacentral",
+              "eastus2",
+              "eastus",
+              "france",
+              "india",
+              "japaneast",
+              "japanwest",
+              "uaenorth",
+              "northcentralus",
+              "norway",
+              "southcentralus",
+              "swedencentral",
+              "switzerland",
+              "uk",
+              "westus",
+              "westus3"
             ]
           },
-          "apiKey": {
+          "models": {
+            "type": "array",
+            "enum": [
+              "gpt-4.1-2025-04-14",
+              "gpt-4.1-mini-2025-04-14",
+              "gpt-4.1-nano-2025-04-14",
+              "gpt-4o-2024-11-20",
+              "gpt-4o-2024-08-06",
+              "gpt-4o-2024-05-13",
+              "gpt-4o-mini-2024-07-18",
+              "gpt-4-turbo-2024-04-09",
+              "gpt-4-0125-preview",
+              "gpt-4-1106-preview",
+              "gpt-4-0613",
+              "gpt-35-turbo-0125",
+              "gpt-35-turbo-1106"
+            ],
+            "example": [
+              "gpt-4-0125-preview",
+              "gpt-4-0613"
+            ],
+            "items": {
+              "type": "string",
+              "enum": [
+                "gpt-4.1-2025-04-14",
+                "gpt-4.1-mini-2025-04-14",
+                "gpt-4.1-nano-2025-04-14",
+                "gpt-4o-2024-11-20",
+                "gpt-4o-2024-08-06",
+                "gpt-4o-2024-05-13",
+                "gpt-4o-mini-2024-07-18",
+                "gpt-4-turbo-2024-04-09",
+                "gpt-4-0125-preview",
+                "gpt-4-1106-preview",
+                "gpt-4-0613",
+                "gpt-35-turbo-0125",
+                "gpt-35-turbo-1106"
+              ]
+            }
+          },
+          "openAIKey": {
             "type": "string",
+            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
-          "id": {
+          "ocpApimSubscriptionKey": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
+            "description": "This is not returned in the API."
           },
-          "orgId": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           },
-          "createdAt": {
-            "format": "date-time",
+          "openAIEndpoint": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
+            "maxLength": 10000
+          }
+        }
+      },
+      "UpdateByoSipTrunkCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           },
-          "updatedAt": {
-            "format": "date-time",
+          "gateways": {
+            "description": "This is the list of SIP trunk's gateways.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/SipTrunkGateway"
+            }
+          },
+          "outboundAuthenticationPlan": {
+            "description": "This can be used to configure the outbound authentication if required by the SIP trunk.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SipTrunkOutboundAuthenticationPlan"
+              }
+            ]
+          },
+          "outboundLeadingPlusEnabled": {
+            "type": "boolean",
+            "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false"
+          },
+          "techPrefix": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.",
+            "maxLength": 10000
+          },
+          "sipDiversionHeader": {
+            "type": "string",
+            "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.",
+            "maxLength": 10000
+          },
+          "sbcConfiguration": {
+            "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SbcConfiguration"
+              }
+            ]
+          }
+        }
+      },
+      "UpdateCartesiaCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
+            "type": "string",
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
@@ -29963,93 +40831,109 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "TogetherAICredential": {
+      "UpdateCerebrasCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "together-ai"
-            ]
-          },
           "apiKey": {
             "type": "string",
+            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
-          "id": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateCloudflareCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "accountId": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "Cloudflare Account Id."
           },
-          "createdAt": {
-            "format": "date-time",
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
+            "description": "Cloudflare API Key / Token."
           },
-          "updatedAt": {
-            "format": "date-time",
+          "accountEmail": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "Cloudflare Account Email."
+          },
+          "fallbackIndex": {
+            "type": "number",
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.",
+            "minimum": 1
           },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
+          },
+          "bucketPlan": {
+            "description": "This is the bucket plan that can be provided to store call artifacts in R2",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CloudflareR2BucketPlan"
+              }
+            ]
           }
-        },
-        "required": [
-          "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "TrieveCredential": {
+      "UpdateCustomLLMCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
+          "apiKey": {
             "type": "string",
-            "enum": [
-              "trieve"
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
+          },
+          "authenticationPlan": {
+            "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
+              }
             ]
           },
+          "name": {
+            "type": "string",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateDeepgramCredentialDTO": {
+        "type": "object",
+        "properties": {
           "apiKey": {
             "type": "string",
             "description": "This is not returned in the API."
           },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           },
-          "createdAt": {
-            "format": "date-time",
+          "apiUrl": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
+            "description": "This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com."
+          }
+        }
+      },
+      "UpdateDeepInfraCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
@@ -30057,172 +40941,92 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "TwilioCredential": {
+      "UpdateDeepSeekCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "twilio"
-            ]
-          },
-          "authToken": {
+          "apiKey": {
             "type": "string",
             "description": "This is not returned in the API."
           },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
-          },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "accountSid": {
-            "type": "string"
           }
-        },
-        "required": [
-          "provider",
-          "authToken",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "accountSid"
-        ]
+        }
       },
-      "VonageCredential": {
+      "UpdateElevenLabsCredentialDTO": {
         "type": "object",
         "properties": {
-          "vonageApplicationPrivateKey": {
-            "type": "string",
-            "description": "This is not returned in the API.",
-            "maxLength": 10000
-          },
-          "provider": {
-            "type": "string",
-            "enum": [
-              "vonage"
-            ]
-          },
-          "apiSecret": {
+          "apiKey": {
             "type": "string",
+            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
-          "id": {
-            "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
-          },
-          "vonageApplicationId": {
-            "type": "string",
-            "description": "This is the Vonage Application ID for the credential.\n\nOnly relevant for Vonage credentials.",
-            "maxLength": 10000
-          },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "apiKey": {
-            "type": "string"
           }
-        },
-        "required": [
-          "vonageApplicationPrivateKey",
-          "provider",
-          "apiSecret",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "vonageApplicationId",
-          "apiKey"
-        ]
+        }
       },
-      "WebhookCredential": {
+      "UpdateGcpCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
+          "fallbackIndex": {
+            "type": "number",
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order.",
+            "minimum": 1
+          },
+          "name": {
             "type": "string",
-            "enum": [
-              "webhook"
-            ]
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
           },
-          "authenticationPlan": {
-            "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749.",
+          "gcpKey": {
+            "description": "This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details/<service-account-id>/keys.\n\nThe schema is identical to the JSON that GCP outputs.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
+                "$ref": "#/components/schemas/GcpKey"
               }
             ]
           },
-          "id": {
+          "region": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
+            "description": "This is the region of the GCP resource.",
+            "maxLength": 40
           },
-          "orgId": {
+          "bucketPlan": {
+            "$ref": "#/components/schemas/BucketPlan"
+          }
+        }
+      },
+      "UpdateGladiaCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "This is not returned in the API."
           },
-          "createdAt": {
-            "format": "date-time",
+          "name": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateGoHighLevelCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
-          },
-          "authenticationSession": {
-            "description": "This is the authentication session for the credential. Available for credentials that have an authentication plan.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Oauth2AuthenticationSession"
-              }
-            ]
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
@@ -30230,49 +41034,46 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "authenticationPlan",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt",
-          "authenticationSession"
-        ]
+        }
       },
-      "XAiCredential": {
+      "UpdateGoogleCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the api key for Grok in XAi's console. Get it from here: https://console.x.ai",
-            "enum": [
-              "xai"
-            ]
-          },
           "apiKey": {
             "type": "string",
             "maxLength": 10000,
             "description": "This is not returned in the API."
           },
-          "id": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateGroqCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "This is not returned in the API."
           },
-          "createdAt": {
-            "format": "date-time",
+          "name": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateHumeCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
@@ -30280,42 +41081,38 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "GoogleCalendarOAuth2ClientCredential": {
+      "UpdateInflectionAICredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
+          "apiKey": {
             "type": "string",
-            "enum": [
-              "google.calendar.oauth2-client"
-            ]
+            "maxLength": 10000,
+            "description": "This is not returned in the API."
           },
-          "id": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateLangfuseCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "publicKey": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "The public key for Langfuse project. Eg: pk-lf-..."
           },
-          "createdAt": {
-            "format": "date-time",
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
+            "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API."
           },
-          "updatedAt": {
-            "format": "date-time",
+          "apiUrl": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com"
           },
           "name": {
             "type": "string",
@@ -30323,45 +41120,37 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "GoogleCalendarOAuth2AuthorizationCredential": {
+      "UpdateLmntCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "google.calendar.oauth2-authorization"
-            ]
-          },
-          "authorizationId": {
+          "apiKey": {
             "type": "string",
-            "description": "The authorization ID for the OAuth2 authorization"
+            "description": "This is not returned in the API."
           },
-          "id": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateMakeCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "teamId": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "Team ID"
           },
-          "createdAt": {
-            "format": "date-time",
+          "region": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
+            "description": "Region of your application. For example: eu1, eu2, us1, us2"
           },
-          "updatedAt": {
-            "format": "date-time",
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
@@ -30369,46 +41158,45 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "authorizationId",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "GoogleSheetsOAuth2AuthorizationCredential": {
+      "UpdateMistralCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "google.sheets.oauth2-authorization"
-            ]
-          },
-          "authorizationId": {
+          "apiKey": {
             "type": "string",
-            "description": "The authorization ID for the OAuth2 authorization"
+            "maxLength": 100,
+            "description": "This is not returned in the API."
           },
-          "id": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateNeuphonicCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "This is not returned in the API."
           },
-          "createdAt": {
-            "format": "date-time",
+          "name": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdateOpenAICredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
@@ -30416,75 +41204,61 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "authorizationId",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "SlackOAuth2AuthorizationCredential": {
+      "UpdateOpenRouterCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "slack.oauth2-authorization"
-            ]
-          },
-          "authorizationId": {
+          "apiKey": {
             "type": "string",
-            "description": "The authorization ID for the OAuth2 authorization"
+            "description": "This is not returned in the API."
           },
-          "id": {
+          "name": {
             "type": "string",
-            "description": "This is the unique identifier for the credential."
-          },
-          "orgId": {
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdatePerplexityAICredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the unique identifier for the org that this credential belongs to."
+            "description": "This is not returned in the API."
           },
-          "createdAt": {
-            "format": "date-time",
+          "name": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the credential was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
+            "description": "This is the name of credential. This is just for your reference.",
+            "minLength": 1,
+            "maxLength": 40
+          }
+        }
+      },
+      "UpdatePlayHTCredentialDTO": {
+        "type": "object",
+        "properties": {
+          "apiKey": {
             "type": "string",
-            "description": "This is the ISO 8601 date-time string of when the assistant was last updated."
+            "description": "This is not returned in the API."
           },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
+          },
+          "userId": {
+            "type": "string"
           }
-        },
-        "required": [
-          "provider",
-          "authorizationId",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
-        ]
+        }
       },
-      "CreateCerebrasCredentialDTO": {
+      "UpdateRimeAICredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "cerebras"
-            ]
-          },
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
           "name": {
@@ -30493,25 +41267,13 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
+        }
       },
-      "CreateGoogleCredentialDTO": {
+      "UpdateRunpodCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey",
-            "enum": [
-              "google"
-            ]
-          },
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
           "name": {
@@ -30520,25 +41282,35 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
+        }
       },
-      "CreateHumeCredentialDTO": {
+      "UpdateS3CredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
+          "awsAccessKeyId": {
             "type": "string",
-            "enum": [
-              "hume"
-            ]
+            "description": "AWS access key ID."
           },
-          "apiKey": {
+          "awsSecretAccessKey": {
             "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+            "description": "AWS access key secret. This is not returned in the API."
+          },
+          "region": {
+            "type": "string",
+            "description": "AWS region in which the S3 bucket is located."
+          },
+          "s3BucketName": {
+            "type": "string",
+            "description": "AWS S3 bucket name."
+          },
+          "s3PathPrefix": {
+            "type": "string",
+            "description": "The path prefix for the uploaded recording. Ex. \"recordings/\""
+          },
+          "fallbackIndex": {
+            "type": "number",
+            "minimum": 1,
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order."
           },
           "name": {
             "type": "string",
@@ -30546,25 +41318,13 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
+        }
       },
-      "CreateInflectionAICredentialDTO": {
+      "UpdateSmallestAICredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "description": "This is the api key for Pi in InflectionAI's console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup",
-            "enum": [
-              "inflection-ai"
-            ]
-          },
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
           "name": {
@@ -30573,24 +41333,13 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
+        }
       },
-      "CreateMistralCredentialDTO": {
+      "UpdateSpeechmaticsCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "mistral"
-            ]
-          },
           "apiKey": {
             "type": "string",
-            "maxLength": 100,
             "description": "This is not returned in the API."
           },
           "name": {
@@ -30599,46 +41348,30 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
+        }
       },
-      "CreateNeuphonicCredentialDTO": {
+      "UpdateSupabaseCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "neuphonic"
-            ]
-          },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "fallbackIndex": {
+            "type": "number",
+            "minimum": 1,
+            "description": "This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order."
           },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
+          },
+          "bucketPlan": {
+            "$ref": "#/components/schemas/SupabaseBucketPlan"
           }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
+        }
       },
-      "CreateSpeechmaticsCredentialDTO": {
+      "UpdateTavusCredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "speechmatics"
-            ]
-          },
           "apiKey": {
             "type": "string",
             "description": "This is not returned in the API."
@@ -30649,21 +41382,11 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
+        }
       },
-      "CreateTrieveCredentialDTO": {
+      "UpdateTogetherAICredentialDTO": {
         "type": "object",
         "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "trieve"
-            ]
-          },
           "apiKey": {
             "type": "string",
             "description": "This is not returned in the API."
@@ -30674,18 +41397,13 @@
             "minLength": 1,
             "maxLength": 40
           }
-        },
-        "required": [
-          "provider",
-          "apiKey"
-        ]
+        }
       },
-      "UpdateAnthropicCredentialDTO": {
+      "UpdateTrieveCredentialDTO": {
         "type": "object",
         "properties": {
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
             "description": "This is not returned in the API."
           },
           "name": {
@@ -30696,12 +41414,19 @@
           }
         }
       },
-      "UpdateAnyscaleCredentialDTO": {
+      "UpdateTwilioCredentialDTO": {
         "type": "object",
         "properties": {
+          "authToken": {
+            "type": "string",
+            "description": "This is not returned in the API."
+          },
           "apiKey": {
             "type": "string",
-            "maxLength": 10000,
+            "description": "This is not returned in the API."
+          },
+          "apiSecret": {
+            "type": "string",
             "description": "This is not returned in the API."
           },
           "name": {
@@ -30709,13 +41434,16 @@
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
+          },
+          "accountSid": {
+            "type": "string"
           }
         }
       },
-      "UpdateAssemblyAICredentialDTO": {
+      "UpdateVonageCredentialDTO": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "apiSecret": {
             "type": "string",
             "description": "This is not returned in the API."
           },
@@ -30724,148 +41452,58 @@
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
+          },
+          "apiKey": {
+            "type": "string"
           }
         }
       },
-      "UpdateAzureCredentialDTO": {
+      "UpdateWebhookCredentialDTO": {
         "type": "object",
         "properties": {
-          "service": {
-            "type": "string",
-            "description": "This is the service being used in Azure.",
-            "enum": [
-              "speech",
-              "blob_storage"
+          "authenticationPlan": {
+            "description": "This is the authentication plan. Supports OAuth2 RFC 6749 and HMAC signing.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
+              },
+              {
+                "$ref": "#/components/schemas/HMACAuthenticationPlan"
+              }
             ],
-            "default": "speech"
-          },
-          "region": {
-            "type": "string",
-            "description": "This is the region of the Azure resource.",
-            "enum": [
-              "australia",
-              "canadaeast",
-              "canadacentral",
-              "eastus2",
-              "eastus",
-              "france",
-              "india",
-              "japaneast",
-              "japanwest",
-              "uaenorth",
-              "northcentralus",
-              "norway",
-              "southcentralus",
-              "swedencentral",
-              "switzerland",
-              "uk",
-              "westus",
-              "westus3"
-            ]
-          },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API.",
-            "maxLength": 10000
+            "discriminator": {
+              "propertyName": "type",
+              "mapping": {
+                "oauth2": "#/components/schemas/OAuth2AuthenticationPlan",
+                "hmac": "#/components/schemas/HMACAuthenticationPlan"
+              }
+            }
           },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "bucketPlan": {
-            "description": "This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/AzureBlobStorageBucketPlan"
-              }
-            ]
           }
         }
       },
-      "UpdateAzureOpenAICredentialDTO": {
+      "UpdateXAiCredentialDTO": {
         "type": "object",
         "properties": {
-          "region": {
-            "type": "string",
-            "enum": [
-              "australia",
-              "canadaeast",
-              "canadacentral",
-              "eastus2",
-              "eastus",
-              "france",
-              "india",
-              "japaneast",
-              "japanwest",
-              "uaenorth",
-              "northcentralus",
-              "norway",
-              "southcentralus",
-              "swedencentral",
-              "switzerland",
-              "uk",
-              "westus",
-              "westus3"
-            ]
-          },
-          "models": {
-            "type": "array",
-            "enum": [
-              "gpt-4o-2024-11-20",
-              "gpt-4o-2024-08-06",
-              "gpt-4o-mini-2024-07-18",
-              "gpt-4o-2024-05-13",
-              "gpt-4-turbo-2024-04-09",
-              "gpt-4-0125-preview",
-              "gpt-4-1106-preview",
-              "gpt-4-0613",
-              "gpt-35-turbo-0125",
-              "gpt-35-turbo-1106"
-            ],
-            "example": [
-              "gpt-4-0125-preview",
-              "gpt-4-0613"
-            ],
-            "items": {
-              "type": "string",
-              "enum": [
-                "gpt-4o-2024-11-20",
-                "gpt-4o-2024-08-06",
-                "gpt-4o-mini-2024-07-18",
-                "gpt-4o-2024-05-13",
-                "gpt-4-turbo-2024-04-09",
-                "gpt-4-0125-preview",
-                "gpt-4-1106-preview",
-                "gpt-4-0613",
-                "gpt-35-turbo-0125",
-                "gpt-35-turbo-1106"
-              ]
-            }
-          },
-          "openAIKey": {
+          "apiKey": {
             "type": "string",
             "maxLength": 10000,
             "description": "This is not returned in the API."
           },
-          "ocpApimSubscriptionKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
-          },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "openAIEndpoint": {
-            "type": "string",
-            "maxLength": 10000
           }
         }
       },
-      "UpdateByoSipTrunkCredentialDTO": {
+      "UpdateGoogleCalendarOAuth2ClientCredentialDTO": {
         "type": "object",
         "properties": {
           "name": {
@@ -30873,52 +41511,15 @@
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "gateways": {
-            "description": "This is the list of SIP trunk's gateways.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/SipTrunkGateway"
-            }
-          },
-          "outboundAuthenticationPlan": {
-            "description": "This can be used to configure the outbound authentication if required by the SIP trunk.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SipTrunkOutboundAuthenticationPlan"
-              }
-            ]
-          },
-          "outboundLeadingPlusEnabled": {
-            "type": "boolean",
-            "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false"
-          },
-          "techPrefix": {
-            "type": "string",
-            "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.",
-            "maxLength": 10000
-          },
-          "sipDiversionHeader": {
-            "type": "string",
-            "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.",
-            "maxLength": 10000
-          },
-          "sbcConfiguration": {
-            "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/SbcConfiguration"
-              }
-            ]
           }
         }
       },
-      "UpdateCartesiaCredentialDTO": {
+      "UpdateGoogleCalendarOAuth2AuthorizationCredentialDTO": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "authorizationId": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The authorization ID for the OAuth2 authorization"
           },
           "name": {
             "type": "string",
@@ -30928,13 +41529,12 @@
           }
         }
       },
-      "UpdateCerebrasCredentialDTO": {
+      "UpdateGoogleSheetsOAuth2AuthorizationCredentialDTO": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "authorizationId": {
             "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+            "description": "The authorization ID for the OAuth2 authorization"
           },
           "name": {
             "type": "string",
@@ -30944,50 +41544,29 @@
           }
         }
       },
-      "UpdateCloudflareCredentialDTO": {
+      "UpdateSlackOAuth2AuthorizationCredentialDTO": {
         "type": "object",
         "properties": {
-          "accountId": {
-            "type": "string",
-            "description": "Cloudflare Account Id."
-          },
-          "apiKey": {
-            "type": "string",
-            "description": "Cloudflare API Key / Token."
-          },
-          "accountEmail": {
+          "authorizationId": {
             "type": "string",
-            "description": "Cloudflare Account Email."
+            "description": "The authorization ID for the OAuth2 authorization"
           },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
-          },
-          "bucketPlan": {
-            "description": "This is the bucket plan that can be provided to store call artifacts in R2",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/CloudflareR2BucketPlan"
-              }
-            ]
           }
         }
       },
-      "UpdateCustomLLMCredentialDTO": {
+      "UpdateGoHighLevelMCPCredentialDTO": {
         "type": "object",
         "properties": {
-          "apiKey": {
-            "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
-          },
-          "authenticationPlan": {
-            "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey",
+          "authenticationSession": {
+            "description": "This is the authentication session for the credential.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
+                "$ref": "#/components/schemas/Oauth2AuthenticationSession"
               }
             ]
           },
@@ -30999,1044 +41578,1641 @@
           }
         }
       },
-      "UpdateDeepgramCredentialDTO": {
+      "UpdateInworldCredentialDTO": {
         "type": "object",
         "properties": {
           "apiKey": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the Inworld Basic (Base64) authentication token. This is not returned in the API.",
+            "example": "your-base64-token-here"
           },
           "name": {
             "type": "string",
             "description": "This is the name of credential. This is just for your reference.",
             "minLength": 1,
             "maxLength": 40
+          }
+        }
+      },
+      "CredentialSessionResponse": {
+        "type": "object",
+        "properties": {
+          "sessionToken": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "sessionToken"
+        ]
+      },
+      "CredentialEndUser": {
+        "type": "object",
+        "properties": {
+          "endUserId": {
+            "type": "string"
           },
-          "apiUrl": {
+          "organizationId": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "endUserId",
+          "organizationId"
+        ]
+      },
+      "CredentialSessionError": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string"
+          },
+          "description": {
+            "type": "string"
+          }
+        },
+        "required": [
+          "type",
+          "description"
+        ]
+      },
+      "CredentialWebhookDTO": {
+        "type": "object",
+        "properties": {
+          "type": {
             "type": "string",
-            "description": "This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com."
+            "enum": [
+              "auth",
+              "sync",
+              "forward"
+            ]
+          },
+          "operation": {
+            "type": "string",
+            "enum": [
+              "creation",
+              "override",
+              "refresh"
+            ]
+          },
+          "from": {
+            "type": "string"
+          },
+          "connectionId": {
+            "type": "string"
+          },
+          "authMode": {
+            "type": "string",
+            "enum": [
+              "OAUTH2",
+              "API_KEY",
+              "BASIC"
+            ]
+          },
+          "providerConfigKey": {
+            "type": "string"
+          },
+          "provider": {
+            "type": "string"
+          },
+          "environment": {
+            "type": "string"
+          },
+          "success": {
+            "type": "boolean"
+          },
+          "endUser": {
+            "$ref": "#/components/schemas/CredentialEndUser"
+          },
+          "error": {
+            "$ref": "#/components/schemas/CredentialSessionError"
+          }
+        },
+        "required": [
+          "type",
+          "operation",
+          "from",
+          "connectionId",
+          "authMode",
+          "providerConfigKey",
+          "provider",
+          "environment",
+          "success",
+          "endUser"
+        ]
+      },
+      "CredentialActionRequest": {
+        "type": "object",
+        "properties": {
+          "action_name": {
+            "type": "string"
+          },
+          "input": {
+            "type": "object"
+          }
+        },
+        "required": [
+          "action_name",
+          "input"
+        ]
+      },
+      "HMACAuthenticationPlan": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "enum": [
+              "hmac"
+            ]
+          },
+          "secretKey": {
+            "type": "string",
+            "description": "This is the HMAC secret key used to sign requests."
+          },
+          "algorithm": {
+            "type": "string",
+            "enum": [
+              "sha256",
+              "sha512",
+              "sha1"
+            ],
+            "description": "This is the HMAC algorithm to use for signing."
+          },
+          "signatureHeader": {
+            "type": "string",
+            "description": "This is the header name where the signature will be sent. Defaults to 'x-signature'."
+          },
+          "timestampHeader": {
+            "type": "string",
+            "description": "This is the header name where the timestamp will be sent. Defaults to 'x-timestamp'."
+          },
+          "signaturePrefix": {
+            "type": "string",
+            "description": "This is the prefix for the signature. For example, 'sha256=' for GitHub-style signatures."
+          },
+          "includeTimestamp": {
+            "type": "boolean",
+            "description": "Whether to include a timestamp in the signature payload. Defaults to true."
+          },
+          "payloadFormat": {
+            "type": "string",
+            "description": "Custom payload format. Use {body} for request body, {timestamp} for timestamp, {method} for HTTP method, {url} for URL, {svix-id} for unique message ID. Defaults to '{timestamp}.{body}'."
+          },
+          "messageIdHeader": {
+            "type": "string",
+            "description": "This is the header name where the unique message ID will be sent. Used for Svix-style webhooks."
+          },
+          "signatureEncoding": {
+            "type": "string",
+            "enum": [
+              "hex",
+              "base64"
+            ],
+            "description": "The encoding format for the signature. Defaults to 'hex'."
+          },
+          "secretIsBase64": {
+            "type": "boolean",
+            "description": "Whether the secret key is base64-encoded and should be decoded before use. Defaults to false."
+          }
+        },
+        "required": [
+          "type",
+          "secretKey",
+          "algorithm"
+        ]
+      },
+      "CredentialSessionDTO": {
+        "type": "object",
+        "properties": {
+          "provider": {
+            "type": "string",
+            "enum": [
+              "google.calendar.oauth2-client",
+              "google.calendar.oauth2-authorization",
+              "google.sheets.oauth2-authorization",
+              "slack.oauth2-authorization"
+            ],
+            "description": "The type of credential to generate a session for. Only Nango user-facing providers are supported."
+          }
+        },
+        "required": [
+          "provider"
+        ]
+      },
+      "ToolTemplateSetup": {
+        "type": "object",
+        "properties": {
+          "title": {
+            "type": "string"
+          },
+          "description": {
+            "type": "string"
+          },
+          "videoUrl": {
+            "type": "string"
+          },
+          "docsUrl": {
+            "type": "string"
           }
-        }
+        },
+        "required": [
+          "title"
+        ]
       },
-      "UpdateDeepInfraCredentialDTO": {
+      "MakeToolProviderDetails": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "templateUrl": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
           },
-          "name": {
+          "setupInstructions": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ToolTemplateSetup"
+            }
+          },
+          "type": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "make"
+            ],
+            "description": "The type of tool. \"make\" for Make tool."
+          },
+          "scenarioId": {
+            "type": "number"
+          },
+          "scenarioName": {
+            "type": "string"
+          },
+          "triggerHookId": {
+            "type": "number"
+          },
+          "triggerHookName": {
+            "type": "string"
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateDeepSeekCredentialDTO": {
+      "GhlToolProviderDetails": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "templateUrl": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
           },
-          "name": {
+          "setupInstructions": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ToolTemplateSetup"
+            }
+          },
+          "type": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "ghl"
+            ],
+            "description": "The type of tool. \"ghl\" for GHL tool."
+          },
+          "workflowId": {
+            "type": "string"
+          },
+          "workflowName": {
+            "type": "string"
+          },
+          "webhookHookId": {
+            "type": "string"
+          },
+          "webhookHookName": {
+            "type": "string"
+          },
+          "locationId": {
+            "type": "string"
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateElevenLabsCredentialDTO": {
+      "FunctionToolProviderDetails": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "templateUrl": {
             "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
           },
-          "name": {
+          "setupInstructions": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ToolTemplateSetup"
+            }
+          },
+          "type": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "function"
+            ],
+            "description": "The type of tool. \"function\" for Function tool."
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateGcpCredentialDTO": {
+      "GoogleCalendarCreateEventToolProviderDetails": {
         "type": "object",
         "properties": {
-          "name": {
+          "templateUrl": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
           },
-          "gcpKey": {
-            "description": "This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details/<service-account-id>/keys.\n\nThe schema is identical to the JSON that GCP outputs.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/GcpKey"
-              }
-            ]
+          "setupInstructions": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ToolTemplateSetup"
+            }
           },
-          "bucketPlan": {
-            "description": "This is the bucket plan that can be provided to store call artifacts in GCP.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/BucketPlan"
-              }
-            ]
+          "type": {
+            "type": "string",
+            "enum": [
+              "google.calendar.event.create"
+            ],
+            "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool."
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateGladiaCredentialDTO": {
+      "GoogleSheetsRowAppendToolProviderDetails": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "templateUrl": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
           },
-          "name": {
+          "setupInstructions": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ToolTemplateSetup"
+            }
+          },
+          "type": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "google.sheets.row.append"
+            ],
+            "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool."
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateGoHighLevelCredentialDTO": {
+      "GoHighLevelCalendarAvailabilityToolProviderDetails": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "templateUrl": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
           },
-          "name": {
+          "setupInstructions": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ToolTemplateSetup"
+            }
+          },
+          "type": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "gohighlevel.calendar.availability.check"
+            ],
+            "description": "The type of tool. \"gohighlevel.calendar.availability.check\" for GoHighLevel Calendar availability check tool."
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateGoogleCredentialDTO": {
+      "GoHighLevelCalendarEventCreateToolProviderDetails": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "templateUrl": {
             "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
           },
-          "name": {
+          "setupInstructions": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ToolTemplateSetup"
+            }
+          },
+          "type": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "gohighlevel.calendar.event.create"
+            ],
+            "description": "The type of tool. \"gohighlevel.calendar.event.create\" for GoHighLevel Calendar event create tool."
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateGroqCredentialDTO": {
+      "GoHighLevelContactCreateToolProviderDetails": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "templateUrl": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
           },
-          "name": {
+          "setupInstructions": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ToolTemplateSetup"
+            }
+          },
+          "type": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "gohighlevel.contact.create"
+            ],
+            "description": "The type of tool. \"gohighlevel.contact.create\" for GoHighLevel contact create tool."
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateHumeCredentialDTO": {
+      "GoHighLevelContactGetToolProviderDetails": {
         "type": "object",
         "properties": {
-          "apiKey": {
+          "templateUrl": {
             "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
           },
-          "name": {
+          "setupInstructions": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ToolTemplateSetup"
+            }
+          },
+          "type": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "gohighlevel.contact.get"
+            ],
+            "description": "The type of tool. \"gohighlevel.contact.get\" for GoHighLevel contact get tool."
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateInflectionAICredentialDTO": {
+      "ToolTemplateMetadata": {
         "type": "object",
         "properties": {
-          "apiKey": {
-            "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+          "collectionType": {
+            "type": "string"
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "collectionId": {
+            "type": "string"
+          },
+          "collectionName": {
+            "type": "string"
           }
         }
       },
-      "UpdateLangfuseCredentialDTO": {
+      "CreateToolTemplateDTO": {
         "type": "object",
         "properties": {
-          "publicKey": {
-            "type": "string",
-            "description": "The public key for Langfuse project. Eg: pk-lf-..."
+          "details": {
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                "title": "ApiRequestTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateBashToolDTO",
+                "title": "BashTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateComputerToolDTO",
+                "title": "ComputerTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                "title": "DtmfTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                "title": "EndCallTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                "title": "FunctionTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                "title": "GoHighLevelCalendarAvailabilityTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                "title": "GoHighLevelCalendarEventCreateTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                "title": "GoHighLevelContactCreateTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                "title": "GoHighLevelContactGetTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                "title": "GoogleCalendarCheckAvailabilityTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                "title": "GoogleCalendarCreateEventTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                "title": "GoogleSheetsRowAppendTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateMcpToolDTO",
+                "title": "McpTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateQueryToolDTO",
+                "title": "QueryTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                "title": "SlackSendMessageTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateSmsToolDTO",
+                "title": "SmsTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                "title": "TextEditorTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                "title": "TransferCallTool"
+              }
+            ]
           },
-          "apiKey": {
+          "providerDetails": {
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/MakeToolProviderDetails",
+                "title": "MakeToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GhlToolProviderDetails",
+                "title": "GhlToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/FunctionToolProviderDetails",
+                "title": "FunctionToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleCalendarCreateEventToolProviderDetails",
+                "title": "GoogleCalendarCreateEventToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleSheetsRowAppendToolProviderDetails",
+                "title": "GoogleSheetsRowAppendToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelCalendarAvailabilityToolProviderDetails",
+                "title": "GoHighLevelCalendarAvailabilityToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelCalendarEventCreateToolProviderDetails",
+                "title": "GoHighLevelCalendarEventCreateToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelContactCreateToolProviderDetails",
+                "title": "GoHighLevelContactCreateToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelContactGetToolProviderDetails",
+                "title": "GoHighLevelContactGetToolProviderDetails"
+              }
+            ]
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/ToolTemplateMetadata"
+          },
+          "visibility": {
             "type": "string",
-            "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API."
+            "default": "private",
+            "enum": [
+              "public",
+              "private"
+            ]
           },
-          "apiUrl": {
+          "type": {
             "type": "string",
-            "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com"
+            "default": "tool",
+            "enum": [
+              "tool"
+            ]
           },
           "name": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
+            "description": "The name of the template. This is just for your own reference.",
             "maxLength": 40
-          }
-        }
-      },
-      "UpdateLmntCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
           },
-          "name": {
+          "provider": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "make",
+              "gohighlevel",
+              "function"
+            ]
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateMakeCredentialDTO": {
+      "Template": {
         "type": "object",
         "properties": {
-          "teamId": {
-            "type": "string",
-            "description": "Team ID"
+          "details": {
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                "title": "ApiRequestTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateBashToolDTO",
+                "title": "BashTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateComputerToolDTO",
+                "title": "ComputerTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                "title": "DtmfTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                "title": "EndCallTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                "title": "FunctionTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                "title": "GoHighLevelCalendarAvailabilityTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                "title": "GoHighLevelCalendarEventCreateTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                "title": "GoHighLevelContactCreateTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                "title": "GoHighLevelContactGetTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                "title": "GoogleCalendarCheckAvailabilityTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                "title": "GoogleCalendarCreateEventTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                "title": "GoogleSheetsRowAppendTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateMcpToolDTO",
+                "title": "McpTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateQueryToolDTO",
+                "title": "QueryTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                "title": "SlackSendMessageTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateSmsToolDTO",
+                "title": "SmsTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                "title": "TextEditorTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                "title": "TransferCallTool"
+              }
+            ]
+          },
+          "providerDetails": {
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/MakeToolProviderDetails",
+                "title": "MakeToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GhlToolProviderDetails",
+                "title": "GhlToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/FunctionToolProviderDetails",
+                "title": "FunctionToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleCalendarCreateEventToolProviderDetails",
+                "title": "GoogleCalendarCreateEventToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleSheetsRowAppendToolProviderDetails",
+                "title": "GoogleSheetsRowAppendToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelCalendarAvailabilityToolProviderDetails",
+                "title": "GoHighLevelCalendarAvailabilityToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelCalendarEventCreateToolProviderDetails",
+                "title": "GoHighLevelCalendarEventCreateToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelContactCreateToolProviderDetails",
+                "title": "GoHighLevelContactCreateToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelContactGetToolProviderDetails",
+                "title": "GoHighLevelContactGetToolProviderDetails"
+              }
+            ]
           },
-          "region": {
-            "type": "string",
-            "description": "Region of your application. For example: eu1, eu2, us1, us2"
+          "metadata": {
+            "$ref": "#/components/schemas/ToolTemplateMetadata"
           },
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "visibility": {
+            "default": "private",
+            "enum": [
+              "public",
+              "private"
+            ],
+            "type": "string"
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateMistralCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
+          "type": {
             "type": "string",
-            "maxLength": 100,
-            "description": "This is not returned in the API."
+            "default": "tool",
+            "enum": [
+              "tool"
+            ]
           },
           "name": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
+            "description": "The name of the template. This is just for your own reference.",
             "maxLength": 40
-          }
-        }
-      },
-      "UpdateNeuphonicCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateOpenAICredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "provider": {
+            "enum": [
+              "make",
+              "gohighlevel",
+              "function"
+            ],
+            "type": "string"
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateOpenRouterCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
+          "id": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The unique identifier for the template."
           },
-          "name": {
+          "orgId": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdatePerplexityAICredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
+            "description": "The unique identifier for the organization that this template belongs to."
+          },
+          "createdAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The ISO 8601 date-time string of when the template was created."
           },
-          "name": {
+          "updatedAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "The ISO 8601 date-time string of when the template was last updated."
           }
-        }
+        },
+        "required": [
+          "type",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt"
+        ]
       },
-      "UpdatePlayHTCredentialDTO": {
+      "UpdateToolTemplateDTO": {
         "type": "object",
         "properties": {
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
+          "details": {
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateApiRequestToolDTO",
+                "title": "ApiRequestTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateBashToolDTO",
+                "title": "BashTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateComputerToolDTO",
+                "title": "ComputerTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateDtmfToolDTO",
+                "title": "DtmfTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateEndCallToolDTO",
+                "title": "EndCallTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateFunctionToolDTO",
+                "title": "FunctionTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO",
+                "title": "GoHighLevelCalendarAvailabilityTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO",
+                "title": "GoHighLevelCalendarEventCreateTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO",
+                "title": "GoHighLevelContactCreateTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO",
+                "title": "GoHighLevelContactGetTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO",
+                "title": "GoogleCalendarCheckAvailabilityTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
+                "title": "GoogleCalendarCreateEventTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
+                "title": "GoogleSheetsRowAppendTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateMcpToolDTO",
+                "title": "McpTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateQueryToolDTO",
+                "title": "QueryTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO",
+                "title": "SlackSendMessageTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateSmsToolDTO",
+                "title": "SmsTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTextEditorToolDTO",
+                "title": "TextEditorTool"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTransferCallToolDTO",
+                "title": "TransferCallTool"
+              }
+            ]
           },
-          "name": {
+          "providerDetails": {
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/MakeToolProviderDetails",
+                "title": "MakeToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GhlToolProviderDetails",
+                "title": "GhlToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/FunctionToolProviderDetails",
+                "title": "FunctionToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleCalendarCreateEventToolProviderDetails",
+                "title": "GoogleCalendarCreateEventToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoogleSheetsRowAppendToolProviderDetails",
+                "title": "GoogleSheetsRowAppendToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelCalendarAvailabilityToolProviderDetails",
+                "title": "GoHighLevelCalendarAvailabilityToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelCalendarEventCreateToolProviderDetails",
+                "title": "GoHighLevelCalendarEventCreateToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelContactCreateToolProviderDetails",
+                "title": "GoHighLevelContactCreateToolProviderDetails"
+              },
+              {
+                "$ref": "#/components/schemas/GoHighLevelContactGetToolProviderDetails",
+                "title": "GoHighLevelContactGetToolProviderDetails"
+              }
+            ]
+          },
+          "metadata": {
+            "$ref": "#/components/schemas/ToolTemplateMetadata"
+          },
+          "visibility": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "default": "private",
+            "enum": [
+              "public",
+              "private"
+            ]
           },
-          "userId": {
-            "type": "string"
-          }
-        }
-      },
-      "UpdateRimeAICredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
+          "type": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "default": "tool",
+            "enum": [
+              "tool"
+            ]
           },
           "name": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
+            "description": "The name of the template. This is just for your own reference.",
             "maxLength": 40
-          }
-        }
-      },
-      "UpdateRunpodCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
-            "type": "string",
-            "description": "This is not returned in the API."
           },
-          "name": {
+          "provider": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "enum": [
+              "make",
+              "gohighlevel",
+              "function"
+            ]
           }
-        }
+        },
+        "required": [
+          "type"
+        ]
       },
-      "UpdateS3CredentialDTO": {
+      "VoiceLibrary": {
         "type": "object",
         "properties": {
-          "awsAccessKeyId": {
-            "type": "string",
-            "description": "AWS access key ID."
+          "provider": {
+            "type": "object",
+            "description": "This is the voice provider that will be used.",
+            "enum": [
+              "vapi",
+              "11labs",
+              "azure",
+              "cartesia",
+              "custom-voice",
+              "deepgram",
+              "hume",
+              "lmnt",
+              "neuphonic",
+              "openai",
+              "playht",
+              "rime-ai",
+              "smallest-ai",
+              "tavus",
+              "sesame",
+              "inworld",
+              "minimax"
+            ]
           },
-          "awsSecretAccessKey": {
+          "providerId": {
             "type": "string",
-            "description": "AWS access key secret. This is not returned in the API."
+            "description": "The ID of the voice provided by the provider."
           },
-          "region": {
+          "slug": {
             "type": "string",
-            "description": "AWS region in which the S3 bucket is located."
+            "description": "The unique slug of the voice."
           },
-          "s3BucketName": {
+          "name": {
             "type": "string",
-            "description": "AWS S3 bucket name."
+            "description": "The name of the voice."
           },
-          "s3PathPrefix": {
+          "language": {
             "type": "string",
-            "description": "The path prefix for the uploaded recording. Ex. \"recordings/\""
+            "description": "The language of the voice."
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateSmallestAICredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
+          "languageCode": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The language code of the voice."
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateSpeechmaticsCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
+          "model": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The model of the voice."
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateSupabaseCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "name": {
+          "supportedModels": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "The supported models of the voice."
           },
-          "bucketPlan": {
-            "$ref": "#/components/schemas/SupabaseBucketPlan"
-          }
-        }
-      },
-      "UpdateTavusCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
+          "gender": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The gender of the voice.",
+            "enum": [
+              "male",
+              "female"
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateTogetherAICredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
+          "accent": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The accent of the voice."
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateTrieveCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
+          "previewUrl": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The preview URL of the voice."
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateTwilioCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "authToken": {
+          "description": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The description of the voice."
           },
-          "name": {
+          "credentialId": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "The credential ID of the voice."
           },
-          "accountSid": {
-            "type": "string"
-          }
-        }
-      },
-      "UpdateVonageCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiSecret": {
+          "id": {
             "type": "string",
-            "description": "This is not returned in the API."
+            "description": "The unique identifier for the voice library."
           },
-          "name": {
+          "orgId": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "The unique identifier for the organization that this voice library belongs to."
           },
-          "apiKey": {
-            "type": "string"
-          }
-        }
-      },
-      "UpdateWebhookCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "authenticationPlan": {
-            "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OAuth2AuthenticationPlan"
-              }
-            ]
+          "isPublic": {
+            "type": "boolean",
+            "description": "The Public voice is shared accross all the organizations."
           },
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateXAiCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "apiKey": {
+          "isDeleted": {
+            "type": "boolean",
+            "description": "The deletion status of the voice."
+          },
+          "createdAt": {
+            "format": "date-time",
             "type": "string",
-            "maxLength": 10000,
-            "description": "This is not returned in the API."
+            "description": "The ISO 8601 date-time string of when the voice library was created."
           },
-          "name": {
+          "updatedAt": {
+            "format": "date-time",
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "The ISO 8601 date-time string of when the voice library was last updated."
           }
-        }
+        },
+        "required": [
+          "id",
+          "orgId",
+          "isPublic",
+          "isDeleted",
+          "createdAt",
+          "updatedAt"
+        ]
       },
-      "UpdateGoogleCalendarOAuth2ClientCredentialDTO": {
+      "SyncVoiceLibraryDTO": {
         "type": "object",
         "properties": {
-          "name": {
-            "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+          "providers": {
+            "type": "array",
+            "description": "List of providers you want to sync.",
+            "enum": [
+              "vapi",
+              "11labs",
+              "azure",
+              "cartesia",
+              "custom-voice",
+              "deepgram",
+              "hume",
+              "lmnt",
+              "neuphonic",
+              "openai",
+              "playht",
+              "rime-ai",
+              "smallest-ai",
+              "tavus",
+              "sesame",
+              "inworld",
+              "minimax"
+            ],
+            "items": {
+              "type": "string",
+              "enum": [
+                "vapi",
+                "11labs",
+                "azure",
+                "cartesia",
+                "custom-voice",
+                "deepgram",
+                "hume",
+                "lmnt",
+                "neuphonic",
+                "openai",
+                "playht",
+                "rime-ai",
+                "smallest-ai",
+                "tavus",
+                "sesame",
+                "inworld",
+                "minimax"
+              ]
+            }
           }
         }
       },
-      "UpdateGoogleCalendarOAuth2AuthorizationCredentialDTO": {
+      "CreateSesameVoiceDTO": {
         "type": "object",
         "properties": {
-          "authorizationId": {
+          "voiceName": {
             "type": "string",
-            "description": "The authorization ID for the OAuth2 authorization"
+            "description": "The name of the voice."
           },
-          "name": {
+          "transcription": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
+            "description": "The transcript of the utterance."
           }
         }
       },
-      "UpdateGoogleSheetsOAuth2AuthorizationCredentialDTO": {
+      "ElevenLabsPronunciationDictionary": {
         "type": "object",
         "properties": {
-          "authorizationId": {
+          "pronunciationDictionaryId": {
             "type": "string",
-            "description": "The authorization ID for the OAuth2 authorization"
+            "description": "The ID of the pronunciation dictionary",
+            "example": "5xM3yVvZQKV0EfqQpLrJ"
           },
-          "name": {
+          "dictionaryName": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "UpdateSlackOAuth2AuthorizationCredentialDTO": {
-        "type": "object",
-        "properties": {
-          "authorizationId": {
+            "description": "The name of the pronunciation dictionary",
+            "example": "My Dictionary"
+          },
+          "createdBy": {
             "type": "string",
-            "description": "The authorization ID for the OAuth2 authorization"
+            "description": "The user ID of the creator",
+            "example": "ar6633Es2kUjFXBdR1iVc9ztsXl1"
           },
-          "name": {
+          "creationTimeUnix": {
+            "type": "number",
+            "description": "The creation time in Unix timestamp",
+            "example": 1714156800
+          },
+          "versionId": {
             "type": "string",
-            "description": "This is the name of credential. This is just for your reference.",
-            "minLength": 1,
-            "maxLength": 40
-          }
-        }
-      },
-      "CredentialSessionResponse": {
-        "type": "object",
-        "properties": {
-          "sessionToken": {
-            "type": "string"
-          }
-        },
-        "required": [
-          "sessionToken"
-        ]
-      },
-      "CredentialEndUser": {
-        "type": "object",
-        "properties": {
-          "endUserId": {
-            "type": "string"
+            "description": "The version ID of the pronunciation dictionary",
+            "example": "5xM3yVvZQKV0EfqQpLrJ"
           },
-          "organizationId": {
-            "type": "string"
-          }
-        },
-        "required": [
-          "endUserId",
-          "organizationId"
-        ]
-      },
-      "CredentialSessionError": {
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string"
+          "versionRulesNum": {
+            "type": "number",
+            "description": "The number of rules in this version",
+            "example": 5
+          },
+          "permissionOnResource": {
+            "type": "string",
+            "description": "The permission level on this resource",
+            "enum": [
+              "admin",
+              "editor",
+              "viewer"
+            ]
           },
           "description": {
-            "type": "string"
+            "type": "string",
+            "description": "The description of the pronunciation dictionary",
+            "example": "This is a test dictionary"
           }
         },
         "required": [
-          "type",
-          "description"
+          "pronunciationDictionaryId",
+          "dictionaryName",
+          "createdBy",
+          "creationTimeUnix",
+          "versionId",
+          "versionRulesNum"
         ]
       },
-      "CredentialWebhookDTO": {
+      "ProviderResource": {
         "type": "object",
         "properties": {
-          "type": {
+          "id": {
             "type": "string",
-            "enum": [
-              "auth",
-              "sync",
-              "forward"
-            ]
+            "description": "This is the unique identifier for the provider resource."
           },
-          "operation": {
+          "orgId": {
             "type": "string",
-            "enum": [
-              "creation",
-              "override",
-              "refresh"
-            ]
+            "description": "This is the unique identifier for the org that this provider resource belongs to."
           },
-          "from": {
-            "type": "string"
+          "createdAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the provider resource was created."
           },
-          "connectionId": {
-            "type": "string"
+          "updatedAt": {
+            "format": "date-time",
+            "type": "string",
+            "description": "This is the ISO 8601 date-time string of when the provider resource was last updated."
           },
-          "authMode": {
+          "provider": {
             "type": "string",
+            "description": "This is the provider that manages this resource.",
             "enum": [
-              "OAUTH2",
-              "API_KEY",
-              "BASIC"
+              "11labs"
             ]
           },
-          "providerConfigKey": {
-            "type": "string"
-          },
-          "provider": {
-            "type": "string"
-          },
-          "environment": {
-            "type": "string"
-          },
-          "success": {
-            "type": "boolean"
+          "resourceName": {
+            "type": "string",
+            "description": "This is the name/type of the resource.",
+            "enum": [
+              "pronunciation-dictionary"
+            ]
           },
-          "endUser": {
-            "$ref": "#/components/schemas/CredentialEndUser"
+          "resourceId": {
+            "type": "string",
+            "description": "This is the provider-specific identifier for the resource."
           },
-          "error": {
-            "$ref": "#/components/schemas/CredentialSessionError"
+          "resource": {
+            "description": "This is the full resource data from the provider's API.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/ElevenLabsPronunciationDictionary"
+              }
+            ]
           }
         },
         "required": [
-          "type",
-          "operation",
-          "from",
-          "connectionId",
-          "authMode",
-          "providerConfigKey",
+          "id",
+          "orgId",
+          "createdAt",
+          "updatedAt",
           "provider",
-          "environment",
-          "success",
-          "endUser"
+          "resourceName",
+          "resourceId",
+          "resource"
         ]
       },
-      "CredentialActionRequest": {
+      "ProviderResourcePaginatedResponse": {
         "type": "object",
         "properties": {
-          "action_name": {
-            "type": "string"
+          "results": {
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/ProviderResource"
+            }
           },
-          "input": {
-            "type": "object"
-          }
-        },
-        "required": [
-          "action_name",
-          "input"
-        ]
-      },
-      "CredentialSessionDTO": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "string",
-            "enum": [
-              "google.calendar.oauth2-client",
-              "google.calendar.oauth2-authorization",
-              "google.sheets.oauth2-authorization",
-              "slack.oauth2-authorization"
-            ],
-            "description": "The type of credential to generate a session for. Only Nango user-facing providers are supported."
+          "metadata": {
+            "$ref": "#/components/schemas/PaginationMeta"
           }
         },
         "required": [
-          "provider"
+          "results",
+          "metadata"
         ]
       },
-      "ToolTemplateSetup": {
+      "VoiceLibraryVoiceResponse": {
         "type": "object",
         "properties": {
-          "title": {
+          "voiceId": {
             "type": "string"
           },
-          "description": {
+          "name": {
             "type": "string"
           },
-          "videoUrl": {
+          "publicOwnerId": {
             "type": "string"
           },
-          "docsUrl": {
+          "description": {
             "type": "string"
-          }
-        },
-        "required": [
-          "title"
-        ]
-      },
-      "MakeToolProviderDetails": {
-        "type": "object",
-        "properties": {
-          "templateUrl": {
-            "type": "string",
-            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
           },
-          "setupInstructions": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/ToolTemplateSetup"
-            }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "make"
-            ],
-            "description": "The type of tool. \"make\" for Make tool."
-          },
-          "scenarioId": {
-            "type": "number"
-          },
-          "scenarioName": {
+          "gender": {
             "type": "string"
           },
-          "triggerHookId": {
-            "type": "number"
+          "age": {
+            "type": "object"
           },
-          "triggerHookName": {
+          "accent": {
             "type": "string"
           }
         },
         "required": [
-          "type"
+          "voiceId",
+          "name"
         ]
       },
-      "GhlToolProviderDetails": {
+      "AddVoiceToProviderDTO": {
         "type": "object",
         "properties": {
-          "templateUrl": {
+          "ownerId": {
             "type": "string",
-            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
-          },
-          "setupInstructions": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/ToolTemplateSetup"
-            }
+            "description": "This is the owner_id of your shared voice which you want to add to your provider Account from Provider Voice Library"
           },
-          "type": {
+          "voiceId": {
             "type": "string",
-            "enum": [
-              "ghl"
-            ],
-            "description": "The type of tool. \"ghl\" for GHL tool."
-          },
-          "workflowId": {
-            "type": "string"
-          },
-          "workflowName": {
-            "type": "string"
-          },
-          "webhookHookId": {
-            "type": "string"
-          },
-          "webhookHookName": {
-            "type": "string"
+            "description": "This is the voice_id of the shared voice which you want to add to your provider Account from Provider Voice Library"
           },
-          "locationId": {
-            "type": "string"
+          "name": {
+            "type": "string",
+            "description": "This is the new name of the voice which you want to have once you have added voice to your provider Account from Provider Voice Library"
           }
         },
         "required": [
-          "type"
+          "ownerId",
+          "voiceId",
+          "name"
         ]
       },
-      "FunctionToolProviderDetails": {
+      "CloneVoiceDTO": {
         "type": "object",
         "properties": {
-          "templateUrl": {
+          "name": {
             "type": "string",
-            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
-          },
-          "setupInstructions": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/ToolTemplateSetup"
-            }
+            "description": "This is the name of the cloned voice in the provider account."
           },
-          "type": {
+          "description": {
             "type": "string",
-            "enum": [
-              "function"
-            ],
-            "description": "The type of tool. \"function\" for Function tool."
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "GoogleCalendarCreateEventToolProviderDetails": {
-        "type": "object",
-        "properties": {
-          "templateUrl": {
+            "description": "This is the description of your cloned voice."
+          },
+          "labels": {
             "type": "string",
-            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
+            "description": "Serialized labels dictionary for the voice."
           },
-          "setupInstructions": {
+          "files": {
+            "description": "These are the files you want to use to clone your voice. Only Audio files are supported.",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/ToolTemplateSetup"
+              "type": "string",
+              "format": "binary"
             }
-          },
-          "type": {
-            "type": "string",
-            "enum": [
-              "google.calendar.event.create"
-            ],
-            "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool."
           }
         },
         "required": [
-          "type"
+          "name",
+          "files"
         ]
       },
-      "GoogleSheetsRowAppendToolProviderDetails": {
+      "ClientMessageWorkflowNodeStarted": {
         "type": "object",
         "properties": {
-          "templateUrl": {
-            "type": "string",
-            "description": "This is the Template URL or the Snapshot URL corresponding to the Template."
-          },
-          "setupInstructions": {
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/ToolTemplateSetup"
-            }
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
           },
           "type": {
             "type": "string",
+            "description": "This is the type of the message. \"workflow.node.started\" is sent when the active node changes.",
             "enum": [
-              "google.sheets.row.append"
-            ],
-            "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool."
+              "workflow.node.started"
+            ]
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "node": {
+            "type": "object",
+            "description": "This is the active node."
           }
         },
         "required": [
-          "type"
+          "type",
+          "node"
         ]
       },
-      "ToolTemplateMetadata": {
-        "type": "object",
-        "properties": {
-          "collectionType": {
-            "type": "string"
-          },
-          "collectionId": {
-            "type": "string"
-          },
-          "collectionName": {
-            "type": "string"
-          }
-        }
-      },
-      "CreateToolTemplateDTO": {
+      "ClientMessageConversationUpdate": {
         "type": "object",
         "properties": {
-          "details": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                "title": "DtmfTool"
-              },
-              {
-                "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                "title": "EndCallTool"
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                "title": "VoicemailTool"
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                "title": "FunctionTool"
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/CreateGhlToolDTO",
-                "title": "GhlTool"
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/CreateMakeToolDTO",
-                "title": "MakeTool"
-              },
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
+          "type": {
+            "type": "string",
+            "description": "This is the type of the message. \"conversation-update\" is sent when an update is committed to the conversation history.",
+            "enum": [
+              "conversation-update"
+            ]
+          },
+          "messages": {
+            "type": "array",
+            "description": "This is the most up-to-date conversation history at the time the message is sent.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/BotMessage",
+                  "title": "BotMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallMessage",
+                  "title": "ToolCallMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallResultMessage",
+                  "title": "ToolCallResultMessage"
+                }
+              ]
+            }
+          },
+          "messagesOpenAIFormatted": {
+            "description": "This is the most up-to-date conversation history at the time the message is sent, formatted for OpenAI.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                "title": "TransferCallTool"
-              },
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                "title": "GoogleCalendarCreateEventTool"
-              },
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                "title": "GoogleSheetsRowAppendTool"
+                "$ref": "#/components/schemas/CreateAssistantDTO"
               }
             ]
-          },
-          "providerDetails": {
+          }
+        },
+        "required": [
+          "type",
+          "messagesOpenAIFormatted"
+        ]
+      },
+      "ClientMessageHang": {
+        "type": "object",
+        "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/MakeToolProviderDetails",
-                "title": "MakeToolProviderDetails"
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/GhlToolProviderDetails",
-                "title": "GhlToolProviderDetails"
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/FunctionToolProviderDetails",
-                "title": "FunctionToolProviderDetails"
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/GoogleCalendarCreateEventToolProviderDetails",
-                "title": "GoogleCalendarCreateEventToolProviderDetails"
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/GoogleSheetsRowAppendToolProviderDetails",
-                "title": "GoogleSheetsRowAppendToolProviderDetails"
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
-          "metadata": {
-            "$ref": "#/components/schemas/ToolTemplateMetadata"
-          },
-          "visibility": {
+          "type": {
             "type": "string",
-            "default": "private",
+            "description": "This is the type of the message. \"hang\" is sent when the assistant is hanging due to a delay. The delay can be caused by many factors, such as:\n- the model is too slow to respond\n- the voice is too slow to respond\n- the tool call is still waiting for a response from your server\n- etc.",
             "enum": [
-              "public",
-              "private"
+              "hang"
             ]
           },
-          "type": {
-            "type": "string",
-            "default": "tool",
-            "enum": [
-              "tool"
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
             ]
           },
-          "name": {
-            "type": "string",
-            "description": "The name of the template. This is just for your own reference.",
-            "maxLength": 40
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
           },
-          "provider": {
-            "type": "string",
-            "enum": [
-              "make",
-              "gohighlevel",
-              "function"
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
             ]
           }
         },
@@ -32044,926 +43220,1225 @@
           "type"
         ]
       },
-      "Template": {
+      "ClientMessageMetadata": {
         "type": "object",
         "properties": {
-          "details": {
-            "oneOf": [
-              {
-                "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                "title": "DtmfTool"
-              },
-              {
-                "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                "title": "EndCallTool"
-              },
-              {
-                "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                "title": "VoicemailTool"
-              },
-              {
-                "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                "title": "FunctionTool"
-              },
-              {
-                "$ref": "#/components/schemas/CreateGhlToolDTO",
-                "title": "GhlTool"
-              },
-              {
-                "$ref": "#/components/schemas/CreateMakeToolDTO",
-                "title": "MakeTool"
-              },
-              {
-                "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                "title": "TransferCallTool"
-              },
-              {
-                "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                "title": "GoogleCalendarCreateEventTool"
-              },
-              {
-                "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                "title": "GoogleSheetsRowAppendTool"
-              }
-            ]
-          },
-          "providerDetails": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/MakeToolProviderDetails",
-                "title": "MakeToolProviderDetails"
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/GhlToolProviderDetails",
-                "title": "GhlToolProviderDetails"
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/FunctionToolProviderDetails",
-                "title": "FunctionToolProviderDetails"
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/GoogleCalendarCreateEventToolProviderDetails",
-                "title": "GoogleCalendarCreateEventToolProviderDetails"
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/GoogleSheetsRowAppendToolProviderDetails",
-                "title": "GoogleSheetsRowAppendToolProviderDetails"
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
-          "metadata": {
-            "$ref": "#/components/schemas/ToolTemplateMetadata"
-          },
-          "visibility": {
-            "default": "private",
-            "enum": [
-              "public",
-              "private"
-            ],
-            "type": "string"
-          },
           "type": {
             "type": "string",
-            "default": "tool",
+            "description": "This is the type of the message. \"metadata\" is sent to forward metadata to the client.",
             "enum": [
-              "tool"
+              "metadata"
             ]
           },
-          "name": {
-            "type": "string",
-            "description": "The name of the template. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "provider": {
-            "enum": [
-              "make",
-              "gohighlevel",
-              "function"
-            ],
-            "type": "string"
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
           },
-          "id": {
-            "type": "string",
-            "description": "The unique identifier for the template."
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
           },
-          "orgId": {
-            "type": "string",
-            "description": "The unique identifier for the organization that this template belongs to."
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
           },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "The ISO 8601 date-time string of when the template was created."
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
           },
-          "updatedAt": {
-            "format": "date-time",
+          "metadata": {
             "type": "string",
-            "description": "The ISO 8601 date-time string of when the template was last updated."
+            "description": "This is the metadata content"
           }
         },
         "required": [
           "type",
-          "id",
-          "orgId",
-          "createdAt",
-          "updatedAt"
+          "metadata"
         ]
       },
-      "UpdateToolTemplateDTO": {
+      "ClientMessageModelOutput": {
         "type": "object",
         "properties": {
-          "details": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/CreateDtmfToolDTO",
-                "title": "DtmfTool"
-              },
-              {
-                "$ref": "#/components/schemas/CreateEndCallToolDTO",
-                "title": "EndCallTool"
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/CreateVoicemailToolDTO",
-                "title": "VoicemailTool"
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/CreateFunctionToolDTO",
-                "title": "FunctionTool"
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/CreateGhlToolDTO",
-                "title": "GhlTool"
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/CreateMakeToolDTO",
-                "title": "MakeTool"
-              },
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
+          "type": {
+            "type": "string",
+            "description": "This is the type of the message. \"model-output\" is sent as the model outputs tokens.",
+            "enum": [
+              "model-output"
+            ]
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/CreateTransferCallToolDTO",
-                "title": "TransferCallTool"
-              },
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO",
-                "title": "GoogleCalendarCreateEventTool"
-              },
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
               {
-                "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO",
-                "title": "GoogleSheetsRowAppendTool"
+                "$ref": "#/components/schemas/CreateAssistantDTO"
               }
             ]
           },
-          "providerDetails": {
+          "output": {
+            "type": "object",
+            "description": "This is the output of the model. It can be a token or tool call."
+          }
+        },
+        "required": [
+          "type",
+          "output"
+        ]
+      },
+      "ClientMessageSpeechUpdate": {
+        "type": "object",
+        "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/MakeToolProviderDetails",
-                "title": "MakeToolProviderDetails"
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/GhlToolProviderDetails",
-                "title": "GhlToolProviderDetails"
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/FunctionToolProviderDetails",
-                "title": "FunctionToolProviderDetails"
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/GoogleCalendarCreateEventToolProviderDetails",
-                "title": "GoogleCalendarCreateEventToolProviderDetails"
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/GoogleSheetsRowAppendToolProviderDetails",
-                "title": "GoogleSheetsRowAppendToolProviderDetails"
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
-          "metadata": {
-            "$ref": "#/components/schemas/ToolTemplateMetadata"
-          },
-          "visibility": {
-            "type": "string",
-            "default": "private",
-            "enum": [
-              "public",
-              "private"
-            ]
-          },
           "type": {
             "type": "string",
-            "default": "tool",
+            "description": "This is the type of the message. \"speech-update\" is sent whenever assistant or user start or stop speaking.",
             "enum": [
-              "tool"
+              "speech-update"
             ]
           },
-          "name": {
-            "type": "string",
-            "description": "The name of the template. This is just for your own reference.",
-            "maxLength": 40
-          },
-          "provider": {
+          "status": {
             "type": "string",
+            "description": "This is the status of the speech update.",
             "enum": [
-              "make",
-              "gohighlevel",
-              "function"
-            ]
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "VoiceLibrary": {
-        "type": "object",
-        "properties": {
-          "provider": {
-            "type": "object",
-            "description": "This is the voice provider that will be used.",
-            "enum": [
-              "vapi",
-              "11labs",
-              "azure",
-              "cartesia",
-              "custom-voice",
-              "deepgram",
-              "hume",
-              "lmnt",
-              "neuphonic",
-              "openai",
-              "playht",
-              "rime-ai",
-              "smallest-ai",
-              "tavus",
-              "sesame"
+              "started",
+              "stopped"
             ]
           },
-          "providerId": {
-            "type": "string",
-            "description": "The ID of the voice provided by the provider."
-          },
-          "slug": {
-            "type": "string",
-            "description": "The unique slug of the voice."
-          },
-          "name": {
-            "type": "string",
-            "description": "The name of the voice."
-          },
-          "language": {
-            "type": "string",
-            "description": "The language of the voice."
-          },
-          "languageCode": {
-            "type": "string",
-            "description": "The language code of the voice."
-          },
-          "model": {
-            "type": "string",
-            "description": "The model of the voice."
-          },
-          "supportedModels": {
-            "type": "string",
-            "description": "The supported models of the voice."
-          },
-          "gender": {
+          "role": {
             "type": "string",
-            "description": "The gender of the voice.",
+            "description": "This is the role which the speech update is for.",
             "enum": [
-              "male",
-              "female"
+              "assistant",
+              "user"
             ]
           },
-          "accent": {
-            "type": "string",
-            "description": "The accent of the voice."
-          },
-          "previewUrl": {
-            "type": "string",
-            "description": "The preview URL of the voice."
-          },
-          "description": {
-            "type": "string",
-            "description": "The description of the voice."
-          },
-          "credentialId": {
-            "type": "string",
-            "description": "The credential ID of the voice."
-          },
-          "id": {
-            "type": "string",
-            "description": "The unique identifier for the voice library."
-          },
-          "orgId": {
-            "type": "string",
-            "description": "The unique identifier for the organization that this voice library belongs to."
-          },
-          "isPublic": {
-            "type": "boolean",
-            "description": "The Public voice is shared accross all the organizations."
-          },
-          "isDeleted": {
-            "type": "boolean",
-            "description": "The deletion status of the voice."
-          },
-          "createdAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "The ISO 8601 date-time string of when the voice library was created."
-          },
-          "updatedAt": {
-            "format": "date-time",
-            "type": "string",
-            "description": "The ISO 8601 date-time string of when the voice library was last updated."
-          }
-        },
-        "required": [
-          "id",
-          "orgId",
-          "isPublic",
-          "isDeleted",
-          "createdAt",
-          "updatedAt"
-        ]
-      },
-      "SyncVoiceLibraryDTO": {
-        "type": "object",
-        "properties": {
-          "providers": {
-            "type": "array",
-            "description": "List of providers you want to sync.",
-            "enum": [
-              "vapi",
-              "11labs",
-              "azure",
-              "cartesia",
-              "custom-voice",
-              "deepgram",
-              "hume",
-              "lmnt",
-              "neuphonic",
-              "openai",
-              "playht",
-              "rime-ai",
-              "smallest-ai",
-              "tavus",
-              "sesame"
-            ],
-            "items": {
-              "type": "string",
-              "enum": [
-                "vapi",
-                "11labs",
-                "azure",
-                "cartesia",
-                "custom-voice",
-                "deepgram",
-                "hume",
-                "lmnt",
-                "neuphonic",
-                "openai",
-                "playht",
-                "rime-ai",
-                "smallest-ai",
-                "tavus",
-                "sesame"
-              ]
-            }
-          }
-        }
-      },
-      "CreateSesameVoiceDTO": {
-        "type": "object",
-        "properties": {
-          "voiceName": {
-            "type": "string",
-            "description": "The name of the voice."
-          },
-          "transcription": {
-            "type": "string",
-            "description": "The transcript of the utterance."
-          }
-        }
-      },
-      "VoiceLibraryVoiceResponse": {
-        "type": "object",
-        "properties": {
-          "voiceId": {
-            "type": "string"
-          },
-          "name": {
-            "type": "string"
-          },
-          "publicOwnerId": {
-            "type": "string"
+          "turn": {
+            "type": "number",
+            "description": "This is the turn number of the speech update (0-indexed)."
           },
-          "description": {
-            "type": "string"
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
           },
-          "gender": {
-            "type": "string"
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
           },
-          "age": {
-            "type": "object"
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
           },
-          "accent": {
-            "type": "string"
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
           }
         },
         "required": [
-          "voiceId",
-          "name"
+          "type",
+          "status",
+          "role"
         ]
       },
-      "AddVoiceToProviderDTO": {
+      "ClientMessageTranscript": {
         "type": "object",
         "properties": {
-          "ownerId": {
-            "type": "string",
-            "description": "This is the owner_id of your shared voice which you want to add to your provider Account from Provider Voice Library"
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
           },
-          "voiceId": {
+          "type": {
             "type": "string",
-            "description": "This is the voice_id of the shared voice which you want to add to your provider Account from Provider Voice Library"
+            "description": "This is the type of the message. \"transcript\" is sent as transcriber outputs partial or final transcript.",
+            "enum": [
+              "transcript",
+              "transcript[transcriptType=\"final\"]"
+            ]
           },
-          "name": {
-            "type": "string",
-            "description": "This is the new name of the voice which you want to have once you have added voice to your provider Account from Provider Voice Library"
-          }
-        },
-        "required": [
-          "ownerId",
-          "voiceId",
-          "name"
-        ]
-      },
-      "CloneVoiceDTO": {
-        "type": "object",
-        "properties": {
-          "name": {
-            "type": "string",
-            "description": "This is the name of the cloned voice in the provider account."
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
           },
-          "description": {
-            "type": "string",
-            "description": "This is the description of your cloned voice."
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
           },
-          "labels": {
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "role": {
             "type": "string",
-            "description": "Serialized labels dictionary for the voice."
+            "description": "This is the role for which the transcript is for.",
+            "enum": [
+              "assistant",
+              "user"
+            ]
           },
-          "files": {
-            "description": "These are the files you want to use to clone your voice. Only Audio files are supported.",
-            "type": "array",
-            "items": {
-              "type": "string",
-              "format": "binary"
-            }
-          }
-        },
-        "required": [
-          "name",
-          "files"
-        ]
-      },
-      "ClientMessageWorkflowNodeStarted": {
-        "type": "object",
-        "properties": {
-          "type": {
+          "transcriptType": {
             "type": "string",
-            "description": "This is the type of the message. \"workflow.node.started\" is sent when the active node changes.",
+            "description": "This is the type of the transcript.",
             "enum": [
-              "workflow.node.started"
+              "partial",
+              "final"
             ]
           },
-          "node": {
-            "type": "object",
-            "description": "This is the active node."
+          "transcript": {
+            "type": "string",
+            "description": "This is the transcript content."
           }
         },
         "required": [
           "type",
-          "node"
+          "role",
+          "transcriptType",
+          "transcript"
         ]
       },
-      "ClientMessageConversationUpdate": {
+      "ClientMessageToolCalls": {
         "type": "object",
         "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"conversation-update\" is sent when an update is committed to the conversation history.",
+            "description": "This is the type of the message. \"tool-calls\" is sent to call a tool.",
             "enum": [
-              "conversation-update"
+              "tool-calls"
             ]
           },
-          "messages": {
+          "toolWithToolCallList": {
             "type": "array",
-            "description": "This is the most up-to-date conversation history at the time the message is sent.",
+            "description": "This is the list of tools calls that the model is requesting along with the original tool configuration.",
             "items": {
               "oneOf": [
                 {
-                  "$ref": "#/components/schemas/UserMessage",
-                  "title": "UserMessage"
+                  "$ref": "#/components/schemas/FunctionToolWithToolCall",
+                  "title": "FunctionToolWithToolCall"
                 },
                 {
-                  "$ref": "#/components/schemas/SystemMessage",
-                  "title": "SystemMessage"
+                  "$ref": "#/components/schemas/GhlToolWithToolCall",
+                  "title": "GhlToolWithToolCall"
                 },
                 {
-                  "$ref": "#/components/schemas/BotMessage",
-                  "title": "BotMessage"
+                  "$ref": "#/components/schemas/MakeToolWithToolCall",
+                  "title": "MakeToolWithToolCall"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolCallMessage",
-                  "title": "ToolCallMessage"
+                  "$ref": "#/components/schemas/BashToolWithToolCall",
+                  "title": "BashToolWithToolCall"
                 },
                 {
-                  "$ref": "#/components/schemas/ToolCallResultMessage",
-                  "title": "ToolCallResultMessage"
+                  "$ref": "#/components/schemas/ComputerToolWithToolCall",
+                  "title": "ComputerToolWithToolCall"
+                },
+                {
+                  "$ref": "#/components/schemas/TextEditorToolWithToolCall",
+                  "title": "TextEditorToolWithToolCall"
+                },
+                {
+                  "$ref": "#/components/schemas/GoogleCalendarCreateEventToolWithToolCall",
+                  "title": "GoogleCalendarCreateEventToolWithToolCall"
                 }
               ]
             }
           },
-          "messagesOpenAIFormatted": {
-            "description": "This is the most up-to-date conversation history at the time the message is sent, formatted for OpenAI.",
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "toolCallList": {
+            "description": "This is the list of tool calls that the model is requesting.",
             "type": "array",
             "items": {
-              "$ref": "#/components/schemas/OpenAIMessage"
+              "$ref": "#/components/schemas/ToolCall"
             }
           }
         },
         "required": [
-          "type",
-          "messagesOpenAIFormatted"
+          "toolWithToolCallList",
+          "toolCallList"
         ]
       },
-      "ClientMessageHang": {
+      "ClientMessageToolCallsResult": {
         "type": "object",
         "properties": {
-          "type": {
-            "type": "string",
-            "description": "This is the type of the message. \"hang\" is sent when the assistant is hanging due to a delay. The delay can be caused by many factors, such as:\n- the model is too slow to respond\n- the voice is too slow to respond\n- the tool call is still waiting for a response from your server\n- etc.",
-            "enum": [
-              "hang"
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
             ]
-          }
-        },
-        "required": [
-          "type"
-        ]
-      },
-      "ClientMessageMetadata": {
-        "type": "object",
-        "properties": {
+          },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"metadata\" is sent to forward metadata to the client.",
+            "description": "This is the type of the message. \"tool-calls-result\" is sent to forward the result of a tool call to the client.",
             "enum": [
-              "metadata"
+              "tool-calls-result"
             ]
           },
-          "metadata": {
-            "type": "string",
-            "description": "This is the metadata content"
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "toolCallResult": {
+            "type": "object",
+            "description": "This is the result of the tool call."
           }
         },
         "required": [
           "type",
-          "metadata"
+          "toolCallResult"
         ]
       },
-      "ClientMessageModelOutput": {
+      "ClientMessageTransferUpdate": {
         "type": "object",
         "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"model-output\" is sent as the model outputs tokens.",
+            "description": "This is the type of the message. \"transfer-update\" is sent whenever a transfer happens.",
             "enum": [
-              "model-output"
+              "transfer-update"
             ]
           },
-          "output": {
+          "destination": {
+            "description": "This is the destination of the transfer.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/TransferDestinationAssistant",
+                "title": "Assistant"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationNumber",
+                "title": "Number"
+              },
+              {
+                "$ref": "#/components/schemas/TransferDestinationSip",
+                "title": "Sip"
+              }
+            ]
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "toAssistant": {
+            "description": "This is the assistant that the call is being transferred to. This is only sent if `destination.type` is \"assistant\".",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "fromAssistant": {
+            "description": "This is the assistant that the call is being transferred from. This is only sent if `destination.type` is \"assistant\".",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "toStepRecord": {
             "type": "object",
-            "description": "This is the output of the model. It can be a token or tool call."
+            "description": "This is the step that the conversation moved to."
+          },
+          "fromStepRecord": {
+            "type": "object",
+            "description": "This is the step that the conversation moved from. ="
           }
         },
         "required": [
-          "type",
-          "output"
+          "type"
         ]
       },
-      "ClientMessageSpeechUpdate": {
+      "ClientMessageUserInterrupted": {
         "type": "object",
         "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"speech-update\" is sent whenever assistant or user start or stop speaking.",
+            "description": "This is the type of the message. \"user-interrupted\" is sent when the user interrupts the assistant.",
             "enum": [
-              "speech-update"
+              "user-interrupted"
             ]
           },
-          "status": {
-            "type": "string",
-            "description": "This is the status of the speech update.",
-            "enum": [
-              "started",
-              "stopped"
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
             ]
           },
-          "role": {
-            "type": "string",
-            "description": "This is the role which the speech update is for.",
-            "enum": [
-              "assistant",
-              "user"
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
             ]
           },
-          "turn": {
-            "type": "number",
-            "description": "This is the turn number of the speech update (0-indexed)."
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
           }
         },
         "required": [
-          "type",
-          "status",
-          "role"
+          "type"
         ]
       },
-      "ClientMessageTranscript": {
+      "ClientMessageLanguageChangeDetected": {
         "type": "object",
         "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"transcript\" is sent as transcriber outputs partial or final transcript.",
+            "description": "This is the type of the message. \"language-change-detected\" is sent when the transcriber is automatically switched based on the detected language.",
             "enum": [
-              "transcript",
-              "transcript[transcriptType=\"final\"]"
+              "language-change-detected"
+            ]
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
             ]
           },
-          "role": {
-            "type": "string",
-            "description": "This is the role for which the transcript is for.",
-            "enum": [
-              "assistant",
-              "user"
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
             ]
           },
-          "transcriptType": {
-            "type": "string",
-            "description": "This is the type of the transcript.",
-            "enum": [
-              "partial",
-              "final"
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
             ]
           },
-          "transcript": {
+          "language": {
             "type": "string",
-            "description": "This is the transcript content."
+            "description": "This is the language the transcriber is switched to."
           }
         },
         "required": [
           "type",
-          "role",
-          "transcriptType",
-          "transcript"
+          "language"
         ]
       },
-      "ToolCallFunction": {
+      "ClientMessageVoiceInput": {
         "type": "object",
         "properties": {
-          "name": {
-            "type": "string",
-            "description": "This is the name of the function the model called."
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
           },
-          "arguments": {
-            "type": "object",
-            "description": "These are the arguments that the function was called with."
-          }
-        },
-        "required": [
-          "name",
-          "arguments"
-        ]
-      },
-      "ToolCall": {
-        "type": "object",
-        "properties": {
           "type": {
             "type": "string",
-            "description": "This is the type of tool the model called.",
+            "description": "This is the type of the message. \"voice-input\" is sent when a generation is requested from voice provider.",
             "enum": [
-              "function"
+              "voice-input"
             ]
           },
-          "function": {
-            "description": "This is the function the model called.",
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/ToolCallFunction"
+                "$ref": "#/components/schemas/Call"
               }
             ]
           },
-          "id": {
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "input": {
             "type": "string",
-            "description": "This is the unique identifier for the tool call."
+            "description": "This is the voice input content"
           }
         },
         "required": [
           "type",
-          "function",
-          "id"
+          "input"
         ]
       },
-      "ClientMessageToolCalls": {
+      "ClientMessageChatCreated": {
         "type": "object",
         "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"tool-calls\" is sent to call a tool.",
+            "description": "This is the type of the message. \"chat.created\" is sent when a new chat is created.",
             "enum": [
-              "tool-calls"
+              "chat.created"
             ]
           },
-          "toolWithToolCallList": {
-            "type": "array",
-            "description": "This is the list of tools calls that the model is requesting along with the original tool configuration.",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/FunctionToolWithToolCall",
-                  "title": "FunctionToolWithToolCall"
-                },
-                {
-                  "$ref": "#/components/schemas/GhlToolWithToolCall",
-                  "title": "GhlToolWithToolCall"
-                },
-                {
-                  "$ref": "#/components/schemas/MakeToolWithToolCall",
-                  "title": "MakeToolWithToolCall"
-                },
-                {
-                  "$ref": "#/components/schemas/BashToolWithToolCall",
-                  "title": "BashToolWithToolCall"
-                },
-                {
-                  "$ref": "#/components/schemas/ComputerToolWithToolCall",
-                  "title": "ComputerToolWithToolCall"
-                },
-                {
-                  "$ref": "#/components/schemas/TextEditorToolWithToolCall",
-                  "title": "TextEditorToolWithToolCall"
-                },
-                {
-                  "$ref": "#/components/schemas/GoogleCalendarCreateEventToolWithToolCall",
-                  "title": "GoogleCalendarCreateEventToolWithToolCall"
-                }
-              ]
-            }
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
           },
-          "toolCallList": {
-            "description": "This is the list of tool calls that the model is requesting.",
-            "type": "array",
-            "items": {
-              "$ref": "#/components/schemas/ToolCall"
-            }
-          }
-        },
-        "required": [
-          "toolWithToolCallList",
-          "toolCallList"
-        ]
-      },
-      "ClientMessageToolCallsResult": {
-        "type": "object",
-        "properties": {
-          "type": {
-            "type": "string",
-            "description": "This is the type of the message. \"tool-calls-result\" is sent to forward the result of a tool call to the client.",
-            "enum": [
-              "tool-calls-result"
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
             ]
           },
-          "toolCallResult": {
-            "type": "object",
-            "description": "This is the result of the tool call."
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "chat": {
+            "description": "This is the chat that was created.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
           "type",
-          "toolCallResult"
+          "chat"
         ]
       },
-      "ClientMessageTransferUpdate": {
+      "ClientMessageChatDeleted": {
         "type": "object",
         "properties": {
-          "type": {
-            "type": "string",
-            "description": "This is the type of the message. \"transfer-update\" is sent whenever a transfer happens.",
-            "enum": [
-              "transfer-update"
-            ]
-          },
-          "destination": {
-            "description": "This is the destination of the transfer.",
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
-                "$ref": "#/components/schemas/TransferDestinationAssistant",
-                "title": "Assistant"
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/TransferDestinationStep",
-                "title": "Step"
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/TransferDestinationNumber",
-                "title": "Number"
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
               },
               {
-                "$ref": "#/components/schemas/TransferDestinationSip",
-                "title": "Sip"
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
-          "toAssistant": {
-            "description": "This is the assistant that the call is being transferred to. This is only sent if `destination.type` is \"assistant\".",
+          "type": {
+            "type": "string",
+            "description": "This is the type of the message. \"chat.deleted\" is sent when a chat is deleted.",
+            "enum": [
+              "chat.deleted"
+            ]
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/CreateAssistantDTO"
+                "$ref": "#/components/schemas/Call"
               }
             ]
           },
-          "fromAssistant": {
-            "description": "This is the assistant that the call is being transferred from. This is only sent if `destination.type` is \"assistant\".",
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/CreateAssistantDTO"
+                "$ref": "#/components/schemas/CreateCustomerDTO"
               }
             ]
           },
-          "toStepRecord": {
-            "type": "object",
-            "description": "This is the step that the conversation moved to."
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
           },
-          "fromStepRecord": {
-            "type": "object",
-            "description": "This is the step that the conversation moved from. ="
+          "chat": {
+            "description": "This is the chat that was deleted.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
-          "type"
+          "type",
+          "chat"
         ]
       },
-      "ClientMessageUserInterrupted": {
+      "ClientMessageSessionCreated": {
         "type": "object",
         "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"user-interrupted\" is sent when the user interrupts the assistant.",
+            "description": "This is the type of the message. \"session.created\" is sent when a new session is created.",
             "enum": [
-              "user-interrupted"
+              "session.created"
+            ]
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "session": {
+            "description": "This is the session that was created.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Session"
+              }
             ]
           }
         },
         "required": [
-          "type"
+          "type",
+          "session"
         ]
       },
-      "ClientMessageLanguageChangeDetected": {
+      "ClientMessageSessionUpdated": {
         "type": "object",
         "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"language-change-detected\" is sent when the transcriber is automatically switched based on the detected language.",
+            "description": "This is the type of the message. \"session.updated\" is sent when a session is updated.",
             "enum": [
-              "language-change-detected"
+              "session.updated"
             ]
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language the transcriber is switched to."
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "session": {
+            "description": "This is the session that was updated.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Session"
+              }
+            ]
           }
         },
         "required": [
           "type",
-          "language"
+          "session"
         ]
       },
-      "ClientMessageVoiceInput": {
+      "ClientMessageSessionDeleted": {
         "type": "object",
         "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"voice-input\" is sent when a generation is requested from voice provider.",
+            "description": "This is the type of the message. \"session.deleted\" is sent when a session is deleted.",
             "enum": [
-              "voice-input"
+              "session.deleted"
             ]
           },
-          "input": {
-            "type": "string",
-            "description": "This is the voice input content"
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "session": {
+            "description": "This is the session that was deleted.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Session"
+              }
+            ]
           }
         },
         "required": [
           "type",
-          "input"
+          "session"
         ]
       },
       "ClientMessage": {
@@ -33023,6 +44498,26 @@
               {
                 "$ref": "#/components/schemas/ClientMessageVoiceInput",
                 "title": "VoiceInput"
+              },
+              {
+                "$ref": "#/components/schemas/ClientMessageChatCreated",
+                "title": "ChatCreated"
+              },
+              {
+                "$ref": "#/components/schemas/ClientMessageChatDeleted",
+                "title": "ChatDeleted"
+              },
+              {
+                "$ref": "#/components/schemas/ClientMessageSessionCreated",
+                "title": "SessionCreated"
+              },
+              {
+                "$ref": "#/components/schemas/ClientMessageSessionUpdated",
+                "title": "SessionUpdated"
+              },
+              {
+                "$ref": "#/components/schemas/ClientMessageSessionDeleted",
+                "title": "SessionDeleted"
               }
             ]
           }
@@ -33035,7 +44530,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -33052,6 +44547,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -33064,7 +44563,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -33075,7 +44574,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -33083,7 +44582,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -33091,12 +44590,20 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
@@ -33107,7 +44614,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -33124,6 +44631,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -33171,7 +44682,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -33182,7 +44693,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -33190,7 +44701,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -33198,12 +44709,20 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
@@ -33215,7 +44734,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -33232,6 +44751,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -33253,8 +44776,9 @@
               "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",
+              "scheduled-call-deleted",
+              "call.start.error-vapifault-get-org",
+              "call.start.error-vapifault-get-subscription",
               "call.start.error-get-assistant",
               "call.start.error-get-phone-number",
               "call.start.error-get-customer",
@@ -33262,6 +44786,11 @@
               "call.start.error-vapi-number-international",
               "call.start.error-vapi-number-outbound-daily-limit",
               "call.start.error-get-transport",
+              "call.start.error-subscription-wallet-does-not-exist",
+              "call.start.error-subscription-frozen",
+              "call.start.error-subscription-insufficient-credits",
+              "call.start.error-subscription-upgrade-failed",
+              "call.start.error-subscription-concurrency-limit-reached",
               "assistant-not-valid",
               "database-error",
               "assistant-not-found",
@@ -33277,6 +44806,8 @@
               "pipeline-error-neuphonic-voice-failed",
               "pipeline-error-hume-voice-failed",
               "pipeline-error-sesame-voice-failed",
+              "pipeline-error-inworld-voice-failed",
+              "pipeline-error-minimax-voice-failed",
               "pipeline-error-tavus-video-failed",
               "call.in-progress.error-vapifault-openai-voice-failed",
               "call.in-progress.error-vapifault-cartesia-voice-failed",
@@ -33290,6 +44821,8 @@
               "call.in-progress.error-vapifault-neuphonic-voice-failed",
               "call.in-progress.error-vapifault-hume-voice-failed",
               "call.in-progress.error-vapifault-sesame-voice-failed",
+              "call.in-progress.error-vapifault-inworld-voice-failed",
+              "call.in-progress.error-vapifault-minimax-voice-failed",
               "call.in-progress.error-vapifault-tavus-video-failed",
               "pipeline-error-vapi-llm-failed",
               "pipeline-error-vapi-400-bad-request-validation-failed",
@@ -33329,7 +44862,6 @@
               "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",
@@ -33339,6 +44871,9 @@
               "call.in-progress.error-vapifault-transport-never-connected",
               "call.in-progress.error-vapifault-transport-connected-but-call-not-active",
               "call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing",
+              "call.in-progress.error-vapifault-worker-died",
+              "call.in-progress.twilio-completed-call",
+              "call.in-progress.sip-completed-call",
               "call.in-progress.error-vapifault-openai-llm-failed",
               "call.in-progress.error-vapifault-azure-openai-llm-failed",
               "call.in-progress.error-vapifault-groq-llm-failed",
@@ -33348,6 +44883,7 @@
               "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",
+              "call.in-progress.error-vapifault-chat-pipeline-failed-to-start",
               "pipeline-error-openai-400-bad-request-validation-failed",
               "pipeline-error-openai-401-unauthorized",
               "pipeline-error-openai-401-incorrect-api-key",
@@ -33615,6 +45151,7 @@
               "pipeline-error-cartesia-socket-hang-up",
               "pipeline-error-cartesia-requested-payment",
               "pipeline-error-cartesia-500-server-error",
+              "pipeline-error-cartesia-502-server-error",
               "pipeline-error-cartesia-503-server-error",
               "pipeline-error-cartesia-522-server-error",
               "call.in-progress.error-vapifault-cartesia-socket-hang-up",
@@ -33635,6 +45172,7 @@
               "pipeline-error-eleven-labs-invalid-api-key",
               "pipeline-error-eleven-labs-invalid-voice-samples",
               "pipeline-error-eleven-labs-voice-disabled-by-owner",
+              "pipeline-error-eleven-labs-vapi-voice-disabled-by-owner",
               "pipeline-error-eleven-labs-blocked-account-in-probation",
               "pipeline-error-eleven-labs-blocked-content-against-their-policy",
               "pipeline-error-eleven-labs-missing-samples-for-voice-clone",
@@ -33643,6 +45181,7 @@
               "pipeline-error-eleven-labs-max-character-limit-exceeded",
               "pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification",
               "pipeline-error-eleven-labs-500-server-error",
+              "pipeline-error-eleven-labs-503-server-error",
               "call.in-progress.error-vapifault-eleven-labs-voice-not-found",
               "call.in-progress.error-vapifault-eleven-labs-quota-exceeded",
               "call.in-progress.error-vapifault-eleven-labs-unauthorized-access",
@@ -33664,6 +45203,7 @@
               "call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded",
               "call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification",
               "call.in-progress.error-providerfault-eleven-labs-500-server-error",
+              "call.in-progress.error-providerfault-eleven-labs-503-server-error",
               "pipeline-error-playht-request-timed-out",
               "pipeline-error-playht-invalid-voice",
               "pipeline-error-playht-unexpected-error",
@@ -33699,6 +45239,7 @@
               "pipeline-error-deepgram-returning-500-invalid-json",
               "pipeline-error-deepgram-returning-502-network-error",
               "pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach",
+              "pipeline-error-deepgram-returning-econnreset",
               "call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination",
               "call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials",
               "call.in-progress.error-vapifault-deepgram-returning-404-not-found",
@@ -33717,6 +45258,7 @@
               "assistant-forwarded-call",
               "assistant-join-timed-out",
               "call.in-progress.error-assistant-did-not-receive-customer-audio",
+              "call.in-progress.error-transfer-failed",
               "customer-busy",
               "customer-ended-call",
               "customer-did-not-answer",
@@ -33726,9 +45268,16 @@
               "phone-call-provider-closed-websocket",
               "call.forwarding.operator-busy",
               "silence-timed-out",
-              "call.in-progress.error-sip-telephony-provider-failed-to-connect-call",
+              "call.in-progress.error-sip-inbound-call-failed-to-connect",
+              "call.in-progress.error-providerfault-outbound-sip-403-forbidden",
+              "call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required",
+              "call.in-progress.error-providerfault-outbound-sip-503-service-unavailable",
+              "call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable",
+              "call.in-progress.error-sip-outbound-call-failed-to-connect",
               "call.ringing.hook-executed-say",
               "call.ringing.hook-executed-transfer",
+              "call.ringing.sip-inbound-caller-hungup-before-call-connect",
+              "call.ringing.error-sip-inbound-call-failed-to-connect",
               "twilio-failed-to-connect-call",
               "twilio-reported-customer-misdialed",
               "vonage-rejected",
@@ -33771,13 +45320,17 @@
                 {
                   "$ref": "#/components/schemas/AnalysisCost",
                   "title": "AnalysisCost"
+                },
+                {
+                  "$ref": "#/components/schemas/KnowledgeBaseCost",
+                  "title": "KnowledgeBaseCost"
                 }
               ]
             }
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "These are the artifacts from the call. This can also be found at `call.artifact` on GET /call/:id.",
@@ -33788,7 +45341,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -33796,7 +45349,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -33804,13 +45357,21 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
           },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
           "analysis": {
             "description": "This is the analysis of the call. This can also be found at `call.analysis` on GET /call/:id.",
             "allOf": [
@@ -33841,7 +45402,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -33858,6 +45419,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -33870,7 +45435,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -33881,7 +45446,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -33889,7 +45454,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -33897,12 +45462,20 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
@@ -33913,7 +45486,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -33930,6 +45503,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -33977,7 +45554,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -33988,7 +45565,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -33996,7 +45573,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -34004,12 +45581,20 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
@@ -34021,7 +45606,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -34038,6 +45623,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -34050,7 +45639,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -34061,7 +45650,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -34069,7 +45658,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -34077,13 +45666,21 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
           },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
           "output": {
             "type": "object",
             "description": "This is the output of the model. It can be a token or tool call."
@@ -34098,7 +45695,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -34115,6 +45712,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -34148,7 +45749,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -34159,7 +45760,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -34167,7 +45768,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -34175,12 +45776,20 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
@@ -34192,7 +45801,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -34209,6 +45818,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -34241,7 +45854,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -34252,7 +45865,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -34260,7 +45873,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -34268,12 +45881,20 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
@@ -34286,7 +45907,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -34303,6 +45924,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -34336,8 +45961,9 @@
               "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",
+              "scheduled-call-deleted",
+              "call.start.error-vapifault-get-org",
+              "call.start.error-vapifault-get-subscription",
               "call.start.error-get-assistant",
               "call.start.error-get-phone-number",
               "call.start.error-get-customer",
@@ -34345,6 +45971,11 @@
               "call.start.error-vapi-number-international",
               "call.start.error-vapi-number-outbound-daily-limit",
               "call.start.error-get-transport",
+              "call.start.error-subscription-wallet-does-not-exist",
+              "call.start.error-subscription-frozen",
+              "call.start.error-subscription-insufficient-credits",
+              "call.start.error-subscription-upgrade-failed",
+              "call.start.error-subscription-concurrency-limit-reached",
               "assistant-not-valid",
               "database-error",
               "assistant-not-found",
@@ -34360,6 +45991,8 @@
               "pipeline-error-neuphonic-voice-failed",
               "pipeline-error-hume-voice-failed",
               "pipeline-error-sesame-voice-failed",
+              "pipeline-error-inworld-voice-failed",
+              "pipeline-error-minimax-voice-failed",
               "pipeline-error-tavus-video-failed",
               "call.in-progress.error-vapifault-openai-voice-failed",
               "call.in-progress.error-vapifault-cartesia-voice-failed",
@@ -34373,6 +46006,8 @@
               "call.in-progress.error-vapifault-neuphonic-voice-failed",
               "call.in-progress.error-vapifault-hume-voice-failed",
               "call.in-progress.error-vapifault-sesame-voice-failed",
+              "call.in-progress.error-vapifault-inworld-voice-failed",
+              "call.in-progress.error-vapifault-minimax-voice-failed",
               "call.in-progress.error-vapifault-tavus-video-failed",
               "pipeline-error-vapi-llm-failed",
               "pipeline-error-vapi-400-bad-request-validation-failed",
@@ -34412,7 +46047,6 @@
               "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",
@@ -34422,6 +46056,9 @@
               "call.in-progress.error-vapifault-transport-never-connected",
               "call.in-progress.error-vapifault-transport-connected-but-call-not-active",
               "call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing",
+              "call.in-progress.error-vapifault-worker-died",
+              "call.in-progress.twilio-completed-call",
+              "call.in-progress.sip-completed-call",
               "call.in-progress.error-vapifault-openai-llm-failed",
               "call.in-progress.error-vapifault-azure-openai-llm-failed",
               "call.in-progress.error-vapifault-groq-llm-failed",
@@ -34431,6 +46068,7 @@
               "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",
+              "call.in-progress.error-vapifault-chat-pipeline-failed-to-start",
               "pipeline-error-openai-400-bad-request-validation-failed",
               "pipeline-error-openai-401-unauthorized",
               "pipeline-error-openai-401-incorrect-api-key",
@@ -34698,6 +46336,7 @@
               "pipeline-error-cartesia-socket-hang-up",
               "pipeline-error-cartesia-requested-payment",
               "pipeline-error-cartesia-500-server-error",
+              "pipeline-error-cartesia-502-server-error",
               "pipeline-error-cartesia-503-server-error",
               "pipeline-error-cartesia-522-server-error",
               "call.in-progress.error-vapifault-cartesia-socket-hang-up",
@@ -34718,6 +46357,7 @@
               "pipeline-error-eleven-labs-invalid-api-key",
               "pipeline-error-eleven-labs-invalid-voice-samples",
               "pipeline-error-eleven-labs-voice-disabled-by-owner",
+              "pipeline-error-eleven-labs-vapi-voice-disabled-by-owner",
               "pipeline-error-eleven-labs-blocked-account-in-probation",
               "pipeline-error-eleven-labs-blocked-content-against-their-policy",
               "pipeline-error-eleven-labs-missing-samples-for-voice-clone",
@@ -34726,6 +46366,7 @@
               "pipeline-error-eleven-labs-max-character-limit-exceeded",
               "pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification",
               "pipeline-error-eleven-labs-500-server-error",
+              "pipeline-error-eleven-labs-503-server-error",
               "call.in-progress.error-vapifault-eleven-labs-voice-not-found",
               "call.in-progress.error-vapifault-eleven-labs-quota-exceeded",
               "call.in-progress.error-vapifault-eleven-labs-unauthorized-access",
@@ -34747,6 +46388,7 @@
               "call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded",
               "call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification",
               "call.in-progress.error-providerfault-eleven-labs-500-server-error",
+              "call.in-progress.error-providerfault-eleven-labs-503-server-error",
               "pipeline-error-playht-request-timed-out",
               "pipeline-error-playht-invalid-voice",
               "pipeline-error-playht-unexpected-error",
@@ -34782,6 +46424,7 @@
               "pipeline-error-deepgram-returning-500-invalid-json",
               "pipeline-error-deepgram-returning-502-network-error",
               "pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach",
+              "pipeline-error-deepgram-returning-econnreset",
               "call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination",
               "call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials",
               "call.in-progress.error-vapifault-deepgram-returning-404-not-found",
@@ -34800,6 +46443,7 @@
               "assistant-forwarded-call",
               "assistant-join-timed-out",
               "call.in-progress.error-assistant-did-not-receive-customer-audio",
+              "call.in-progress.error-transfer-failed",
               "customer-busy",
               "customer-ended-call",
               "customer-did-not-answer",
@@ -34809,9 +46453,16 @@
               "phone-call-provider-closed-websocket",
               "call.forwarding.operator-busy",
               "silence-timed-out",
-              "call.in-progress.error-sip-telephony-provider-failed-to-connect-call",
+              "call.in-progress.error-sip-inbound-call-failed-to-connect",
+              "call.in-progress.error-providerfault-outbound-sip-403-forbidden",
+              "call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required",
+              "call.in-progress.error-providerfault-outbound-sip-503-service-unavailable",
+              "call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable",
+              "call.in-progress.error-sip-outbound-call-failed-to-connect",
               "call.ringing.hook-executed-say",
               "call.ringing.hook-executed-transfer",
+              "call.ringing.sip-inbound-caller-hungup-before-call-connect",
+              "call.ringing.error-sip-inbound-call-failed-to-connect",
               "twilio-failed-to-connect-call",
               "twilio-reported-customer-misdialed",
               "vonage-rejected",
@@ -34868,7 +46519,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -34879,7 +46530,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -34887,7 +46538,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -34895,13 +46546,21 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
           },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
           "transcript": {
             "type": "string",
             "description": "This is the transcript of the call. This is only sent if the status is \"forwarding\"."
@@ -34924,7 +46583,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -34941,6 +46600,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -34989,7 +46652,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -35000,7 +46663,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -35008,7 +46671,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -35016,13 +46679,21 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
           },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
           "toolCallList": {
             "description": "This is the list of tool calls that the model is requesting.",
             "type": "array",
@@ -35040,7 +46711,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -35057,6 +46728,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -35069,7 +46744,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -35080,7 +46755,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -35088,7 +46763,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -35096,12 +46771,20 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
@@ -35112,7 +46795,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -35129,6 +46812,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -35146,10 +46833,6 @@
                 "$ref": "#/components/schemas/TransferDestinationAssistant",
                 "title": "Assistant"
               },
-              {
-                "$ref": "#/components/schemas/TransferDestinationStep",
-                "title": "Step"
-              },
               {
                 "$ref": "#/components/schemas/TransferDestinationNumber",
                 "title": "Number"
@@ -35162,7 +46845,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -35173,7 +46856,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -35181,7 +46864,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -35189,13 +46872,21 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
           },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
           "toAssistant": {
             "description": "This is the assistant that the call is being transferred to. This is only sent if `destination.type` is \"assistant\".",
             "allOf": [
@@ -35229,7 +46920,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -35246,6 +46937,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -35259,7 +46954,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -35270,7 +46965,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -35278,7 +46973,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -35286,13 +46981,21 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
           },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
           "role": {
             "type": "string",
             "description": "This is the role for which the transcript is for.",
@@ -35325,7 +47028,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -35342,6 +47045,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -35354,7 +47061,7 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -35365,7 +47072,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -35373,7 +47080,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -35381,12 +47088,20 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
@@ -35397,7 +47112,7 @@
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -35414,6 +47129,10 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
@@ -35426,7 +47145,484 @@
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
+          },
+          "artifact": {
+            "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Artifact"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
+          "language": {
+            "type": "string",
+            "description": "This is the language the transcriber is switched to."
+          }
+        },
+        "required": [
+          "type",
+          "language"
+        ]
+      },
+      "ServerMessageVoiceInput": {
+        "type": "object",
+        "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
+          "type": {
+            "type": "string",
+            "description": "This is the type of the message. \"voice-input\" is sent when a generation is requested from voice provider.",
+            "enum": [
+              "voice-input"
+            ]
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "artifact": {
+            "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Artifact"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
+          "input": {
+            "type": "string",
+            "description": "This is the voice input content"
+          }
+        },
+        "required": [
+          "type",
+          "input"
+        ]
+      },
+      "ServerMessageVoiceRequest": {
+        "type": "object",
+        "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
+          "type": {
+            "type": "string",
+            "description": "This is the type of the message. \"voice-request\" is sent when using `assistant.voice={ \"type\": \"custom-voice\" }`.\n\nHere is what the request will look like:\n\nPOST https://{assistant.voice.server.url}\nContent-Type: application/json\n\n{\n  \"messsage\": {\n    \"type\": \"voice-request\",\n    \"text\": \"Hello, world!\",\n    \"sampleRate\": 24000,\n    ...other metadata about the call...\n  }\n}\n\nThe expected response is 1-channel 16-bit raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport:\n```\nresponse.on('data', (chunk: Buffer) => {\n  outputStream.write(chunk);\n});\n```",
+            "enum": [
+              "voice-request"
+            ]
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "artifact": {
+            "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Artifact"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
+          "text": {
+            "type": "string",
+            "description": "This is the text to be synthesized."
+          },
+          "sampleRate": {
+            "type": "number",
+            "description": "This is the sample rate to be synthesized."
+          }
+        },
+        "required": [
+          "type",
+          "text",
+          "sampleRate"
+        ]
+      },
+      "ServerMessageCallEndpointingRequest": {
+        "type": "object",
+        "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
+          "type": {
+            "type": "string",
+            "description": "This is the type of the message. \"call.endpointing.request\" is sent when using `assistant.startSpeakingPlan.smartEndpointingPlan={ \"provider\": \"custom-endpointing-model\" }`.\n\nHere is what the request will look like:\n\nPOST https://{assistant.startSpeakingPlan.smartEndpointingPlan.server.url}\nContent-Type: application/json\n\n{\n  \"message\": {\n    \"type\": \"call.endpointing.request\",\n    \"messages\": [\n      {\n        \"role\": \"user\",\n        \"message\": \"Hello, how are you?\",\n        \"time\": 1234567890,\n        \"secondsFromStart\": 0\n      }\n    ],\n    ...other metadata about the call...\n  }\n}\n\nThe expected response:\n{\n  \"timeoutSeconds\": 0.5\n}",
+            "enum": [
+              "call.endpointing.request"
+            ]
+          },
+          "messages": {
+            "type": "array",
+            "description": "This is the conversation history at the time of the endpointing request.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/UserMessage",
+                  "title": "UserMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/SystemMessage",
+                  "title": "SystemMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/BotMessage",
+                  "title": "BotMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallMessage",
+                  "title": "ToolCallMessage"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolCallResultMessage",
+                  "title": "ToolCallResultMessage"
+                }
+              ]
+            }
+          },
+          "messagesOpenAIFormatted": {
+            "description": "This is just `messages` formatted for OpenAI.",
+            "type": "array",
+            "items": {
+              "$ref": "#/components/schemas/OpenAIMessage"
+            }
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "artifact": {
+            "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Artifact"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          }
+        },
+        "required": [
+          "type",
+          "messagesOpenAIFormatted"
+        ]
+      },
+      "ServerMessageChatCreated": {
+        "type": "object",
+        "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
+          "type": {
+            "type": "string",
+            "description": "This is the type of the message. \"chat.created\" is sent when a new chat is created.",
+            "enum": [
+              "chat.created"
+            ]
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
+          },
+          "artifact": {
+            "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Artifact"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "chat": {
+            "description": "This is the chat that was created.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          }
+        },
+        "required": [
+          "type",
+          "chat"
+        ]
+      },
+      "ServerMessageChatDeleted": {
+        "type": "object",
+        "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
+          "type": {
+            "type": "string",
+            "description": "This is the type of the message. \"chat.deleted\" is sent when a chat is deleted.",
+            "enum": [
+              "chat.deleted"
+            ]
+          },
+          "timestamp": {
+            "type": "number",
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -35437,7 +47633,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -35445,7 +47641,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -35453,28 +47649,32 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
           },
-          "language": {
-            "type": "string",
-            "description": "This is the language the transcriber is switched to."
+          "chat": {
+            "description": "This is the chat that was deleted.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
           }
         },
         "required": [
           "type",
-          "language"
+          "chat"
         ]
       },
-      "ServerMessageVoiceInput": {
+      "ServerMessageSessionCreated": {
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -35491,19 +47691,23 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"voice-input\" is sent when a generation is requested from voice provider.",
+            "description": "This is the type of the message. \"session.created\" is sent when a new session is created.",
             "enum": [
-              "voice-input"
+              "session.created"
             ]
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -35514,7 +47718,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -35522,7 +47726,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -35530,28 +47734,40 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
           },
-          "input": {
-            "type": "string",
-            "description": "This is the voice input content"
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
+          "session": {
+            "description": "This is the session that was created.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Session"
+              }
+            ]
           }
         },
         "required": [
           "type",
-          "input"
+          "session"
         ]
       },
-      "ServerMessageVoiceRequest": {
+      "ServerMessageSessionUpdated": {
         "type": "object",
         "properties": {
           "phoneNumber": {
-            "description": "This is the phone number associated with the call.\n\nThis matches one of the following:\n- `call.phoneNumber`,\n- `call.phoneNumberId`.",
+            "description": "This is the phone number that the message is associated with.",
             "oneOf": [
               {
                 "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
@@ -35568,19 +47784,23 @@
               {
                 "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
                 "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
               }
             ]
           },
           "type": {
             "type": "string",
-            "description": "This is the type of the message. \"voice-request\" is sent when using `assistant.voice={ \"type\": \"custom-voice\" }`.\n\nHere is what the request will look like:\n\nPOST https://{assistant.voice.server.url}\nContent-Type: application/json\n\n{\n  \"messsage\": {\n    \"type\": \"voice-request\",\n    \"text\": \"Hello, world!\",\n    \"sampleRate\": 24000,\n    ...other metadata about the call...\n  }\n}\n\nThe expected response is 1-channel 16-bit raw PCM audio at the sample rate specified in the request. Here is how the response will be piped to the transport:\n```\nresponse.on('data', (chunk: Buffer) => {\n  outputStream.write(chunk);\n});\n```",
+            "description": "This is the type of the message. \"session.updated\" is sent when a session is updated.",
             "enum": [
-              "voice-request"
+              "session.updated"
             ]
           },
           "timestamp": {
             "type": "number",
-            "description": "This is the timestamp of when the message was sent in milliseconds since Unix Epoch."
+            "description": "This is the timestamp of the message."
           },
           "artifact": {
             "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
@@ -35591,7 +47811,7 @@
             ]
           },
           "assistant": {
-            "description": "This is the assistant that is currently active. This is provided for convenience.\n\nThis matches one of the following:\n- `call.assistant`,\n- `call.assistantId`,\n- `call.squad[n].assistant`,\n- `call.squad[n].assistantId`,\n- `call.squadId->[n].assistant`,\n- `call.squadId->[n].assistantId`.",
+            "description": "This is the assistant that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -35599,7 +47819,7 @@
             ]
           },
           "customer": {
-            "description": "This is the customer associated with the call.\n\nThis matches one of the following:\n- `call.customer`,\n- `call.customerId`.",
+            "description": "This is the customer that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateCustomerDTO"
@@ -35607,26 +47827,126 @@
             ]
           },
           "call": {
-            "description": "This is the call object.\n\nThis matches what was returned in POST /call.\n\nNote: This might get stale during the call. To get the latest call object, especially after the call is ended, use GET /call/:id.",
+            "description": "This is the call that the message is associated with.",
             "allOf": [
               {
                 "$ref": "#/components/schemas/Call"
               }
             ]
           },
-          "text": {
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
+          "session": {
+            "description": "This is the session that was updated.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Session"
+              }
+            ]
+          }
+        },
+        "required": [
+          "type",
+          "session"
+        ]
+      },
+      "ServerMessageSessionDeleted": {
+        "type": "object",
+        "properties": {
+          "phoneNumber": {
+            "description": "This is the phone number that the message is associated with.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/CreateByoPhoneNumberDTO",
+                "title": "ByoPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTwilioPhoneNumberDTO",
+                "title": "TwilioPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVonagePhoneNumberDTO",
+                "title": "VonagePhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO",
+                "title": "VapiPhoneNumber"
+              },
+              {
+                "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO",
+                "title": "TelnyxPhoneNumber"
+              }
+            ]
+          },
+          "type": {
             "type": "string",
-            "description": "This is the text to be synthesized."
+            "description": "This is the type of the message. \"session.deleted\" is sent when a session is deleted.",
+            "enum": [
+              "session.deleted"
+            ]
           },
-          "sampleRate": {
+          "timestamp": {
             "type": "number",
-            "description": "This is the sample rate to be synthesized."
+            "description": "This is the timestamp of the message."
+          },
+          "artifact": {
+            "description": "This is a live version of the `call.artifact`.\n\nThis matches what is stored on `call.artifact` after the call.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Artifact"
+              }
+            ]
+          },
+          "assistant": {
+            "description": "This is the assistant that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateAssistantDTO"
+              }
+            ]
+          },
+          "customer": {
+            "description": "This is the customer that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateCustomerDTO"
+              }
+            ]
+          },
+          "call": {
+            "description": "This is the call that the message is associated with.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Call"
+              }
+            ]
+          },
+          "chat": {
+            "description": "This is the chat object.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Chat"
+              }
+            ]
+          },
+          "session": {
+            "description": "This is the session that was deleted.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Session"
+              }
+            ]
           }
         },
         "required": [
           "type",
-          "text",
-          "sampleRate"
+          "session"
         ]
       },
       "ServerMessage": {
@@ -35702,6 +48022,30 @@
               {
                 "$ref": "#/components/schemas/ServerMessageVoiceRequest",
                 "title": "VoiceRequest"
+              },
+              {
+                "$ref": "#/components/schemas/ServerMessageCallEndpointingRequest",
+                "title": "CallEndpointingRequest"
+              },
+              {
+                "$ref": "#/components/schemas/ServerMessageChatCreated",
+                "title": "ChatCreated"
+              },
+              {
+                "$ref": "#/components/schemas/ServerMessageChatDeleted",
+                "title": "ChatDeleted"
+              },
+              {
+                "$ref": "#/components/schemas/ServerMessageSessionCreated",
+                "title": "SessionCreated"
+              },
+              {
+                "$ref": "#/components/schemas/ServerMessageSessionUpdated",
+                "title": "SessionUpdated"
+              },
+              {
+                "$ref": "#/components/schemas/ServerMessageSessionDeleted",
+                "title": "SessionDeleted"
               }
             ]
           }
@@ -35728,11 +48072,10 @@
           },
           "assistantId": {
             "type": "string",
-            "nullable": true,
-            "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead."
+            "description": "This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead.\n\nTo start a call with:\n- Assistant, use `assistantId` or `assistant`\n- Squad, use `squadId` or `squad`\n- Workflow, use `workflowId` or `workflow`"
           },
           "assistant": {
-            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.\n\nIf you're unsure why you're getting an invalid assistant, try logging your response and send the JSON blob to POST /assistant which will return the validation errors.",
+            "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.\n\nTo start a call with:\n- Assistant, use `assistant`\n- Squad, use `squad`\n- Workflow, use `workflow`",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateAssistantDTO"
@@ -35749,16 +48092,36 @@
           },
           "squadId": {
             "type": "string",
-            "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead."
+            "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`"
           },
           "squad": {
-            "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.",
+            "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`",
             "allOf": [
               {
                 "$ref": "#/components/schemas/CreateSquadDTO"
               }
             ]
           },
+          "workflowId": {
+            "type": "string",
+            "description": "This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`"
+          },
+          "workflow": {
+            "description": "This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.\n\nTo start a call with:\n- Assistant, use `assistant` or `assistantId`\n- Squad, use `squad` or `squadId`\n- Workflow, use `workflow` or `workflowId`",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/CreateWorkflowDTO"
+              }
+            ]
+          },
+          "workflowOverrides": {
+            "description": "These are the overrides for the `workflow` or `workflowId`'s settings and template variables.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/WorkflowOverrides"
+              }
+            ]
+          },
           "error": {
             "type": "string",
             "description": "This is the error if the call shouldn't be accepted. This is spoken to the customer.\n\nIf this is sent, `assistantId`, `assistant`, `squadId`, `squad`, and `destination` are ignored."
@@ -35810,20 +48173,17 @@
         "type": "object",
         "properties": {
           "message": {
-            "type": "array",
             "description": "This is the message that will be spoken to the user.\n\nIf this is not returned, assistant will speak:\n1. a `request-complete` or `request-failed` message from `tool.messages`, if it exists\n2. a response generated by the model, if not",
-            "items": {
-              "oneOf": [
-                {
-                  "$ref": "#/components/schemas/ToolMessageComplete",
-                  "title": "ToolMessageComplete"
-                },
-                {
-                  "$ref": "#/components/schemas/ToolMessageFailed",
-                  "title": "ToolMessageFailed"
-                }
-              ]
-            }
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/ToolMessageComplete",
+                "title": "ToolMessageComplete"
+              },
+              {
+                "$ref": "#/components/schemas/ToolMessageFailed",
+                "title": "ToolMessageFailed"
+              }
+            ]
           },
           "name": {
             "type": "string",
@@ -35840,6 +48200,10 @@
           "error": {
             "type": "string",
             "description": "This is the error if the tool call was not successful. This is added to the conversation history.\n\nFurther, if this is returned, assistant will speak:\n1. the `message`, if it exists and is of type `request-failed`\n2. a `request-failed` message from `tool.messages`, if it exists\n3. a response generated by the model, if neither exist"
+          },
+          "metadata": {
+            "type": "object",
+            "description": "This is optional metadata for the tool call result to be sent to the client."
           }
         },
         "required": [
@@ -35873,10 +48237,6 @@
                 "$ref": "#/components/schemas/TransferDestinationAssistant",
                 "title": "Assistant"
               },
-              {
-                "$ref": "#/components/schemas/TransferDestinationStep",
-                "title": "Step"
-              },
               {
                 "$ref": "#/components/schemas/TransferDestinationNumber",
                 "title": "Number"
@@ -35887,6 +48247,27 @@
               }
             ]
           },
+          "message": {
+            "description": "This is the message that will be spoken to the user as the tool is running.",
+            "oneOf": [
+              {
+                "$ref": "#/components/schemas/ToolMessageStart",
+                "title": "ToolMessageStart"
+              },
+              {
+                "$ref": "#/components/schemas/ToolMessageComplete",
+                "title": "ToolMessageComplete"
+              },
+              {
+                "$ref": "#/components/schemas/ToolMessageFailed",
+                "title": "ToolMessageFailed"
+              },
+              {
+                "$ref": "#/components/schemas/ToolMessageDelayed",
+                "title": "ToolMessageDelayed"
+              }
+            ]
+          },
           "error": {
             "type": "string",
             "description": "This is the error message if the transfer should not be made."
@@ -35905,6 +48286,20 @@
           "data"
         ]
       },
+      "ServerMessageResponseCallEndpointingRequest": {
+        "type": "object",
+        "properties": {
+          "timeoutSeconds": {
+            "type": "number",
+            "description": "This is the timeout in seconds to wait before considering the user's speech as finished.",
+            "minimum": 0,
+            "maximum": 15
+          }
+        },
+        "required": [
+          "timeoutSeconds"
+        ]
+      },
       "ServerMessageResponse": {
         "type": "object",
         "properties": {
@@ -35930,6 +48325,10 @@
               {
                 "$ref": "#/components/schemas/ServerMessageResponseVoiceRequest",
                 "title": "VoiceRequest"
+              },
+              {
+                "$ref": "#/components/schemas/ServerMessageResponseCallEndpointingRequest",
+                "title": "CallEndpointingRequest"
               }
             ]
           }
@@ -36002,6 +48401,11 @@
               "say"
             ]
           },
+          "interruptAssistantEnabled": {
+            "type": "boolean",
+            "description": "This is the flag for whether the message should replace existing assistant speech.\n\n@default false",
+            "default": false
+          },
           "content": {
             "type": "string",
             "description": "This is the content to say."
@@ -36012,7 +48416,7 @@
           },
           "interruptionsEnabled": {
             "type": "boolean",
-            "description": "This is the flag for whether the message is interruptible."
+            "description": "This is the flag for whether the message is interruptible by the user."
           }
         }
       },
@@ -36096,69 +48500,6 @@
           "message"
         ]
       },
-      "UserMessage": {
-        "type": "object",
-        "properties": {
-          "role": {
-            "type": "string",
-            "description": "The role of the user in the conversation."
-          },
-          "message": {
-            "type": "string",
-            "description": "The message content from the user."
-          },
-          "time": {
-            "type": "number",
-            "description": "The timestamp when the message was sent."
-          },
-          "endTime": {
-            "type": "number",
-            "description": "The timestamp when the message ended."
-          },
-          "secondsFromStart": {
-            "type": "number",
-            "description": "The number of seconds from the start of the conversation."
-          },
-          "duration": {
-            "type": "number",
-            "description": "The duration of the message in seconds."
-          }
-        },
-        "required": [
-          "role",
-          "message",
-          "time",
-          "endTime",
-          "secondsFromStart"
-        ]
-      },
-      "SystemMessage": {
-        "type": "object",
-        "properties": {
-          "role": {
-            "type": "string",
-            "description": "The role of the system in the conversation."
-          },
-          "message": {
-            "type": "string",
-            "description": "The message content from the system."
-          },
-          "time": {
-            "type": "number",
-            "description": "The timestamp when the message was sent."
-          },
-          "secondsFromStart": {
-            "type": "number",
-            "description": "The number of seconds from the start of the conversation."
-          }
-        },
-        "required": [
-          "role",
-          "message",
-          "time",
-          "secondsFromStart"
-        ]
-      },
       "BotMessage": {
         "type": "object",
         "properties": {
@@ -36260,6 +48601,10 @@
           "secondsFromStart": {
             "type": "number",
             "description": "The number of seconds from the start of the conversation."
+          },
+          "metadata": {
+            "type": "object",
+            "description": "The metadata for the tool call result."
           }
         },
         "required": [
@@ -36498,7 +48843,8 @@
             "enum": [
               "twilio",
               "google",
-              "openai"
+              "openai",
+              "vapi"
             ]
           },
           "promptTextTokens": {
@@ -36533,14 +48879,64 @@
           "cost"
         ]
       },
-      "FunctionToolWithToolCall": {
+      "KnowledgeBaseCost": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
+          "type": {
+            "type": "string",
+            "description": "This is the type of cost, always 'knowledge-base' for this class.",
+            "enum": [
+              "knowledge-base"
+            ]
+          },
+          "model": {
+            "type": "object",
+            "description": "This is the model that was used for processing the knowledge base."
+          },
+          "promptTokens": {
+            "type": "number",
+            "description": "This is the number of prompt tokens used in the knowledge base query."
+          },
+          "completionTokens": {
+            "type": "number",
+            "description": "This is the number of completion tokens generated in the knowledge base query."
           },
+          "cost": {
+            "type": "number",
+            "description": "This is the cost of the component in USD."
+          }
+        },
+        "required": [
+          "type",
+          "model",
+          "promptTokens",
+          "completionTokens",
+          "cost"
+        ]
+      },
+      "ChatCost": {
+        "type": "object",
+        "properties": {
+          "type": {
+            "type": "string",
+            "description": "This is the type of cost, always 'chat' for this class.",
+            "enum": [
+              "chat"
+            ]
+          },
+          "cost": {
+            "type": "number",
+            "description": "This is the cost of the component in USD."
+          }
+        },
+        "required": [
+          "type",
+          "cost"
+        ]
+      },
+      "FunctionToolWithToolCall": {
+        "type": "object",
+        "properties": {
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -36572,22 +48968,27 @@
             ],
             "description": "The type of tool. \"function\" for Function tool."
           },
-          "toolCall": {
-            "$ref": "#/components/schemas/ToolCall"
+          "async": {
+            "type": "boolean",
+            "example": false,
+            "description": "This determines if the tool is async.\n\n  If async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\n  If sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\n  Defaults to synchronous (`false`)."
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/OpenAIFunction"
+                "$ref": "#/components/schemas/Server"
               }
             ]
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
+          "toolCall": {
+            "$ref": "#/components/schemas/ToolCall"
+          },
+          "function": {
+            "description": "This is the function definition of the tool.",
             "allOf": [
               {
-                "$ref": "#/components/schemas/Server"
+                "$ref": "#/components/schemas/OpenAIFunction"
               }
             ]
           }
@@ -36600,11 +49001,6 @@
       "GhlToolWithToolCall": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -36641,22 +49037,6 @@
           },
           "metadata": {
             "$ref": "#/components/schemas/GhlToolMetadata"
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
           }
         },
         "required": [
@@ -36668,11 +49048,6 @@
       "MakeToolWithToolCall": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -36709,22 +49084,6 @@
           },
           "metadata": {
             "$ref": "#/components/schemas/MakeToolMetadata"
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
           }
         },
         "required": [
@@ -36736,11 +49095,6 @@
       "BashToolWithToolCall": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -36779,6 +49133,14 @@
             ],
             "description": "The sub type of tool."
           },
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
           "toolCall": {
             "$ref": "#/components/schemas/ToolCall"
           },
@@ -36789,22 +49151,6 @@
             "enum": [
               "bash"
             ]
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
           }
         },
         "required": [
@@ -36817,11 +49163,6 @@
       "ComputerToolWithToolCall": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -36860,6 +49201,14 @@
             ],
             "description": "The sub type of tool."
           },
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
           "toolCall": {
             "$ref": "#/components/schemas/ToolCall"
           },
@@ -36882,22 +49231,6 @@
           "displayNumber": {
             "type": "number",
             "description": "Optional display number"
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
           }
         },
         "required": [
@@ -36912,11 +49245,6 @@
       "TextEditorToolWithToolCall": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -36955,6 +49283,14 @@
             ],
             "description": "The sub type of tool."
           },
+          "server": {
+            "description": "\n  This is the server where a `tool-calls` webhook will be sent.\n\n  Notes:\n  - Webhook is sent to this server when a tool call is made.\n  - Webhook contains the call, assistant, and phone number objects.\n  - Webhook contains the variables set on the assistant.\n  - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n  - Webhook expects a response with tool call result.",
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/Server"
+              }
+            ]
+          },
           "toolCall": {
             "$ref": "#/components/schemas/ToolCall"
           },
@@ -36965,22 +49301,6 @@
             "enum": [
               "str_replace_editor"
             ]
-          },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
-          },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
           }
         },
         "required": [
@@ -36993,11 +49313,6 @@
       "GoogleCalendarCreateEventToolWithToolCall": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
-          },
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -37027,26 +49342,53 @@
             "enum": [
               "google.calendar.event.create"
             ],
-            "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool."
+            "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar Create Event tool."
           },
           "toolCall": {
             "$ref": "#/components/schemas/ToolCall"
+          }
+        },
+        "required": [
+          "type",
+          "toolCall"
+        ]
+      },
+      "GoogleSheetsRowAppendToolWithToolCall": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
+          "type": {
+            "type": "string",
+            "enum": [
+              "google.sheets.row.append"
+            ],
+            "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets Row Append tool."
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "toolCall": {
+            "$ref": "#/components/schemas/ToolCall"
           }
         },
         "required": [
@@ -37054,14 +49396,95 @@
           "toolCall"
         ]
       },
-      "GoogleSheetsRowAppendToolWithToolCall": {
+      "GoHighLevelCalendarAvailabilityToolWithToolCall": {
         "type": "object",
         "properties": {
-          "async": {
-            "type": "boolean",
-            "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).",
-            "example": false
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "gohighlevel.calendar.availability.check"
+            ],
+            "description": "The type of tool. \"gohighlevel.calendar.availability.check\" for GoHighLevel Calendar Availability Check tool."
+          },
+          "toolCall": {
+            "$ref": "#/components/schemas/ToolCall"
+          }
+        },
+        "required": [
+          "type",
+          "toolCall"
+        ]
+      },
+      "GoHighLevelCalendarEventCreateToolWithToolCall": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
+          },
+          "type": {
+            "type": "string",
+            "enum": [
+              "gohighlevel.calendar.event.create"
+            ],
+            "description": "The type of tool. \"gohighlevel.calendar.event.create\" for GoHighLevel Calendar Event Create tool."
           },
+          "toolCall": {
+            "$ref": "#/components/schemas/ToolCall"
+          }
+        },
+        "required": [
+          "type",
+          "toolCall"
+        ]
+      },
+      "GoHighLevelContactCreateToolWithToolCall": {
+        "type": "object",
+        "properties": {
           "messages": {
             "type": "array",
             "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
@@ -37089,28 +49512,55 @@
           "type": {
             "type": "string",
             "enum": [
-              "google.sheets.row.append"
+              "gohighlevel.contact.create"
             ],
-            "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool."
+            "description": "The type of tool. \"gohighlevel.contact.create\" for GoHighLevel Contact Create tool."
           },
           "toolCall": {
             "$ref": "#/components/schemas/ToolCall"
+          }
+        },
+        "required": [
+          "type",
+          "toolCall"
+        ]
+      },
+      "GoHighLevelContactGetToolWithToolCall": {
+        "type": "object",
+        "properties": {
+          "messages": {
+            "type": "array",
+            "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.",
+            "items": {
+              "oneOf": [
+                {
+                  "$ref": "#/components/schemas/ToolMessageStart",
+                  "title": "ToolMessageStart"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageComplete",
+                  "title": "ToolMessageComplete"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageFailed",
+                  "title": "ToolMessageFailed"
+                },
+                {
+                  "$ref": "#/components/schemas/ToolMessageDelayed",
+                  "title": "ToolMessageDelayed"
+                }
+              ]
+            }
           },
-          "function": {
-            "description": "This is the function definition of the tool.\n\nFor `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.\n\nAn 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/OpenAIFunction"
-              }
-            ]
+          "type": {
+            "type": "string",
+            "enum": [
+              "gohighlevel.contact.get"
+            ],
+            "description": "The type of tool. \"gohighlevel.contact.get\" for GoHighLevel Contact Get tool."
           },
-          "server": {
-            "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis 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.",
-            "allOf": [
-              {
-                "$ref": "#/components/schemas/Server"
-              }
-            ]
+          "toolCall": {
+            "$ref": "#/components/schemas/ToolCall"
           }
         },
         "required": [
