diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index a270759b..4e88a8df 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -1148,6 +1148,22 @@ { "$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": { @@ -1169,7 +1185,11 @@ "google.calendar.availability.check": "#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO", "slack.message.send": "#/components/schemas/CreateSlackSendMessageToolDTO", "sms": "#/components/schemas/CreateSmsSendToolDTO", - "mcp": "#/components/schemas/CreateMcpToolDTO" + "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" } } } @@ -1250,6 +1270,22 @@ { "$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": { @@ -1271,7 +1307,11 @@ "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool", "slack.message.send": "#/components/schemas/SlackSendMessageTool", "sms": "#/components/schemas/SmsSendTool", - "mcp": "#/components/schemas/McpTool" + "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" } } } @@ -1460,6 +1500,22 @@ { "$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": { @@ -1481,7 +1537,11 @@ "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool", "slack.message.send": "#/components/schemas/SlackSendMessageTool", "sms": "#/components/schemas/SmsSendTool", - "mcp": "#/components/schemas/McpTool" + "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" } } } @@ -1588,6 +1648,22 @@ { "$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": { @@ -1609,7 +1685,11 @@ "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool", "slack.message.send": "#/components/schemas/SlackSendMessageTool", "sms": "#/components/schemas/SmsSendTool", - "mcp": "#/components/schemas/McpTool" + "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" } } } @@ -1712,6 +1792,22 @@ { "$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": { @@ -1733,7 +1829,11 @@ "google.calendar.availability.check": "#/components/schemas/UpdateGoogleCalendarCheckAvailabilityToolDTO", "slack.message.send": "#/components/schemas/UpdateSlackSendMessageToolDTO", "sms": "#/components/schemas/UpdateSmsSendToolDTO", - "mcp": "#/components/schemas/UpdateMcpToolDTO" + "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" } } } @@ -1814,6 +1914,22 @@ { "$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": { @@ -1835,7 +1951,11 @@ "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool", "slack.message.send": "#/components/schemas/SlackSendMessageTool", "sms": "#/components/schemas/SmsSendTool", - "mcp": "#/components/schemas/McpTool" + "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" } } } @@ -1939,6 +2059,22 @@ { "$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": { @@ -1960,7 +2096,11 @@ "google.calendar.availability.check": "#/components/schemas/GoogleCalendarCheckAvailabilityTool", "slack.message.send": "#/components/schemas/SlackSendMessageTool", "sms": "#/components/schemas/SmsSendTool", - "mcp": "#/components/schemas/McpTool" + "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" } } } @@ -2546,7 +2686,7 @@ "/workflow": { "get": { "operationId": "WorkflowController_findAll", - "summary": "Get Workflows", + "summary": "[BETA] Get Workflows", "parameters": [], "responses": { "200": { @@ -2574,7 +2714,7 @@ }, "post": { "operationId": "WorkflowController_create", - "summary": "Create Workflow", + "summary": "[BETA] Create Workflow", "parameters": [], "requestBody": { "required": true, @@ -2611,7 +2751,7 @@ "/workflow/{id}": { "get": { "operationId": "WorkflowController_findOne", - "summary": "Get Workflow", + "summary": "[BETA] Get Workflow", "parameters": [ { "name": "id", @@ -2645,7 +2785,7 @@ }, "delete": { "operationId": "WorkflowController_delete", - "summary": "Delete Workflow", + "summary": "[BETA] Delete Workflow", "parameters": [ { "name": "id", @@ -2679,7 +2819,7 @@ }, "patch": { "operationId": "WorkflowController_update", - "summary": "Update Workflow", + "summary": "[BETA] Update Workflow", "parameters": [ { "name": "id", @@ -4615,6 +4755,48 @@ "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": [ + { + "$ref": "#/components/schemas/Mono" + } + ] + } + } + }, "Artifact": { "type": "object", "properties": { @@ -4655,19 +4837,31 @@ }, "recordingUrl": { "type": "string", - "description": "This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`." + "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`." + "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`." + "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." + "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" + } + ] }, "transcript": { "type": "string", @@ -5109,7 +5303,8 @@ "base-finance", "base-conversationalai", "base-voicemail", - "base-video" + "base-video", + "whisper" ] }, { @@ -5121,7 +5316,11 @@ "type": "string", "description": "This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview", "enum": [ + "ar", + "az", + "ba", "bg", + "br", "ca", "cs", "da", @@ -5139,19 +5338,28 @@ "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", @@ -5163,6 +5371,11 @@ "ro", "ru", "sk", + "sl", + "sn", + "so", + "sr", + "su", "sv", "sv-SE", "ta", @@ -5170,8 +5383,11 @@ "th", "th-TH", "tr", + "tt", "uk", + "ur", "vi", + "yo", "zh", "zh-CN", "zh-HK", @@ -5878,6 +6094,7 @@ "type": "string", "description": "This is the model that will be used for the transcription.", "enum": [ + "gemini-2.5-flash-preview-04-17", "gemini-2.0-flash-thinking-exp", "gemini-2.0-pro-exp-02-05", "gemini-2.0-flash", @@ -6328,7 +6545,8 @@ "base-finance", "base-conversationalai", "base-voicemail", - "base-video" + "base-video", + "whisper" ] }, { @@ -6340,7 +6558,11 @@ "type": "string", "description": "This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview", "enum": [ + "ar", + "az", + "ba", "bg", + "br", "ca", "cs", "da", @@ -6358,19 +6580,28 @@ "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", @@ -6382,6 +6613,11 @@ "ro", "ru", "sk", + "sl", + "sn", + "so", + "sr", + "su", "sv", "sv-SE", "ta", @@ -6389,8 +6625,11 @@ "th", "th-TH", "tr", + "tt", "uk", + "ur", "vi", + "yo", "zh", "zh-CN", "zh-HK", @@ -7057,6 +7296,7 @@ "type": "string", "description": "This is the model that will be used for the transcription.", "enum": [ + "gemini-2.5-flash-preview-04-17", "gemini-2.0-flash-thinking-exp", "gemini-2.0-pro-exp-02-05", "gemini-2.0-flash", @@ -7464,7 +7704,7 @@ "maxLength": 1000 }, "value": { - "type": "object", + "type": "string", "description": "This is the value you want to compare against the parameter.", "maxLength": 1000 } @@ -8282,11 +8522,35 @@ "stepName" ] }, + "TransferFallbackPlan": { + "type": "object", + "properties": { + "message": { + "description": "This is the message the assistant will deliver to the customer if the transfer fails.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/CustomMessage" + } + ] + }, + "endCallEnabled": { + "type": "boolean", + "description": "This controls what happens after delivering the failure message to the customer.\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": [ + "message" + ] + }, "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`", + "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`- {{systemPrompt}}: The system prompt of the call from `assistant.model.messages[type=system].content`- {{endedReason}}: The ended reason of the call from `call.endedReason`", "type": "array", "items": { "type": "object" @@ -8309,7 +8573,7 @@ "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\n@default 'blind-transfer'", + "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", @@ -8317,11 +8581,12 @@ "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-wait-for-operator-to-speak-first-and-then-say-summary", + "warm-transfer-experimental" ] }, "message": { - "description": "This is the message the assistant will deliver to the destination party before connecting the customer.\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`.", + "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": [ { "type": "string" @@ -8341,18 +8606,34 @@ "dial" ] }, + "holdAudioUrl": { + "type": "string", + "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." + }, "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```\nHello, transferring a customer to you.\n\nThey called about billing questions.\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`.", + "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" } ] + }, + "sipHeadersInReferToEnabled": { + "type": "boolean", + "description": "This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params.\n\n@default false" + }, + "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": [ @@ -8592,6 +8873,7 @@ "type": "string", "description": "The model to use for the knowledge base", "enum": [ + "gemini-2.5-flash-preview-04-17", "gemini-2.0-flash-thinking-exp", "gemini-2.0-pro-exp-02-05", "gemini-2.0-flash", @@ -8932,6 +9214,246 @@ "type" ] }, + "CreateGoHighLevelCalendarAvailabilityToolDTO": { + "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." + }, + "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" + ] + }, + "CreateGoHighLevelCalendarEventCreateToolDTO": { + "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.event.create" + ], + "description": "The type of tool. \"gohighlevel.calendar.event.create\" for GoHighLevel Calendar event create 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" + ] + }, + "CreateGoHighLevelContactCreateToolDTO": { + "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.contact.create" + ], + "description": "The type of tool. \"gohighlevel.contact.create\" for GoHighLevel contact create 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" + ] + }, + "CreateGoHighLevelContactGetToolDTO": { + "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.contact.get" + ], + "description": "The type of tool. \"gohighlevel.contact.get\" for GoHighLevel contact get 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" + ] + }, "AnyscaleModel": { "type": "object", "properties": { @@ -8994,6 +9516,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -9138,6 +9676,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -9279,6 +9833,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -9406,6 +9976,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -9550,6 +10136,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -9673,6 +10275,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -9869,6 +10487,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -9897,6 +10531,7 @@ "type": "string", "description": "This is the Google model that will be used.", "enum": [ + "gemini-2.5-flash-preview-04-17", "gemini-2.0-flash-thinking-exp", "gemini-2.0-pro-exp-02-05", "gemini-2.0-flash", @@ -10014,6 +10649,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -10045,12 +10696,15 @@ "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" + "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" ] }, "provider": { @@ -10148,6 +10802,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -10274,240 +10944,278 @@ { "$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" - } - ] - }, - "knowledgeBaseId": { - "type": "string", - "description": "This is the ID of the knowledge base the model will use." - }, - "provider": { - "type": "string", - "description": "This is the provider that will be used for the model.", - "enum": [ - "openai" - ] - }, - "model": { - "type": "string", - "description": "This is the OpenAI model that will be used.", - "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" - ] - }, - "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" - ] - } - }, - "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" - ] - }, - "OpenRouterModel": { - "type": "object", - "properties": { - "messages": { - "description": "This is the starting state for the conversation.", - "type": "array", - "items": { - "$ref": "#/components/schemas/OpenAIMessage" - } - }, - "tools": { - "type": "array", - "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\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/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" }, { - "$ref": "#/components/schemas/CreateFunctionToolDTO", - "title": "FunctionTool" + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" }, { - "$ref": "#/components/schemas/CreateGhlToolDTO", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/CreateMakeToolDTO", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/CreateTransferCallToolDTO", - "title": "TransferTool" + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" }, { - "$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/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" + } + ] + } + }, + "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": "string", + "description": "This is the provider that will be used for the model.", + "enum": [ + "openai" + ] + }, + "model": { + "type": "string", + "description": "This is the OpenAI model that will be used.", + "enum": [ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-4.1-nano", + "gpt-4.5-preview", + "chatgpt-4o-latest", + "o3", + "o3-mini", + "o4-mini", + "o1-preview", + "o1-preview-2024-09-12", + "o1-mini", + "o1-mini-2024-09-12", + "gpt-4o-realtime-preview-2024-10-01", + "gpt-4o-realtime-preview-2024-12-17", + "gpt-4o-mini-realtime-preview-2024-12-17", + "gpt-4o-mini-2024-07-18", + "gpt-4o-mini", + "gpt-4o", + "gpt-4o-2024-05-13", + "gpt-4o-2024-08-06", + "gpt-4o-2024-11-20", + "gpt-4-turbo", + "gpt-4-turbo-2024-04-09", + "gpt-4-turbo-preview", + "gpt-4-0125-preview", + "gpt-4-1106-preview", + "gpt-4", + "gpt-4-0613", + "gpt-3.5-turbo", + "gpt-3.5-turbo-0125", + "gpt-3.5-turbo-1106", + "gpt-3.5-turbo-16k", + "gpt-3.5-turbo-0613" + ] + }, + "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", + "o3-mini", + "o4-mini", + "o1-preview", + "o1-preview-2024-09-12", + "o1-mini", + "o1-mini-2024-09-12", + "gpt-4o-realtime-preview-2024-10-01", + "gpt-4o-realtime-preview-2024-12-17", + "gpt-4o-mini-realtime-preview-2024-12-17", + "gpt-4o-mini-2024-07-18", + "gpt-4o-mini", + "gpt-4o", + "gpt-4o-2024-05-13", + "gpt-4o-2024-08-06", + "gpt-4o-2024-11-20", + "gpt-4-turbo", + "gpt-4-turbo-2024-04-09", + "gpt-4-turbo-preview", + "gpt-4-0125-preview", + "gpt-4-1106-preview", + "gpt-4", + "gpt-4-0613", + "gpt-3.5-turbo", + "gpt-3.5-turbo-0125", + "gpt-3.5-turbo-1106", + "gpt-3.5-turbo-16k", + "gpt-3.5-turbo-0613" + ], + "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", + "o3-mini", + "o4-mini", + "o1-preview", + "o1-preview-2024-09-12", + "o1-mini", + "o1-mini-2024-09-12", + "gpt-4o-realtime-preview-2024-10-01", + "gpt-4o-realtime-preview-2024-12-17", + "gpt-4o-mini-realtime-preview-2024-12-17", + "gpt-4o-mini-2024-07-18", + "gpt-4o-mini", + "gpt-4o", + "gpt-4o-2024-05-13", + "gpt-4o-2024-08-06", + "gpt-4o-2024-11-20", + "gpt-4-turbo", + "gpt-4-turbo-2024-04-09", + "gpt-4-turbo-preview", + "gpt-4-0125-preview", + "gpt-4-1106-preview", + "gpt-4", + "gpt-4-0613", + "gpt-3.5-turbo", + "gpt-3.5-turbo-0125", + "gpt-3.5-turbo-1106", + "gpt-3.5-turbo-16k", + "gpt-3.5-turbo-0613" + ] + } + }, + "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" + ] + }, + "OpenRouterModel": { + "type": "object", + "properties": { + "messages": { + "description": "This is the starting state for the conversation.", + "type": "array", + "items": { + "$ref": "#/components/schemas/OpenAIMessage" + } + }, + "tools": { + "type": "array", + "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\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" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -10631,6 +11339,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -10754,345 +11478,1000 @@ { "$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" - } - ] - }, - "knowledgeBaseId": { - "type": "string", - "description": "This is the ID of the knowledge base the model will use." - }, - "provider": { - "type": "string", - "enum": [ - "together-ai" - ] - }, - "model": { - "type": "string", - "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b" - }, - "temperature": { - "type": "number", - "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.", - "minimum": 0, - "maximum": 2 - }, - "maxTokens": { - "type": "number", - "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.", - "minimum": 50, - "maximum": 10000 - }, - "emotionRecognitionEnabled": { - "type": "boolean", - "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\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" - ] - }, - "AIEdgeCondition": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ai" - ] - }, - "prompt": { - "type": "string", - "description": "This is the prompt for the AI edge condition. It should evaluate to a boolean.", - "maxLength": 1000 - } - }, - "required": [ - "type", - "prompt" - ] - }, - "LogicEdgeCondition": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "logic" - ] - }, - "liquid": { - "type": "string", - "maxLength": 100 - } - }, - "required": [ - "type", - "liquid" - ] - }, - "FailedEdgeCondition": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "failed" - ] - } - }, - "required": [ - "type" - ] - }, - "Edge": { - "type": "object", - "properties": { - "condition": { - "oneOf": [ - { - "$ref": "#/components/schemas/AIEdgeCondition", - "title": "AIEdgeCondition" - }, - { - "$ref": "#/components/schemas/LogicEdgeCondition", - "title": "LogicEdgeCondition" - }, - { - "$ref": "#/components/schemas/FailedEdgeCondition", - "title": "FailedEdgeCondition" - } - ] - }, - "from": { - "type": "string", - "maxLength": 80 - }, - "to": { - "type": "string", - "maxLength": 80 - }, - "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the edge." - } - }, - "required": [ - "from", - "to" - ] - }, - "Workflow": { - "type": "object", - "properties": { - "nodes": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/Say", - "title": "Say" }, { - "$ref": "#/components/schemas/Gather", - "title": "Gather" + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" + } + ] + } + }, + "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": "string", + "enum": [ + "together-ai" + ] + }, + "model": { + "type": "string", + "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b" + }, + "temperature": { + "type": "number", + "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.", + "minimum": 0, + "maximum": 2 + }, + "maxTokens": { + "type": "number", + "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.", + "minimum": 50, + "maximum": 10000 + }, + "emotionRecognitionEnabled": { + "type": "boolean", + "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\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" + ] + }, + "Start": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "start" + ] + }, + "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" + ] + }, + "WorkflowAssistant": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "assistant" + ] + }, + "assistantId": { + "type": "string" + }, + "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", + "assistantId", + "name" + ] + }, + "Say": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "say" + ] + }, + "exact": { + "type": "string", + "maxLength": 1000 + }, + "prompt": { + "type": "string", + "maxLength": 1000 + }, + "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" + ] + }, + "SayHook": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "say" + ] + }, + "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." + }, + "exact": { + "type": "string", + "maxLength": 1000 + }, + "prompt": { + "type": "string", + "maxLength": 1000 + } + }, + "required": [ + "type" + ] + }, + "Hook": { + "type": "object", + "properties": { + "on": { + "type": "string", + "enum": [ + "task.start", + "task.output.confirmation", + "task.delayed" + ], + "maxLength": 80 + }, + "do": { + "type": "array", + "items": { + "$ref": "#/components/schemas/SayHook" + } + } + }, + "required": [ + "on", + "do" + ] + }, + "Gather": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "gather" + ] + }, + "output": { + "$ref": "#/components/schemas/JsonSchema" + }, + "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." + }, + "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" + } + }, + "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" + }, + "literalTemplate": { + "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?\"" + }, + "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", + "output", + "name" + ] + }, + "ApiRequest": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "apiRequest" + ] + }, + "method": { + "type": "string", + "enum": [ + "POST", + "GET" + ] + }, + "url": { + "type": "string", + "description": "Api endpoint to send requests to." + }, + "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" + } + ] + }, + "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.", + "allOf": [ + { + "$ref": "#/components/schemas/JsonSchema" + } + ] + }, + "mode": { + "type": "string", + "description": "This is the mode of the Api Request.\nWe only support BLOCKING and BACKGROUND for now.", + "enum": [ + "blocking", + "background" + ] + }, + "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" + } + }, + "output": { + "description": "This is the schema for the outputs of the Api Request.", + "allOf": [ + { + "$ref": "#/components/schemas/JsonSchema" + } + ] + }, + "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", + "method", + "url", + "mode", + "name" + ] + }, + "Hangup": { + "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" + ] + }, + "Transfer": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "transfer" + ] + }, + "destination": { + "type": "object" + }, + "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", + "destination", + "name" + ] + }, + "WorkflowOpenAIModel": { + "type": "object", + "properties": { + "model": { + "type": "string", + "description": "This is the specific OpenAI model that will be used.", + "maxLength": 100, + "enum": [ + "gpt-4.1", + "gpt-4.1-mini", + "gpt-4.1-nano", + "gpt-4.5-preview", + "chatgpt-4o-latest", + "o3", + "o3-mini", + "o4-mini", + "o1-preview", + "o1-preview-2024-09-12", + "o1-mini", + "o1-mini-2024-09-12", + "gpt-4o-realtime-preview-2024-10-01", + "gpt-4o-realtime-preview-2024-12-17", + "gpt-4o-mini-realtime-preview-2024-12-17", + "gpt-4o-mini-2024-07-18", + "gpt-4o-mini", + "gpt-4o", + "gpt-4o-2024-05-13", + "gpt-4o-2024-08-06", + "gpt-4o-2024-11-20", + "gpt-4-turbo", + "gpt-4-turbo-2024-04-09", + "gpt-4-turbo-preview", + "gpt-4-0125-preview", + "gpt-4-1106-preview", + "gpt-4", + "gpt-4-0613", + "gpt-3.5-turbo", + "gpt-3.5-turbo-0125", + "gpt-3.5-turbo-1106", + "gpt-3.5-turbo-16k", + "gpt-3.5-turbo-0613" + ] + }, + "provider": { + "type": "string", + "description": "This is the provider of the model. Ex. openai", + "enum": [ + "openai" + ] + }, + "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": [ + "model", + "provider" + ] + }, + "WorkflowAnthropicModel": { + "type": "object", + "properties": { + "model": { + "type": "string", + "description": "This is the specific Anthropic/Claude 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" + ] + }, + "provider": { + "type": "string", + "description": "This is the provider of the model. Ex. anthropic", + "enum": [ + "anthropic" + ] + }, + "thinking": { + "description": "This is the 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 of the model.", + "minimum": 0, + "maximum": 2 + }, + "maxTokens": { + "type": "number", + "description": "This is the max tokens of the model.", + "minimum": 50, + "maximum": 10000 + } + }, + "required": [ + "model", + "provider" + ] + }, + "GlobalNodePlan": { + "type": "object", + "properties": { + "enabled": { + "type": "boolean", + "description": "This is the flag to determine if this node is a global node\n\n@default false", + "default": false + }, + "enterCondition": { + "type": "string", + "description": "This is the condition that will be checked to determine if the global node should be executed.\n\n@default ''", + "maxLength": 1000, + "default": "" + } + } + }, + "Conversation": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "conversation" + ] + }, + "model": { + "description": "This is the model for the Conversation Task.", + "oneOf": [ + { + "$ref": "#/components/schemas/WorkflowOpenAIModel", + "title": "OpenAI" + }, + { + "$ref": "#/components/schemas/WorkflowAnthropicModel", + "title": "Anthropic" + } + ], + "default": { + "provider": "openai" + } + }, + "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" + } + ] + }, + "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" + } + }, + "prompt": { + "type": "string", + "maxLength": 5000 + }, + "globalNodePlan": { + "$ref": "#/components/schemas/GlobalNodePlan" + }, + "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" + ] + }, + "AIEdgeCondition": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "ai" + ] + }, + "prompt": { + "type": "string", + "description": "This is the prompt for the AI edge condition. It should evaluate to a boolean.", + "maxLength": 1000 + } + }, + "required": [ + "type", + "prompt" + ] + }, + "LogicEdgeCondition": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "logic" + ] + }, + "liquid": { + "type": "string", + "maxLength": 1000 + } + }, + "required": [ + "type", + "liquid" + ] + }, + "FailedEdgeCondition": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "failed" + ] + } + }, + "required": [ + "type" + ] + }, + "Edge": { + "type": "object", + "properties": { + "condition": { + "oneOf": [ + { + "$ref": "#/components/schemas/AIEdgeCondition", + "title": "AIEdgeCondition" + }, + { + "$ref": "#/components/schemas/LogicEdgeCondition", + "title": "LogicEdgeCondition" + }, + { + "$ref": "#/components/schemas/FailedEdgeCondition", + "title": "FailedEdgeCondition" + } + ] + }, + "from": { + "type": "string", + "maxLength": 80 + }, + "to": { + "type": "string", + "maxLength": 80 + }, + "metadata": { + "type": "object", + "description": "This is for metadata you want to store on the edge." + } + }, + "required": [ + "from", + "to" + ] + }, + "WorkflowUserEditable": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/Start", + "title": "Start" + }, + { + "$ref": "#/components/schemas/WorkflowAssistant", + "title": "Assistant" + }, + { + "$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/Conversation", + "title": "Conversation" + } + ] + } + }, + "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" + }, + { + "$ref": "#/components/schemas/XaiModel", + "title": "XAI" + } + ] + }, + "name": { + "type": "string", + "maxLength": 80 + }, + "edges": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Edge" + } + } + }, + "required": [ + "nodes", + "name", + "edges" + ] + }, + "VapiModel": { + "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" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" }, { - "$ref": "#/components/schemas/ApiRequest", - "title": "ApiRequest" + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" }, { - "$ref": "#/components/schemas/Hangup", - "title": "Hangup" + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" }, { - "$ref": "#/components/schemas/Transfer", - "title": "Transfer" - } - ] - } - }, - "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" - }, - { - "$ref": "#/components/schemas/XaiModel", - "title": "XAI" - } - ] - }, - "id": { - "type": "string" - }, - "orgId": { - "type": "string" - }, - "createdAt": { - "format": "date-time", - "type": "string" - }, - "updatedAt": { - "format": "date-time", - "type": "string" - }, - "name": { - "type": "string", - "maxLength": 80 - }, - "edges": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Edge" - } - } - }, - "required": [ - "nodes", - "id", - "orgId", - "createdAt", - "updatedAt", - "name", - "edges" - ] - }, - "VapiModel": { - "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" + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -11131,7 +12510,7 @@ "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" + "$ref": "#/components/schemas/WorkflowUserEditable" } ] }, @@ -11228,6 +12607,22 @@ { "$ref": "#/components/schemas/CreateSlackSendMessageToolDTO", "title": "SlackSendMessageTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] } @@ -11429,7 +12824,8 @@ "unit", "percentage", "phoneNumber", - "number" + "number", + "stripAsterisk" ], "items": { "type": "string", @@ -11449,7 +12845,8 @@ "unit", "percentage", "phoneNumber", - "number" + "number", + "stripAsterisk" ] } } @@ -11608,6 +13005,12 @@ "AzureVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -11718,6 +13121,12 @@ "CartesiaVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -11796,6 +13205,12 @@ "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.", @@ -11836,6 +13251,12 @@ "DeepgramVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -11949,6 +13370,12 @@ "ElevenLabsVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -12078,6 +13505,12 @@ "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.", @@ -12131,6 +13564,12 @@ "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.", @@ -12187,6 +13626,12 @@ "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.", @@ -12255,6 +13700,12 @@ "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.", @@ -12329,6 +13780,12 @@ "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.", @@ -12493,6 +13950,12 @@ "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.", @@ -12659,6 +14122,12 @@ "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.", @@ -12740,231 +14209,250 @@ "voiceId" ] }, - "TavusConversationProperties": { + "TavusConversationProperties": { + "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": { + "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", + "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": { + "type": "string", + "description": "The name of the S3 bucket where the recording will be stored." + }, + "recordingS3BucketRegion": { + "type": "string", + "description": "The region of the S3 bucket where the recording will be stored." + }, + "awsAssumeRoleArn": { + "type": "string", + "description": "The ARN of the role that will be assumed to access the S3 bucket." + } + } + }, + "TavusVoice": { + "type": "object", + "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, + "provider": { + "type": "string", + "description": "This is the voice provider that will be used.", + "enum": [ + "tavus" + ] + }, + "voiceId": { + "description": "This is the provider-specific ID that will be used.", + "oneOf": [ + { + "type": "string", + "enum": [ + "r52da2535a" + ], + "title": "Preset Voice Options" + }, + { + "type": "string", + "title": "Tavus Voice ID" + } + ] + }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + }, + "personaId": { + "type": "string", + "description": "This is the unique identifier for the persona that the replica will use in the conversation." + }, + "callbackUrl": { + "type": "string", + "description": "This is the url that will receive webhooks with updates regarding the conversation state." + }, + "conversationName": { + "type": "string", + "description": "This is the name for the conversation." + }, + "conversationalContext": { + "type": "string", + "description": "This is the context that will be appended to any context provided in the persona, if one is provided." + }, + "customGreeting": { + "type": "string", + "description": "This is the custom greeting that the replica will give once a participant joines the conversation." + }, + "properties": { + "description": "These are optional properties used to customize the conversation.", + "allOf": [ + { + "$ref": "#/components/schemas/TavusConversationProperties" + } + ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackPlan" + } + ] + } + }, + "required": [ + "provider", + "voiceId" + ] + }, + "VapiVoice": { + "type": "object", + "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, + "provider": { + "type": "string", + "description": "This is the voice provider that will be used.", + "enum": [ + "vapi" + ] + }, + "voiceId": { + "type": "string", + "description": "The voices provided by Vapi", + "enum": [ + "Elliot", + "Kylie", + "Rohan", + "Lily", + "Savannah", + "Hana", + "Neha", + "Cole", + "Harry", + "Paige", + "Spencer" + ] + }, + "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": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackPlan" + } + ] + } + }, + "required": [ + "provider", + "voiceId" + ] + }, + "FallbackAzureVoice": { "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": { + "cachingEnabled": { "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", - "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": { - "type": "string", - "description": "The name of the S3 bucket where the recording will be stored." - }, - "recordingS3BucketRegion": { - "type": "string", - "description": "The region of the S3 bucket where the recording will be stored." - }, - "awsAssumeRoleArn": { - "type": "string", - "description": "The ARN of the role that will be assumed to access the S3 bucket." - } - } - }, - "TavusVoice": { - "type": "object", - "properties": { - "provider": { - "type": "string", - "description": "This is the voice provider that will be used.", - "enum": [ - "tavus" - ] - }, - "voiceId": { - "description": "This is the provider-specific ID that will be used.", - "oneOf": [ - { - "type": "string", - "enum": [ - "r52da2535a" - ], - "title": "Preset Voice Options" - }, - { - "type": "string", - "title": "Tavus Voice ID" - } - ] - }, - "chunkPlan": { - "description": "This is the plan for chunking the model output before it is sent to the voice provider.", - "allOf": [ - { - "$ref": "#/components/schemas/ChunkPlan" - } - ] - }, - "personaId": { - "type": "string", - "description": "This is the unique identifier for the persona that the replica will use in the conversation." - }, - "callbackUrl": { - "type": "string", - "description": "This is the url that will receive webhooks with updates regarding the conversation state." - }, - "conversationName": { - "type": "string", - "description": "This is the name for the conversation." - }, - "conversationalContext": { - "type": "string", - "description": "This is the context that will be appended to any context provided in the persona, if one is provided." - }, - "customGreeting": { - "type": "string", - "description": "This is the custom greeting that the replica will give once a participant joines the conversation." - }, - "properties": { - "description": "These are optional properties used to customize the conversation.", - "allOf": [ - { - "$ref": "#/components/schemas/TavusConversationProperties" - } - ] - }, - "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", - "allOf": [ - { - "$ref": "#/components/schemas/FallbackPlan" - } - ] - } - }, - "required": [ - "provider", - "voiceId" - ] - }, - "VapiVoice": { - "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" - ] - }, - "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": [ - { - "$ref": "#/components/schemas/ChunkPlan" - } - ] + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true }, - "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" - ] - }, - "FallbackAzureVoice": { - "type": "object", - "properties": { "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -13013,6 +14501,12 @@ "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.", @@ -13083,6 +14577,12 @@ "FallbackCustomVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported.", @@ -13115,6 +14615,12 @@ "FallbackDeepgramVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -13220,6 +14726,12 @@ "FallbackElevenLabsVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -13341,6 +14853,12 @@ "FallbackHumeVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -13386,6 +14904,12 @@ "FallbackLMNTVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -13434,6 +14958,12 @@ "FallbackNeuphonicVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -13494,6 +15024,12 @@ "FallbackOpenAIVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -13560,6 +15096,12 @@ "FallbackPlayHTVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -13716,6 +15258,12 @@ "FallbackRimeAIVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -13874,6 +15422,12 @@ "FallbackSmallestAIVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -13950,6 +15504,12 @@ "FallbackTavusVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -14018,6 +15578,12 @@ "FallbackVapiVoice": { "type": "object", "properties": { + "cachingEnabled": { + "type": "boolean", + "description": "This is the flag to toggle voice caching for the assistant.", + "example": true, + "default": true + }, "provider": { "type": "string", "description": "This is the voice provider that will be used.", @@ -14030,6 +15596,7 @@ "description": "The voices provided by Vapi", "enum": [ "Elliot", + "Kylie", "Rohan", "Lily", "Savannah", @@ -14343,10 +15910,13 @@ "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-mini-2024-07-18", "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", @@ -14361,10 +15931,13 @@ "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-mini-2024-07-18", "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", @@ -15475,6 +17048,14 @@ "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" }, @@ -15487,7 +17068,6 @@ }, "required": [ "provider", - "authToken", "accountSid" ] }, @@ -15699,9 +17279,265 @@ "type" ] }, + "FunctionCallAssistantHookAction": { + "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": [ + "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" + } + ] + }, + "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" + ] + }, + "SayAssistantHookAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "This is the type of action - must be \"say\"", + "enum": [ + "say" + ] + }, + "exact": { + "type": "object", + "description": "This is the message to say" + } + }, + "required": [ + "type", + "exact" + ] + }, + "AssistantHookFilter": { + "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" + ] + }, + "AssistantHookCallEnding": { + "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/TransferAssistantHookAction", + "title": "TransferAssistantHookAction" + }, + { + "$ref": "#/components/schemas/FunctionCallAssistantHookAction", + "title": "FunctionCallAssistantHookAction" + } + ] + } + }, + "filters": { + "description": "This is the set of filters that must match for the hook to trigger", + "type": "array", + "items": { + "$ref": "#/components/schemas/AssistantHookFilter" + } + } + }, + "required": [ + "on", + "do" + ] + }, + "AssistantHookAssistantSpeechInterrupted": { + "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/TransferAssistantHookAction", + "title": "TransferAssistantHookAction" + }, + { + "$ref": "#/components/schemas/FunctionCallAssistantHookAction", + "title": "FunctionCallAssistantHookAction" + }, + { + "$ref": "#/components/schemas/SayAssistantHookAction", + "title": "SayAssistantHookAction" + } + ] + } + } + }, + "required": [ + "on", + "do" + ] + }, + "AssistantHookCustomerSpeechInterrupted": { + "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/TransferAssistantHookAction", + "title": "TransferAssistantHookAction" + }, + { + "$ref": "#/components/schemas/FunctionCallAssistantHookAction", + "title": "FunctionCallAssistantHookAction" + }, + { + "$ref": "#/components/schemas/SayAssistantHookAction", + "title": "SayAssistantHookAction" + } + ] + } + } + }, + "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.", @@ -15709,22 +17545,29 @@ "google" ] }, - "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 + "backoffPlan": { + "description": "This is the backoff plan for the voicemail detection.", + "allOf": [ + { + "$ref": "#/components/schemas/VoicemailDetectionBackoffPlan" + } + ] } }, "required": [ - "provider", - "voicemailExpectedDurationSeconds" + "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.", @@ -15732,17 +17575,17 @@ "openai" ] }, - "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 + "backoffPlan": { + "description": "This is the backoff plan for the voicemail detection.", + "allOf": [ + { + "$ref": "#/components/schemas/VoicemailDetectionBackoffPlan" + } + ] } }, "required": [ - "provider", - "voicemailExpectedDurationSeconds" + "provider" ] }, "TwilioVoicemailDetectionPlan": { @@ -15817,6 +17660,36 @@ "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" + ] + }, "CompliancePlan": { "type": "object", "properties": { @@ -15840,7 +17713,7 @@ "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`", + "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`- {{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" @@ -15905,7 +17778,7 @@ "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`", + "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`- {{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" @@ -16137,7 +18010,7 @@ }, "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\"", + "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", @@ -16186,9 +18059,19 @@ "example": 0.4 }, "smartEndpointingEnabled": { - "type": "object", "example": false, - "deprecated": true + "deprecated": true, + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "string", + "enum": [ + "livekit" + ] + } + ] }, "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`.", @@ -16382,72 +18265,6 @@ } } }, - "AssistantHookFilter": { - "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" - ] - }, - "AssistantHookActionBase": { - "type": "object", - "properties": {} - }, - "AssistantHooks": { - "type": "object", - "properties": { - "on": { - "type": "string", - "description": "This is the event that triggers this hook", - "enum": [ - "call.ending" - ], - "maxLength": 1000 - }, - "filters": { - "description": "This is the set of filters that must match for the hook to trigger", - "type": "array", - "items": { - "$ref": "#/components/schemas/AssistantHookFilter" - } - }, - "do": { - "description": "This is the set of actions to perform when the hook triggers", - "type": "array", - "items": { - "$ref": "#/components/schemas/AssistantHookActionBase" - } - } - }, - "required": [ - "on", - "do" - ] - }, "KeypadInputPlan": { "type": "object", "properties": { @@ -16683,6 +18500,10 @@ { "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan", "title": "Twilio" + }, + { + "$ref": "#/components/schemas/VapiVoicemailDetectionPlan", + "title": "Vapi" } ] }, @@ -16701,6 +18522,7 @@ "transcript", "tool-calls", "tool-calls-result", + "tool.completed", "transfer-update", "user-interrupted", "voice-input", @@ -16736,6 +18558,7 @@ "transcript", "tool-calls", "tool-calls-result", + "tool.completed", "transfer-update", "user-interrupted", "voice-input", @@ -17060,6 +18883,10 @@ { "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO", "title": "SlackOAuth2AuthorizationCredential" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO", + "title": "GoHighLevelMCPCredential" } ], "discriminator": { @@ -17111,11 +18938,32 @@ "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" + "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO", + "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO" } } } }, + "hooks": { + "type": "array", + "description": "This is a set of actions that will be performed on certain events.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AssistantHookCallEnding", + "title": "AssistantHookCallEnding" + }, + { + "$ref": "#/components/schemas/AssistantHookAssistantSpeechInterrupted", + "title": "AssistantHookAssistantSpeechInterrupted" + }, + { + "$ref": "#/components/schemas/AssistantHookCustomerSpeechInterrupted", + "title": "AssistantHookCustomerSpeechInterrupted" + } + ] + } + }, "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.", @@ -17210,13 +19058,6 @@ } ] }, - "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" } @@ -17433,6 +19274,10 @@ { "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan", "title": "Twilio" + }, + { + "$ref": "#/components/schemas/VapiVoicemailDetectionPlan", + "title": "Vapi" } ] }, @@ -17451,6 +19296,7 @@ "transcript", "tool-calls", "tool-calls-result", + "tool.completed", "transfer-update", "user-interrupted", "voice-input", @@ -17486,6 +19332,7 @@ "transcript", "tool-calls", "tool-calls-result", + "tool.completed", "transfer-update", "user-interrupted", "voice-input", @@ -17810,6 +19657,10 @@ { "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO", "title": "SlackOAuth2AuthorizationCredential" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO", + "title": "GoHighLevelMCPCredential" } ], "discriminator": { @@ -17861,11 +19712,32 @@ "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" + "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO", + "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO" } } } }, + "hooks": { + "type": "array", + "description": "This is a set of actions that will be performed on certain events.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AssistantHookCallEnding", + "title": "AssistantHookCallEnding" + }, + { + "$ref": "#/components/schemas/AssistantHookAssistantSpeechInterrupted", + "title": "AssistantHookAssistantSpeechInterrupted" + }, + { + "$ref": "#/components/schemas/AssistantHookCustomerSpeechInterrupted", + "title": "AssistantHookCustomerSpeechInterrupted" + } + ] + } + }, "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" @@ -17964,13 +19836,6 @@ } ] }, - "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" } @@ -18036,6 +19901,175 @@ "members" ] }, + "CreateWorkflowDTO": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/Start", + "title": "Start" + }, + { + "$ref": "#/components/schemas/WorkflowAssistant", + "title": "Assistant" + }, + { + "$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/Conversation", + "title": "Conversation" + } + ] + } + }, + "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" + }, + { + "$ref": "#/components/schemas/XaiModel", + "title": "XAI" + } + ] + }, + "name": { + "type": "string", + "maxLength": 80 + }, + "edges": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Edge" + } + } + }, + "required": [ + "nodes", + "name", + "edges" + ] + }, + "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": { @@ -18097,6 +20131,11 @@ ] } }, + "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.", @@ -18110,6 +20149,14 @@ "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.", @@ -18117,11 +20164,15 @@ }, "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." + "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` 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 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", @@ -18134,8 +20185,7 @@ }, "required": [ "twilioPhoneNumber", - "twilioAccountSid", - "twilioAuthToken" + "twilioAccountSid" ] }, "CreateCustomerDTO": { @@ -18240,6 +20290,10 @@ { "$ref": "#/components/schemas/AnalysisCost", "title": "AnalysisCost" + }, + { + "$ref": "#/components/schemas/KnowledgeBaseCost", + "title": "KnowledgeBaseCost" } ] } @@ -18274,6 +20328,7 @@ "phoneCallProvider": { "type": "string", "description": "This is the provider of the call.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", + "deprecated": true, "enum": [ "twilio", "vonage", @@ -18881,14 +20936,15 @@ }, "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." + "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 }, "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 the call. To use a transient assistant, use `assistant` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId" }, "assistant": { - "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", + "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", "allOf": [ { "$ref": "#/components/schemas/CreateAssistantDTO" @@ -18905,16 +20961,28 @@ }, "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.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, 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.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", "allOf": [ { "$ref": "#/components/schemas/CreateSquadDTO" } ] }, + "workflowId": { + "type": "string", + "description": "[BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.\n\nThis is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId" + }, + "workflow": { + "description": "[BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.\n\nThis is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", + "allOf": [ + { + "$ref": "#/components/schemas/CreateWorkflowDTO" + } + ] + }, "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." @@ -19031,10 +21099,10 @@ }, "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 the call. To use a transient assistant, use `assistant` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId" }, "assistant": { - "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", + "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", "allOf": [ { "$ref": "#/components/schemas/CreateAssistantDTO" @@ -19051,16 +21119,28 @@ }, "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.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, 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.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", "allOf": [ { "$ref": "#/components/schemas/CreateSquadDTO" } ] }, + "workflowId": { + "type": "string", + "description": "[BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.\n\nThis is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId" + }, + "workflow": { + "description": "[BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.\n\nThis is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", + "allOf": [ + { + "$ref": "#/components/schemas/CreateWorkflowDTO" + } + ] + }, "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." @@ -19153,10 +21233,10 @@ }, "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 the call. To use a transient assistant, use `assistant` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId" }, "assistant": { - "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", + "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", "allOf": [ { "$ref": "#/components/schemas/CreateAssistantDTO" @@ -19173,16 +21253,28 @@ }, "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.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, 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.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", "allOf": [ { "$ref": "#/components/schemas/CreateSquadDTO" } ] }, + "workflowId": { + "type": "string", + "description": "[BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.\n\nThis is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId" + }, + "workflow": { + "description": "[BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.\n\nThis is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", + "allOf": [ + { + "$ref": "#/components/schemas/CreateWorkflowDTO" + } + ] + }, "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." @@ -19214,10 +21306,10 @@ "properties": { "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 the call. To use a transient assistant, use `assistant` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId" }, "assistant": { - "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", + "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", "allOf": [ { "$ref": "#/components/schemas/CreateAssistantDTO" @@ -19234,15 +21326,27 @@ }, "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.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, 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.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", "allOf": [ { "$ref": "#/components/schemas/CreateSquadDTO" } ] + }, + "workflowId": { + "type": "string", + "description": "[BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.\n\nThis is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId" + }, + "workflow": { + "description": "[BETA] This feature is in active development. The API and behavior are subject to change as we refine it based on user feedback.\n\nThis is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead.\nUsage:\n To start the call with Assistant as entrypoint, use assistant or assistantId\n To start the call with Squad as entrypoint, use squad or squadId\n To start the call with Workflow as entrypoint, use workflow or workflowId", + "allOf": [ + { + "$ref": "#/components/schemas/CreateWorkflowDTO" + } + ] } } }, @@ -19307,367 +21411,6 @@ "content" ] }, - "Say": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "say" - ] - }, - "exact": { - "type": "string", - "maxLength": 1000 - }, - "prompt": { - "type": "string", - "maxLength": 1000 - }, - "name": { - "type": "string", - "maxLength": 80 - }, - "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the task." - } - }, - "required": [ - "type", - "name" - ] - }, - "SayHook": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "say" - ] - }, - "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the task." - }, - "exact": { - "type": "string", - "maxLength": 1000 - }, - "prompt": { - "type": "string", - "maxLength": 1000 - } - }, - "required": [ - "type" - ] - }, - "Hook": { - "type": "object", - "properties": { - "on": { - "type": "string", - "enum": [ - "task.start", - "task.output.confirmation", - "task.delayed" - ], - "maxLength": 80 - }, - "do": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SayHook" - } - } - }, - "required": [ - "on", - "do" - ] - }, - "Gather": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gather" - ] - }, - "output": { - "$ref": "#/components/schemas/JsonSchema" - }, - "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." - }, - "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" - } - }, - "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" - }, - "literalTemplate": { - "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?\"" - }, - "name": { - "type": "string", - "maxLength": 80 - }, - "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the task." - } - }, - "required": [ - "type", - "output", - "name" - ] - }, - "ApiRequest": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "apiRequest" - ] - }, - "method": { - "type": "string", - "enum": [ - "POST", - "GET" - ] - }, - "url": { - "type": "string", - "description": "Api endpoint to send requests to." - }, - "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" - } - ] - }, - "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.", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, - "mode": { - "type": "string", - "description": "This is the mode of the Api Request.\nWe only support BLOCKING and BACKGROUND for now.", - "enum": [ - "blocking", - "background" - ] - }, - "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" - } - }, - "output": { - "description": "This is the schema for the outputs of the Api Request.", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, - "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" - ] - }, - "Hangup": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hangup" - ] - }, - "name": { - "type": "string", - "maxLength": 80 - }, - "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the task." - } - }, - "required": [ - "type", - "name" - ] - }, - "Transfer": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "transfer" - ] - }, - "destination": { - "type": "object" - }, - "name": { - "type": "string", - "maxLength": 80 - }, - "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the task." - } - }, - "required": [ - "type", - "destination", - "name" - ] - }, - "CreateWorkflowDTO": { - "type": "object", - "properties": { - "nodes": { - "type": "array", - "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" - } - ] - } - }, - "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" - }, - { - "$ref": "#/components/schemas/XaiModel", - "title": "XAI" - } - ] - }, - "name": { - "type": "string", - "maxLength": 80 - }, - "edges": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Edge" - } - } - }, - "required": [ - "nodes", - "name", - "edges" - ] - }, "ChatCompletionsDTO": { "type": "object", "properties": { @@ -19899,6 +21642,10 @@ { "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan", "title": "Twilio" + }, + { + "$ref": "#/components/schemas/VapiVoicemailDetectionPlan", + "title": "Vapi" } ] }, @@ -19917,6 +21664,7 @@ "transcript", "tool-calls", "tool-calls-result", + "tool.completed", "transfer-update", "user-interrupted", "voice-input", @@ -19952,6 +21700,7 @@ "transcript", "tool-calls", "tool-calls-result", + "tool.completed", "transfer-update", "user-interrupted", "voice-input", @@ -20276,6 +22025,10 @@ { "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO", "title": "SlackOAuth2AuthorizationCredential" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO", + "title": "GoHighLevelMCPCredential" } ], "discriminator": { @@ -20327,11 +22080,32 @@ "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" + "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO", + "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO" } } } }, + "hooks": { + "type": "array", + "description": "This is a set of actions that will be performed on certain events.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AssistantHookCallEnding", + "title": "AssistantHookCallEnding" + }, + { + "$ref": "#/components/schemas/AssistantHookAssistantSpeechInterrupted", + "title": "AssistantHookAssistantSpeechInterrupted" + }, + { + "$ref": "#/components/schemas/AssistantHookCustomerSpeechInterrupted", + "title": "AssistantHookCustomerSpeechInterrupted" + } + ] + } + }, "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.", @@ -20426,13 +22200,6 @@ } ] }, - "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" }, @@ -20480,6 +22247,24 @@ "metadata" ] }, + "AssistantVersionPaginatedResponse": { + "type": "object", + "properties": { + "results": { + "type": "array" + }, + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" + }, + "nextPageState": { + "type": "string" + } + }, + "required": [ + "results", + "metadata" + ] + }, "UpdateAssistantDTO": { "type": "object", "properties": { @@ -20691,6 +22476,10 @@ { "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan", "title": "Twilio" + }, + { + "$ref": "#/components/schemas/VapiVoicemailDetectionPlan", + "title": "Vapi" } ] }, @@ -20709,6 +22498,7 @@ "transcript", "tool-calls", "tool-calls-result", + "tool.completed", "transfer-update", "user-interrupted", "voice-input", @@ -20744,6 +22534,7 @@ "transcript", "tool-calls", "tool-calls-result", + "tool.completed", "transfer-update", "user-interrupted", "voice-input", @@ -21068,6 +22859,10 @@ { "$ref": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO", "title": "SlackOAuth2AuthorizationCredential" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO", + "title": "GoHighLevelMCPCredential" } ], "discriminator": { @@ -21119,11 +22914,32 @@ "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" + "slack.oauth2-authorization": "#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO", + "ghl.oauth2-authorization": "#/components/schemas/CreateGoHighLevelMCPCredentialDTO" } } } }, + "hooks": { + "type": "array", + "description": "This is a set of actions that will be performed on certain events.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/AssistantHookCallEnding", + "title": "AssistantHookCallEnding" + }, + { + "$ref": "#/components/schemas/AssistantHookAssistantSpeechInterrupted", + "title": "AssistantHookAssistantSpeechInterrupted" + }, + { + "$ref": "#/components/schemas/AssistantHookCustomerSpeechInterrupted", + "title": "AssistantHookCustomerSpeechInterrupted" + } + ] + } + }, "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.", @@ -21218,13 +23034,6 @@ } ] }, - "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" } @@ -21304,11 +23113,15 @@ }, "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." + "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` 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 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", @@ -21373,6 +23186,260 @@ "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 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." + } + }, + "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/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 Vonage.", + "enum": [ + "vonage" + ] + }, + "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 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" + } + ] + }, + "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", + "number", + "credentialId" + ] + }, + "SipAuthentication": { + "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 + }, + "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": [ + "username", + "password" + ] + }, + "VapiPhoneNumber": { + "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 create free SIP phone numbers on Vapi.", + "enum": [ + "vapi" + ] + }, "id": { "type": "string", "description": "This is the unique identifier for the phone number." @@ -21400,112 +23467,9 @@ "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": "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." - } - }, - "required": [ - "provider", - "id", - "orgId", - "createdAt", - "updatedAt", - "number", - "twilioAccountSid", - "twilioAuthToken" - ] - }, - "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/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 Vonage.", - "enum": [ - "vonage" - ] - }, - "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" - ] + "description": "These are the digits of the phone number you purchased from Vapi." }, "name": { "type": "string", @@ -21514,142 +23478,15 @@ }, "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" - } - ] + "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." }, - "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", - "number", - "credentialId" - ] - }, - "SipAuthentication": { - "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 - }, - "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": [ - "username", - "password" - ] - }, - "VapiPhoneNumber": { - "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 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." - }, - "status": { - "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": { + "workflowId": { "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 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` 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 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", @@ -21755,11 +23592,15 @@ }, "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." + "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` 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 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", @@ -21845,11 +23686,15 @@ }, "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." + "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` 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 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", @@ -21900,6 +23745,11 @@ "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 + }, "number": { "type": "string", "description": "These are the digits of the phone number you own on your Twilio." @@ -21912,6 +23762,14 @@ "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.", @@ -21919,11 +23777,15 @@ }, "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." + "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` 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 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", @@ -21937,8 +23799,7 @@ "required": [ "provider", "number", - "twilioAccountSid", - "twilioAuthToken" + "twilioAccountSid" ] }, "CreateVonagePhoneNumberDTO": { @@ -21991,11 +23852,15 @@ }, "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." + "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` 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 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", @@ -22072,11 +23937,15 @@ }, "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." + "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` 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 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", @@ -22141,11 +24010,15 @@ }, "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." + "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` 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 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", @@ -22202,11 +24075,15 @@ }, "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." + "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` 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 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", @@ -22256,6 +24133,11 @@ ] } }, + "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.", @@ -22263,11 +24145,15 @@ }, "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." + "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` 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 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", @@ -22288,6 +24174,14 @@ "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." } } }, @@ -22326,11 +24220,15 @@ }, "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." + "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` 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 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", @@ -22385,11 +24283,15 @@ }, "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." + "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` 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 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", @@ -22448,11 +24350,15 @@ }, "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." + "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` 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 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", @@ -22516,11 +24422,15 @@ }, "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." + "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` 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 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", @@ -23029,33 +24939,416 @@ "type": { "type": "string", "enum": [ - "transferCall" + "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" + } + ] + } + }, + "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": { + "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." + }, + "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" + ] + }, + "BashTool": { + "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." + }, + "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" + ] + }, + "ComputerTool": { + "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." + }, + "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" + } ] }, - "destinations": { + "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": { + "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 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" } ] } }, + "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." + }, "id": { "type": "string", "description": "This is the unique identifier for the tool." @@ -23089,17 +25382,27 @@ "$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", + "subType", "id", "orgId", "createdAt", - "updatedAt" + "updatedAt", + "name" ] }, - "OutputTool": { + "QueryTool": { "type": "object", "properties": { "async": { @@ -23134,9 +25437,16 @@ "type": { "type": "string", "enum": [ - "output" + "query" ], - "description": "The type of tool. \"output\" for Output tool." + "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", @@ -23181,7 +25491,7 @@ "updatedAt" ] }, - "BashTool": { + "GoogleCalendarCreateEventTool": { "type": "object", "properties": { "async": { @@ -23216,16 +25526,9 @@ "type": { "type": "string", "enum": [ - "bash" - ], - "description": "The type of tool. \"bash\" for Bash tool." - }, - "subType": { - "type": "string", - "enum": [ - "bash_20241022" + "google.calendar.event.create" ], - "description": "The sub type of tool." + "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool." }, "id": { "type": "string", @@ -23260,27 +25563,17 @@ "$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" + "updatedAt" ] }, - "ComputerTool": { + "GoogleSheetsRowAppendTool": { "type": "object", "properties": { "async": { @@ -23315,16 +25608,9 @@ "type": { "type": "string", "enum": [ - "computer" - ], - "description": "The type of tool. \"computer\" for Computer tool." - }, - "subType": { - "type": "string", - "enum": [ - "computer_20241022" + "google.sheets.row.append" ], - "description": "The sub type of tool." + "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool." }, "id": { "type": "string", @@ -23359,41 +25645,17 @@ "$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" + "updatedAt" ] }, - "TextEditorTool": { + "GoogleCalendarCheckAvailabilityTool": { "type": "object", "properties": { "async": { @@ -23428,16 +25690,9 @@ "type": { "type": "string", "enum": [ - "textEditor" - ], - "description": "The type of tool. \"textEditor\" for Text Editor tool." - }, - "subType": { - "type": "string", - "enum": [ - "text_editor_20241022" + "google.calendar.availability.check" ], - "description": "The sub type of tool." + "description": "The type of tool. \"google.calendar.availability.check\" for Google Calendar availability check tool." }, "id": { "type": "string", @@ -23472,27 +25727,17 @@ "$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", - "subType", "id", "orgId", "createdAt", - "updatedAt", - "name" + "updatedAt" ] }, - "QueryTool": { + "SlackSendMessageTool": { "type": "object", "properties": { "async": { @@ -23527,16 +25772,9 @@ "type": { "type": "string", "enum": [ - "query" + "slack.message.send" ], - "description": "The type of tool. \"query\" for Query tool." - }, - "knowledgeBases": { - "description": "The knowledge bases to query", - "type": "array", - "items": { - "$ref": "#/components/schemas/KnowledgeBase" - } + "description": "The type of tool. \"slack.message.send\" for Slack send message tool." }, "id": { "type": "string", @@ -23581,7 +25819,7 @@ "updatedAt" ] }, - "GoogleCalendarCreateEventTool": { + "SmsSendTool": { "type": "object", "properties": { "async": { @@ -23616,9 +25854,9 @@ "type": { "type": "string", "enum": [ - "google.calendar.event.create" + "sms" ], - "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool." + "description": "The type of tool. \"sms\" for Twilio SMS sending tool." }, "id": { "type": "string", @@ -23663,7 +25901,7 @@ "updatedAt" ] }, - "GoogleSheetsRowAppendTool": { + "McpTool": { "type": "object", "properties": { "async": { @@ -23698,9 +25936,9 @@ "type": { "type": "string", "enum": [ - "google.sheets.row.append" + "mcp" ], - "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool." + "description": "The type of tool. \"mcp\" for MCP tool." }, "id": { "type": "string", @@ -23745,7 +25983,7 @@ "updatedAt" ] }, - "GoogleCalendarCheckAvailabilityTool": { + "GoHighLevelCalendarAvailabilityTool": { "type": "object", "properties": { "async": { @@ -23780,9 +26018,9 @@ "type": { "type": "string", "enum": [ - "google.calendar.availability.check" + "gohighlevel.calendar.availability.check" ], - "description": "The type of tool. \"google.calendar.availability.check\" for Google Calendar availability check tool." + "description": "The type of tool. \"gohighlevel.calendar.availability.check\" for GoHighLevel Calendar availability check tool." }, "id": { "type": "string", @@ -23827,7 +26065,7 @@ "updatedAt" ] }, - "SlackSendMessageTool": { + "GoHighLevelCalendarEventCreateTool": { "type": "object", "properties": { "async": { @@ -23862,9 +26100,9 @@ "type": { "type": "string", "enum": [ - "slack.message.send" + "gohighlevel.calendar.event.create" ], - "description": "The type of tool. \"slack.message.send\" for Slack send message tool." + "description": "The type of tool. \"gohighlevel.calendar.event.create\" for GoHighLevel Calendar event create tool." }, "id": { "type": "string", @@ -23909,7 +26147,7 @@ "updatedAt" ] }, - "SmsSendTool": { + "GoHighLevelContactCreateTool": { "type": "object", "properties": { "async": { @@ -23944,9 +26182,9 @@ "type": { "type": "string", "enum": [ - "sms" + "gohighlevel.contact.create" ], - "description": "The type of tool. \"sms\" for Twilio SMS sending tool." + "description": "The type of tool. \"gohighlevel.contact.create\" for GoHighLevel contact create tool." }, "id": { "type": "string", @@ -23991,7 +26229,7 @@ "updatedAt" ] }, - "McpTool": { + "GoHighLevelContactGetTool": { "type": "object", "properties": { "async": { @@ -24026,9 +26264,9 @@ "type": { "type": "string", "enum": [ - "mcp" + "gohighlevel.contact.get" ], - "description": "The type of tool. \"mcp\" for MCP tool." + "description": "The type of tool. \"gohighlevel.contact.get\" for GoHighLevel contact get tool." }, "id": { "type": "string", @@ -24470,62 +26708,342 @@ ] } }, - "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": { + "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": { + "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" + } + ] + }, + "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/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" + } + ] + }, + "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/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" + } + ] + }, + "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/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" + } + ] + }, + "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/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" + } + ] + }, + "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/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } + }, + "destinations": { "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 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/ToolMessageStart", - "title": "ToolMessageStart" + "$ref": "#/components/schemas/TransferDestinationAssistant", + "title": "Assistant" }, { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" + "$ref": "#/components/schemas/TransferDestinationStep", + "title": "Step" }, { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" + "$ref": "#/components/schemas/TransferDestinationNumber", + "title": "Number" }, { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" + "$ref": "#/components/schemas/TransferDestinationSip", + "title": "Sip" } ] } @@ -24548,7 +27066,7 @@ } } }, - "UpdateEndCallToolDTO": { + "UpdateOutputToolDTO": { "type": "object", "properties": { "async": { @@ -24598,7 +27116,7 @@ } } }, - "UpdateFunctionToolDTO": { + "UpdateBashToolDTO": { "type": "object", "properties": { "async": { @@ -24630,6 +27148,13 @@ ] } }, + "subType": { + "type": "string", + "enum": [ + "bash_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": [ @@ -24645,10 +27170,18 @@ "$ref": "#/components/schemas/Server" } ] + }, + "name": { + "type": "string", + "description": "The name of the tool, fixed to 'bash'", + "default": "bash", + "enum": [ + "bash" + ] } } }, - "UpdateGhlToolDTO": { + "UpdateComputerToolDTO": { "type": "object", "properties": { "async": { @@ -24680,6 +27213,13 @@ ] } }, + "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": [ @@ -24696,12 +27236,29 @@ } ] }, - "metadata": { - "$ref": "#/components/schemas/GhlToolMetadata" + "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" } } }, - "UpdateMakeToolDTO": { + "UpdateTextEditorToolDTO": { "type": "object", "properties": { "async": { @@ -24733,6 +27290,13 @@ ] } }, + "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.", "allOf": [ @@ -24749,12 +27313,17 @@ } ] }, - "metadata": { - "$ref": "#/components/schemas/MakeToolMetadata" + "name": { + "type": "string", + "description": "The name of the tool, fixed to 'str_replace_editor'", + "default": "str_replace_editor", + "enum": [ + "str_replace_editor" + ] } } }, - "UpdateTransferCallToolDTO": { + "UpdateQueryToolDTO": { "type": "object", "properties": { "async": { @@ -24786,78 +27355,11 @@ ] } }, - "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" - } - ] - }, - "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" - } - ] - } - } - }, - "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": { + "knowledgeBases": { + "description": "The knowledge bases to query", "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/KnowledgeBase" } }, "function": { @@ -24878,7 +27380,7 @@ } } }, - "UpdateBashToolDTO": { + "UpdateGoogleCalendarCreateEventToolDTO": { "type": "object", "properties": { "async": { @@ -24910,13 +27412,6 @@ ] } }, - "subType": { - "type": "string", - "enum": [ - "bash_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": [ @@ -24932,18 +27427,10 @@ "$ref": "#/components/schemas/Server" } ] - }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'bash'", - "default": "bash", - "enum": [ - "bash" - ] } } }, - "UpdateComputerToolDTO": { + "UpdateGoogleSheetsRowAppendToolDTO": { "type": "object", "properties": { "async": { @@ -24975,13 +27462,6 @@ ] } }, - "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": [ @@ -24997,30 +27477,10 @@ "$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" } } }, - "UpdateTextEditorToolDTO": { + "UpdateGoogleCalendarCheckAvailabilityToolDTO": { "type": "object", "properties": { "async": { @@ -25052,13 +27512,6 @@ ] } }, - "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.", "allOf": [ @@ -25074,18 +27527,10 @@ "$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" - ] } } }, - "UpdateQueryToolDTO": { + "UpdateSlackSendMessageToolDTO": { "type": "object", "properties": { "async": { @@ -25117,13 +27562,6 @@ ] } }, - "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": [ @@ -25142,7 +27580,7 @@ } } }, - "UpdateGoogleCalendarCreateEventToolDTO": { + "UpdateSmsSendToolDTO": { "type": "object", "properties": { "async": { @@ -25192,7 +27630,7 @@ } } }, - "UpdateGoogleSheetsRowAppendToolDTO": { + "UpdateMcpToolDTO": { "type": "object", "properties": { "async": { @@ -25242,7 +27680,7 @@ } } }, - "UpdateGoogleCalendarCheckAvailabilityToolDTO": { + "UpdateGoHighLevelCalendarAvailabilityToolDTO": { "type": "object", "properties": { "async": { @@ -25292,7 +27730,7 @@ } } }, - "UpdateSlackSendMessageToolDTO": { + "UpdateGoHighLevelCalendarEventCreateToolDTO": { "type": "object", "properties": { "async": { @@ -25342,7 +27780,7 @@ } } }, - "UpdateSmsSendToolDTO": { + "UpdateGoHighLevelContactCreateToolDTO": { "type": "object", "properties": { "async": { @@ -25392,7 +27830,7 @@ } } }, - "UpdateMcpToolDTO": { + "UpdateGoHighLevelContactGetToolDTO": { "type": "object", "properties": { "async": { @@ -25809,6 +28247,144 @@ "providerId" ] }, + "Workflow": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/Start", + "title": "Start" + }, + { + "$ref": "#/components/schemas/WorkflowAssistant", + "title": "Assistant" + }, + { + "$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/Conversation", + "title": "Conversation" + } + ] + } + }, + "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" + }, + { + "$ref": "#/components/schemas/XaiModel", + "title": "XAI" + } + ] + }, + "id": { + "type": "string" + }, + "orgId": { + "type": "string" + }, + "createdAt": { + "format": "date-time", + "type": "string" + }, + "updatedAt": { + "format": "date-time", + "type": "string" + }, + "name": { + "type": "string", + "maxLength": 80 + }, + "edges": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Edge" + } + } + }, + "required": [ + "nodes", + "id", + "orgId", + "createdAt", + "updatedAt", + "name", + "edges" + ] + }, "UpdateWorkflowDTO": { "type": "object", "properties": { @@ -25816,6 +28392,14 @@ "type": "array", "items": { "oneOf": [ + { + "$ref": "#/components/schemas/Start", + "title": "Start" + }, + { + "$ref": "#/components/schemas/WorkflowAssistant", + "title": "Assistant" + }, { "$ref": "#/components/schemas/Say", "title": "Say" @@ -25835,6 +28419,10 @@ { "$ref": "#/components/schemas/Transfer", "title": "Transfer" + }, + { + "$ref": "#/components/schemas/Conversation", + "title": "Conversation" } ] } @@ -26532,7 +29120,7 @@ "rubric": { "type": "string", "description": "This is the rubric used by the AI scorer.", - "maxLength": 1000 + "maxLength": 10000 } }, "required": [ @@ -26599,7 +29187,7 @@ "rubric": { "type": "string", "description": "This is the rubric used by the AI scorer.", - "maxLength": 1000 + "maxLength": 10000 } }, "required": [ @@ -28240,10 +30828,13 @@ "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-mini-2024-07-18", "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", @@ -28258,10 +30849,13 @@ "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-mini-2024-07-18", "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", @@ -28570,6 +31164,10 @@ "format": "date-time", "type": "string", "description": "This is the OAuth2 access token expiration." + }, + "refreshToken": { + "type": "string", + "description": "This is the OAuth2 refresh token." } } }, @@ -29973,110 +32571,118 @@ "updatedAt" ] }, - "TogetherAICredential": { + "TogetherAICredential": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "together-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 credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, + "TrieveCredential": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "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.", + "minLength": 1, + "maxLength": 40 + } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, + "TwilioCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "together-ai" + "twilio" ] }, - "apiKey": { + "authToken": { "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 - } - }, - "required": [ - "provider", - "apiKey", - "id", - "orgId", - "createdAt", - "updatedAt" - ] - }, - "TrieveCredential": { - "type": "object", - "properties": { - "provider": { - "type": "string", - "enum": [ - "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.", - "minLength": 1, - "maxLength": 40 - } - }, - "required": [ - "provider", - "apiKey", - "id", - "orgId", - "createdAt", - "updatedAt" - ] - }, - "TwilioCredential": { - "type": "object", - "properties": { - "provider": { - "type": "string", - "enum": [ - "twilio" - ] - }, - "authToken": { + "apiSecret": { "type": "string", "description": "This is not returned in the API." }, @@ -30110,7 +32716,6 @@ }, "required": [ "provider", - "authToken", "id", "orgId", "createdAt", @@ -30473,6 +33078,57 @@ "updatedAt" ] }, + "GoHighLevelMCPCredential": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "ghl.oauth2-authorization" + ] + }, + "authenticationSession": { + "description": "This is the authentication session for the credential.", + "allOf": [ + { + "$ref": "#/components/schemas/Oauth2AuthenticationSession" + } + ] + }, + "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": [ + "provider", + "authenticationSession", + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, "CreateCerebrasCredentialDTO": { "type": "object", "properties": { @@ -30680,6 +33336,35 @@ "apiKey" ] }, + "CreateGoHighLevelMCPCredentialDTO": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "ghl.oauth2-authorization" + ] + }, + "authenticationSession": { + "description": "This is the authentication session for the credential.", + "allOf": [ + { + "$ref": "#/components/schemas/Oauth2AuthenticationSession" + } + ] + }, + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + }, + "required": [ + "provider", + "authenticationSession" + ] + }, "UpdateAnthropicCredentialDTO": { "type": "object", "properties": { @@ -30813,10 +33498,13 @@ "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-mini-2024-07-18", "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", @@ -30831,10 +33519,13 @@ "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-mini-2024-07-18", "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", @@ -31496,6 +34187,14 @@ "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." + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", @@ -31616,6 +34315,25 @@ } } }, + "UpdateGoHighLevelMCPCredentialDTO": { + "type": "object", + "properties": { + "authenticationSession": { + "description": "This is the authentication session for the credential.", + "allOf": [ + { + "$ref": "#/components/schemas/Oauth2AuthenticationSession" + } + ] + }, + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, "CredentialSessionResponse": { "type": "object", "properties": { @@ -31895,14 +34613,114 @@ "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 tool." + } + }, + "required": [ + "type" + ] + }, + "GoogleSheetsRowAppendToolProviderDetails": { + "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": [ + "google.sheets.row.append" + ], + "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool." + } + }, + "required": [ + "type" + ] + }, + "GoHighLevelCalendarAvailabilityToolProviderDetails": { + "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": [ + "gohighlevel.calendar.availability.check" + ], + "description": "The type of tool. \"gohighlevel.calendar.availability.check\" for GoHighLevel Calendar availability check tool." + } + }, + "required": [ + "type" + ] + }, + "GoHighLevelCalendarEventCreateToolProviderDetails": { + "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": [ + "gohighlevel.calendar.event.create" + ], + "description": "The type of tool. \"gohighlevel.calendar.event.create\" for GoHighLevel Calendar event create tool." + } + }, + "required": [ + "type" + ] + }, + "GoHighLevelContactCreateToolProviderDetails": { + "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": [ + "gohighlevel.contact.create" + ], + "description": "The type of tool. \"gohighlevel.contact.create\" for GoHighLevel contact create tool." } }, "required": [ "type" ] }, - "GoogleSheetsRowAppendToolProviderDetails": { + "GoHighLevelContactGetToolProviderDetails": { "type": "object", "properties": { "templateUrl": { @@ -31918,9 +34736,9 @@ "type": { "type": "string", "enum": [ - "google.sheets.row.append" + "gohighlevel.contact.get" ], - "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool." + "description": "The type of tool. \"gohighlevel.contact.get\" for GoHighLevel contact get tool." } }, "required": [ @@ -31981,6 +34799,22 @@ { "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", "title": "GoogleSheetsRowAppendTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] }, @@ -32005,6 +34839,22 @@ { "$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" } ] }, @@ -32084,6 +34934,22 @@ { "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", "title": "GoogleSheetsRowAppendTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] }, @@ -32108,6 +34974,22 @@ { "$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" } ] }, @@ -32209,6 +35091,22 @@ { "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", "title": "GoogleSheetsRowAppendTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO", + "title": "GoHighLevelCalendarAvailabilityTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO", + "title": "GoHighLevelCalendarEventCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactCreateToolDTO", + "title": "GoHighLevelContactCreateTool" + }, + { + "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "title": "GoHighLevelContactGetTool" } ] }, @@ -32233,6 +35131,22 @@ { "$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" } ] }, @@ -32527,6 +35441,31 @@ "ClientMessageWorkflowNodeStarted": { "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. \"workflow.node.started\" is sent when the active node changes.", @@ -32534,6 +35473,34 @@ "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." @@ -32547,6 +35514,31 @@ "ClientMessageConversationUpdate": { "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.", @@ -32588,6 +35580,34 @@ "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/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" + } + ] } }, "required": [ @@ -32598,12 +35618,65 @@ "ClientMessageHang": { "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. \"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" ] + }, + "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" + } + ] } }, "required": [ @@ -32613,6 +35686,31 @@ "ClientMessageMetadata": { "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. \"metadata\" is sent to forward metadata to the client.", @@ -32620,6 +35718,34 @@ "metadata" ] }, + "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" + } + ] + }, "metadata": { "type": "string", "description": "This is the metadata content" @@ -32633,6 +35759,31 @@ "ClientMessageModelOutput": { "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.", @@ -32640,6 +35791,34 @@ "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/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" + } + ] + }, "output": { "type": "object", "description": "This is the output of the model. It can be a token or tool call." @@ -32653,6 +35832,31 @@ "ClientMessageSpeechUpdate": { "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.", @@ -32679,6 +35883,34 @@ "turn": { "type": "number", "description": "This is the turn number of the speech update (0-indexed)." + }, + "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" + } + ] } }, "required": [ @@ -32690,6 +35922,31 @@ "ClientMessageTranscript": { "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.", @@ -32698,6 +35955,34 @@ "transcript[transcriptType=\"final\"]" ] }, + "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" + } + ] + }, "role": { "type": "string", "description": "This is the role for which the transcript is for.", @@ -32775,6 +36060,31 @@ "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. \"tool-calls\" is sent to call a tool.", @@ -32818,6 +36128,34 @@ ] } }, + "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", @@ -32834,6 +36172,31 @@ "ClientMessageToolCallsResult": { "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-result\" is sent to forward the result of a tool call to the client.", @@ -32841,6 +36204,34 @@ "tool-calls-result" ] }, + "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." @@ -32854,6 +36245,31 @@ "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. \"transfer-update\" is sent whenever a transfer happens.", @@ -32882,6 +36298,34 @@ } ] }, + "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": [ @@ -32914,12 +36358,65 @@ "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. \"user-interrupted\" is sent when the user interrupts the assistant.", "enum": [ "user-interrupted" ] + }, + "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" + } + ] } }, "required": [ @@ -32929,6 +36426,31 @@ "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. \"language-change-detected\" is sent when the transcriber is automatically switched based on the detected language.", @@ -32936,6 +36458,34 @@ "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" + } + ] + }, + "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" + } + ] + }, "language": { "type": "string", "description": "This is the language the transcriber is switched to." @@ -32949,6 +36499,31 @@ "ClientMessageVoiceInput": { "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.", @@ -32956,6 +36531,34 @@ "voice-input" ] }, + "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" + } + ] + }, "input": { "type": "string", "description": "This is the voice input content" @@ -33035,7 +36638,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 +36655,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -33064,7 +36671,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 +36682,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 +36690,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,7 +36698,7 @@ ] }, "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" @@ -33107,7 +36714,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 +36731,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -33171,7 +36782,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 +36793,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 +36801,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,7 +36809,7 @@ ] }, "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" @@ -33215,7 +36826,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 +36843,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -33771,13 +37386,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 +37407,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 +37415,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,7 +37423,7 @@ ] }, "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" @@ -33841,7 +37460,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 +37477,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -33870,7 +37493,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 +37504,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 +37512,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,7 +37520,7 @@ ] }, "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" @@ -33913,7 +37536,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 +37553,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -33977,7 +37604,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 +37615,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 +37623,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,7 +37631,7 @@ ] }, "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" @@ -34021,7 +37648,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 +37665,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -34050,7 +37681,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 +37692,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 +37700,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,7 +37708,7 @@ ] }, "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" @@ -34098,7 +37729,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 +37746,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -34148,7 +37783,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 +37794,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 +37802,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,7 +37810,7 @@ ] }, "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" @@ -34192,7 +37827,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 +37844,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -34241,7 +37880,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 +37891,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 +37899,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,7 +37907,7 @@ ] }, "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" @@ -34286,7 +37925,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 +37942,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -34868,7 +38511,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 +38522,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 +38530,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,7 +38538,7 @@ ] }, "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" @@ -34924,7 +38567,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 +38584,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -34989,7 +38636,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 +38647,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 +38655,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,7 +38663,7 @@ ] }, "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" @@ -35040,7 +38687,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 +38704,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -35069,7 +38720,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 +38731,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 +38739,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,7 +38747,7 @@ ] }, "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" @@ -35112,7 +38763,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 +38780,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -35162,7 +38817,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 +38828,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 +38836,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,7 +38844,7 @@ ] }, "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" @@ -35229,7 +38884,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 +38901,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -35259,7 +38918,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 +38929,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 +38937,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,7 +38945,7 @@ ] }, "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" @@ -35325,7 +38984,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 +39001,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -35354,7 +39017,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 +39028,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 +39036,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,7 +39044,7 @@ ] }, "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" @@ -35397,7 +39060,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 +39077,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -35426,7 +39093,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.", @@ -35437,7 +39104,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 +39112,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,7 +39120,7 @@ ] }, "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" @@ -35474,7 +39141,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", @@ -35491,6 +39158,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -35503,7 +39174,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.", @@ -35514,7 +39185,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 +39193,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,7 +39201,7 @@ ] }, "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" @@ -35551,7 +39222,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", @@ -35568,6 +39239,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ] }, @@ -35580,7 +39255,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.", @@ -35591,7 +39266,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 +39274,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,7 +39282,7 @@ ] }, "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" @@ -35840,6 +39515,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": [ @@ -36260,6 +39939,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 +40181,8 @@ "enum": [ "twilio", "google", - "openai" + "openai", + "vapi" ] }, "promptTextTokens": { @@ -36533,6 +40217,41 @@ "cost" ] }, + "KnowledgeBaseCost": { + "type": "object", + "properties": { + "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" + ] + }, "FunctionToolWithToolCall": { "type": "object", "properties": { @@ -36568,13 +40287,148 @@ "type": { "type": "string", "enum": [ - "function" + "function" + ], + "description": "The type of tool. \"function\" for Function tool." + }, + "toolCall": { + "$ref": "#/components/schemas/ToolCall" + }, + "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", + "toolCall" + ] + }, + "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.", + "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": [ + "ghl" + ], + "description": "The type of tool. \"ghl\" for GHL tool." + }, + "toolCall": { + "$ref": "#/components/schemas/ToolCall" + }, + "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": [ + "type", + "toolCall", + "metadata" + ] + }, + "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.", + "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": [ + "make" ], - "description": "The type of tool. \"function\" for Function tool." + "description": "The type of tool. \"make\" for Make tool." }, "toolCall": { "$ref": "#/components/schemas/ToolCall" }, + "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": [ @@ -36594,10 +40448,11 @@ }, "required": [ "type", - "toolCall" + "toolCall", + "metadata" ] }, - "GhlToolWithToolCall": { + "BashToolWithToolCall": { "type": "object", "properties": { "async": { @@ -36632,15 +40487,27 @@ "type": { "type": "string", "enum": [ - "ghl" + "bash" ], - "description": "The type of tool. \"ghl\" for GHL tool." + "description": "The type of tool. \"bash\" for Bash tool." + }, + "subType": { + "type": "string", + "enum": [ + "bash_20241022" + ], + "description": "The sub type of tool." }, "toolCall": { "$ref": "#/components/schemas/ToolCall" }, - "metadata": { - "$ref": "#/components/schemas/GhlToolMetadata" + "name": { + "type": "string", + "description": "The name of the tool, fixed to 'bash'", + "default": "bash", + "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.", @@ -36661,11 +40528,12 @@ }, "required": [ "type", + "subType", "toolCall", - "metadata" + "name" ] }, - "MakeToolWithToolCall": { + "ComputerToolWithToolCall": { "type": "object", "properties": { "async": { @@ -36700,15 +40568,39 @@ "type": { "type": "string", "enum": [ - "make" + "computer" ], - "description": "The type of tool. \"make\" for Make tool." + "description": "The type of tool. \"computer\" for Computer tool." + }, + "subType": { + "type": "string", + "enum": [ + "computer_20241022" + ], + "description": "The sub type of tool." }, "toolCall": { "$ref": "#/components/schemas/ToolCall" }, - "metadata": { - "$ref": "#/components/schemas/MakeToolMetadata" + "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" }, "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.", @@ -36729,11 +40621,14 @@ }, "required": [ "type", + "subType", "toolCall", - "metadata" + "name", + "displayWidthPx", + "displayHeightPx" ] }, - "BashToolWithToolCall": { + "TextEditorToolWithToolCall": { "type": "object", "properties": { "async": { @@ -36768,14 +40663,14 @@ "type": { "type": "string", "enum": [ - "bash" + "textEditor" ], - "description": "The type of tool. \"bash\" for Bash tool." + "description": "The type of tool. \"textEditor\" for Text Editor tool." }, "subType": { "type": "string", "enum": [ - "bash_20241022" + "text_editor_20241022" ], "description": "The sub type of tool." }, @@ -36784,10 +40679,10 @@ }, "name": { "type": "string", - "description": "The name of the tool, fixed to 'bash'", - "default": "bash", + "description": "The name of the tool, fixed to 'str_replace_editor'", + "default": "str_replace_editor", "enum": [ - "bash" + "str_replace_editor" ] }, "function": { @@ -36814,7 +40709,7 @@ "name" ] }, - "ComputerToolWithToolCall": { + "GoogleCalendarCreateEventToolWithToolCall": { "type": "object", "properties": { "async": { @@ -36849,39 +40744,76 @@ "type": { "type": "string", "enum": [ - "computer" - ], - "description": "The type of tool. \"computer\" for Computer tool." - }, - "subType": { - "type": "string", - "enum": [ - "computer_20241022" + "google.calendar.event.create" ], - "description": "The sub type of tool." + "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool." }, "toolCall": { "$ref": "#/components/schemas/ToolCall" }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'computer'", - "default": "computer", - "enum": [ - "computer" + "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" + } ] }, - "displayWidthPx": { - "type": "number", - "description": "The display width in pixels" + "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", + "toolCall" + ] + }, + "GoogleSheetsRowAppendToolWithToolCall": { + "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 }, - "displayHeightPx": { - "type": "number", - "description": "The display height in pixels" + "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" + } + ] + } }, - "displayNumber": { - "type": "number", - "description": "Optional display number" + "type": { + "type": "string", + "enum": [ + "google.sheets.row.append" + ], + "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool." + }, + "toolCall": { + "$ref": "#/components/schemas/ToolCall" }, "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.", @@ -36902,14 +40834,10 @@ }, "required": [ "type", - "subType", - "toolCall", - "name", - "displayWidthPx", - "displayHeightPx" + "toolCall" ] }, - "TextEditorToolWithToolCall": { + "GoHighLevelCalendarAvailabilityToolWithToolCall": { "type": "object", "properties": { "async": { @@ -36944,28 +40872,77 @@ "type": { "type": "string", "enum": [ - "textEditor" + "gohighlevel.calendar.availability.check" ], - "description": "The type of tool. \"textEditor\" for Text Editor tool." + "description": "The type of tool. \"gohighlevel.calendar.availability.check\" for GoHighLevel Calendar availability check tool." }, - "subType": { + "toolCall": { + "$ref": "#/components/schemas/ToolCall" + }, + "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", + "toolCall" + ] + }, + "GoHighLevelCalendarEventCreateToolWithToolCall": { + "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": [ - "text_editor_20241022" + "gohighlevel.calendar.event.create" ], - "description": "The sub type of tool." + "description": "The type of tool. \"gohighlevel.calendar.event.create\" for GoHighLevel Calendar event create tool." }, "toolCall": { "$ref": "#/components/schemas/ToolCall" }, - "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": [ @@ -36985,12 +40962,10 @@ }, "required": [ "type", - "subType", - "toolCall", - "name" + "toolCall" ] }, - "GoogleCalendarCreateEventToolWithToolCall": { + "GoHighLevelContactCreateToolWithToolCall": { "type": "object", "properties": { "async": { @@ -37025,9 +41000,9 @@ "type": { "type": "string", "enum": [ - "google.calendar.event.create" + "gohighlevel.contact.create" ], - "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool." + "description": "The type of tool. \"gohighlevel.contact.create\" for GoHighLevel contact create tool." }, "toolCall": { "$ref": "#/components/schemas/ToolCall" @@ -37054,7 +41029,7 @@ "toolCall" ] }, - "GoogleSheetsRowAppendToolWithToolCall": { + "GoHighLevelContactGetToolWithToolCall": { "type": "object", "properties": { "async": { @@ -37089,9 +41064,9 @@ "type": { "type": "string", "enum": [ - "google.sheets.row.append" + "gohighlevel.contact.get" ], - "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool." + "description": "The type of tool. \"gohighlevel.contact.get\" for GoHighLevel contact get tool." }, "toolCall": { "$ref": "#/components/schemas/ToolCall"