From 7fce90914702d465d2c6778e47dc24f212155bfa Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 17 Jan 2026 00:29:03 +0000 Subject: [PATCH] Update API specifications with fern api update --- fern/apis/api/openapi.json | 2975 ++++++++++++++++++++---------------- 1 file changed, 1662 insertions(+), 1313 deletions(-) diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index fcb86d3c1..72624797d 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -2743,6 +2743,14 @@ { "$ref": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", "title": "GoHighLevelContactGetTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ], "discriminator": { @@ -2767,7 +2775,9 @@ "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" + "gohighlevel.contact.get": "#/components/schemas/CreateGoHighLevelContactGetToolDTO", + "sipRequest": "#/components/schemas/CreateSipRequestToolDTO", + "voicemail": "#/components/schemas/CreateVoicemailToolDTO" } } } @@ -2868,6 +2878,14 @@ { "$ref": "#/components/schemas/GoHighLevelContactGetTool", "title": "GoHighLevelContactGetTool" + }, + { + "$ref": "#/components/schemas/SipRequestTool", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/VoicemailTool", + "title": "VoicemailTool" } ], "discriminator": { @@ -2893,7 +2911,9 @@ "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" + "gohighlevel.contact.get": "#/components/schemas/GoHighLevelContactGetTool", + "sipRequest": "#/components/schemas/SipRequestTool", + "voicemail": "#/components/schemas/VoicemailTool" } } } @@ -3102,6 +3122,14 @@ { "$ref": "#/components/schemas/GoHighLevelContactGetTool", "title": "GoHighLevelContactGetTool" + }, + { + "$ref": "#/components/schemas/SipRequestTool", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/VoicemailTool", + "title": "VoicemailTool" } ], "discriminator": { @@ -3127,7 +3155,9 @@ "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" + "gohighlevel.contact.get": "#/components/schemas/GoHighLevelContactGetTool", + "sipRequest": "#/components/schemas/SipRequestTool", + "voicemail": "#/components/schemas/VoicemailTool" } } } @@ -3254,6 +3284,14 @@ { "$ref": "#/components/schemas/GoHighLevelContactGetTool", "title": "GoHighLevelContactGetTool" + }, + { + "$ref": "#/components/schemas/SipRequestTool", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/VoicemailTool", + "title": "VoicemailTool" } ], "discriminator": { @@ -3279,7 +3317,9 @@ "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" + "gohighlevel.contact.get": "#/components/schemas/GoHighLevelContactGetTool", + "sipRequest": "#/components/schemas/SipRequestTool", + "voicemail": "#/components/schemas/VoicemailTool" } } } @@ -3398,6 +3438,14 @@ { "$ref": "#/components/schemas/UpdateGoHighLevelContactGetToolDTO", "title": "GoHighLevelContactGetTool" + }, + { + "$ref": "#/components/schemas/UpdateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/UpdateVoicemailToolDTO", + "title": "VoicemailTool" } ], "discriminator": { @@ -3422,7 +3470,9 @@ "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" + "gohighlevel.contact.get": "#/components/schemas/UpdateGoHighLevelContactGetToolDTO", + "sipRequest": "#/components/schemas/UpdateSipRequestToolDTO", + "voicemail": "#/components/schemas/UpdateVoicemailToolDTO" } } } @@ -3523,6 +3573,14 @@ { "$ref": "#/components/schemas/GoHighLevelContactGetTool", "title": "GoHighLevelContactGetTool" + }, + { + "$ref": "#/components/schemas/SipRequestTool", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/VoicemailTool", + "title": "VoicemailTool" } ], "discriminator": { @@ -3548,7 +3606,9 @@ "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" + "gohighlevel.contact.get": "#/components/schemas/GoHighLevelContactGetTool", + "sipRequest": "#/components/schemas/SipRequestTool", + "voicemail": "#/components/schemas/VoicemailTool" } } } @@ -3672,6 +3732,14 @@ { "$ref": "#/components/schemas/GoHighLevelContactGetTool", "title": "GoHighLevelContactGetTool" + }, + { + "$ref": "#/components/schemas/SipRequestTool", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/VoicemailTool", + "title": "VoicemailTool" } ], "discriminator": { @@ -3697,7 +3765,9 @@ "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" + "gohighlevel.contact.get": "#/components/schemas/GoHighLevelContactGetTool", + "sipRequest": "#/components/schemas/SipRequestTool", + "voicemail": "#/components/schemas/VoicemailTool" } } } @@ -5763,10 +5833,10 @@ } }, { - "name": "policyId", + "name": "triggerId", "required": false, "in": "query", - "description": "This will return issues with the specified policy ID.", + "description": "This will return issues with the specified trigger ID.", "schema": { "type": "string" } @@ -6005,39 +6075,107 @@ ] } }, - "/monitoring/policy": { + "/provider/{provider}/{resourceName}": { + "post": { + "operationId": "ProviderResourceController_createProviderResource", + "summary": "Create Provider Resource", + "parameters": [ + { + "name": "content-type", + "required": true, + "in": "header", + "schema": { + "type": "string" + } + }, + { + "name": "provider", + "required": true, + "in": "path", + "description": "The provider (e.g., 11labs)", + "schema": { + "enum": [ + "cartesia", + "11labs" + ], + "type": "string" + } + }, + { + "name": "resourceName", + "required": true, + "in": "path", + "description": "The resource name (e.g., pronunciation-dictionary)", + "schema": { + "enum": [ + "pronunciation-dictionary" + ], + "type": "string" + } + } + ], + "responses": { + "201": { + "description": "Successfully created provider resource", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ProviderResource" + } + } + } + } + }, + "tags": [ + "Provider Resources" + ], + "security": [ + { + "bearer": [] + } + ] + }, "get": { - "operationId": "PolicyController_findAll", - "summary": "List Policies", + "operationId": "ProviderResourceController_getProviderResourcesPaginated", + "summary": "List Provider Resources", "parameters": [ { - "name": "id", - "required": false, - "in": "query", - "description": "This will return policies with the specified id.", + "name": "provider", + "required": true, + "in": "path", + "description": "The provider (e.g., 11labs)", "schema": { + "enum": [ + "cartesia", + "11labs" + ], "type": "string" } }, { - "name": "severity", - "required": false, - "in": "query", - "description": "This will return policies with the specified severity.", + "name": "resourceName", + "required": true, + "in": "path", + "description": "The resource name (e.g., pronunciation-dictionary)", "schema": { "enum": [ - "error", - "warning", - "info" + "pronunciation-dictionary" ], "type": "string" } }, { - "name": "monitorId", + "name": "id", + "required": false, + "in": "query", + "schema": { + "type": "string" + } + }, + { + "name": "resourceId", "required": false, "in": "query", - "description": "This will return policies associated with the specified monitor ID.", "schema": { "type": "string" } @@ -6159,56 +6297,18 @@ ], "responses": { "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - }, - "tags": [ - "Monitoring" - ], - "security": [ - { - "bearer": [] - } - ] - }, - "post": { - "operationId": "PolicyController_create", - "summary": "Create Policy", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreatePolicyDTO" - } - } - } - }, - "responses": { - "201": { - "description": "", + "description": "List of provider resources", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Policy" + "$ref": "#/components/schemas/ProviderResourcePaginatedResponse" } } } } }, "tags": [ - "Monitoring" + "Provider Resources" ], "security": [ { @@ -6217,429 +6317,73 @@ ] } }, - "/monitoring/policy/{id}": { + "/provider/{provider}/{resourceName}/{id}": { "get": { - "operationId": "PolicyController_findOne", - "summary": "Get Policy", + "operationId": "ProviderResourceController_getProviderResource", + "summary": "Get Provider Resource", "parameters": [ { - "name": "id", + "name": "provider", "required": true, "in": "path", + "description": "The provider (e.g., 11labs)", "schema": { + "enum": [ + "cartesia", + "11labs" + ], "type": "string" } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - }, - "tags": [ - "Monitoring" - ], - "security": [ - { - "bearer": [] - } - ] - }, - "patch": { - "operationId": "PolicyController_update", - "summary": "Update Policy", - "parameters": [ + }, { - "name": "id", + "name": "resourceName", "required": true, "in": "path", + "description": "The resource name (e.g., pronunciation-dictionary)", "schema": { + "enum": [ + "pronunciation-dictionary" + ], "type": "string" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdatePolicyDTO" - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - }, - "tags": [ - "Monitoring" - ], - "security": [ - { - "bearer": [] - } - ] - }, - "delete": { - "operationId": "PolicyController_delete", - "summary": "Delete Policy", - "parameters": [ + }, { "name": "id", "required": true, "in": "path", "schema": { + "format": "uuid", "type": "string" } } ], "responses": { "200": { - "description": "", + "description": "Successfully retrieved provider resource", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Policy" + "$ref": "#/components/schemas/ProviderResource" } } } + }, + "404": { + "description": "Provider resource not found" } }, "tags": [ - "Monitoring" + "Provider Resources" ], "security": [ { "bearer": [] } ] - } - }, - "/provider/{provider}/{resourceName}": { - "post": { - "operationId": "ProviderResourceController_createProviderResource", - "summary": "Create Provider Resource", - "parameters": [ - { - "name": "content-type", - "required": true, - "in": "header", - "schema": { - "type": "string" - } - }, - { - "name": "provider", - "required": true, - "in": "path", - "description": "The provider (e.g., 11labs)", - "schema": { - "enum": [ - "cartesia", - "11labs" - ], - "type": "string" - } - }, - { - "name": "resourceName", - "required": true, - "in": "path", - "description": "The resource name (e.g., pronunciation-dictionary)", - "schema": { - "enum": [ - "pronunciation-dictionary" - ], - "type": "string" - } - } - ], - "responses": { - "201": { - "description": "Successfully created provider resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProviderResource" - } - } - } - } - }, - "tags": [ - "Provider Resources" - ], - "security": [ - { - "bearer": [] - } - ] - }, - "get": { - "operationId": "ProviderResourceController_getProviderResourcesPaginated", - "summary": "List Provider Resources", - "parameters": [ - { - "name": "provider", - "required": true, - "in": "path", - "description": "The provider (e.g., 11labs)", - "schema": { - "enum": [ - "cartesia", - "11labs" - ], - "type": "string" - } - }, - { - "name": "resourceName", - "required": true, - "in": "path", - "description": "The resource name (e.g., pronunciation-dictionary)", - "schema": { - "enum": [ - "pronunciation-dictionary" - ], - "type": "string" - } - }, - { - "name": "id", - "required": false, - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "resourceId", - "required": false, - "in": "query", - "schema": { - "type": "string" - } - }, - { - "name": "page", - "required": false, - "in": "query", - "description": "This is the page number to return. Defaults to 1.", - "schema": { - "minimum": 1, - "type": "number" - } - }, - { - "name": "sortOrder", - "required": false, - "in": "query", - "description": "This is the sort order for pagination. Defaults to 'DESC'.", - "schema": { - "enum": [ - "ASC", - "DESC" - ], - "type": "string" - } - }, - { - "name": "limit", - "required": false, - "in": "query", - "description": "This is the maximum number of items to return. Defaults to 100.", - "schema": { - "minimum": 0, - "maximum": 1000, - "type": "number" - } - }, - { - "name": "createdAtGt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtGe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtGt", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtLt", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtGe", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "updatedAtLe", - "required": false, - "in": "query", - "description": "This will return items where the updatedAt is less than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "List of provider resources", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProviderResourcePaginatedResponse" - } - } - } - } - }, - "tags": [ - "Provider Resources" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/provider/{provider}/{resourceName}/{id}": { - "get": { - "operationId": "ProviderResourceController_getProviderResource", - "summary": "Get Provider Resource", - "parameters": [ - { - "name": "provider", - "required": true, - "in": "path", - "description": "The provider (e.g., 11labs)", - "schema": { - "enum": [ - "cartesia", - "11labs" - ], - "type": "string" - } - }, - { - "name": "resourceName", - "required": true, - "in": "path", - "description": "The resource name (e.g., pronunciation-dictionary)", - "schema": { - "enum": [ - "pronunciation-dictionary" - ], - "type": "string" - } - }, - { - "name": "id", - "required": true, - "in": "path", - "schema": { - "format": "uuid", - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "Successfully retrieved provider resource", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProviderResource" - } - } - } - }, - "404": { - "description": "Provider resource not found" - } - }, - "tags": [ - "Provider Resources" - ], - "security": [ - { - "bearer": [] - } - ] - }, - "delete": { - "operationId": "ProviderResourceController_deleteProviderResource", - "summary": "Delete Provider Resource", + }, + "delete": { + "operationId": "ProviderResourceController_deleteProviderResource", + "summary": "Delete Provider Resource", "parameters": [ { "name": "provider", @@ -7769,6 +7513,7 @@ { "enum": [ "scribe_v1", + "scribe_v2", "scribe_v2_realtime" ] } @@ -9627,6 +9372,7 @@ { "enum": [ "scribe_v1", + "scribe_v2", "scribe_v2_realtime" ] } @@ -10673,6 +10419,15 @@ "langfuse" ] }, + "promptName": { + "type": "string", + "description": "The name of a Langfuse prompt to link generations to. This enables tracking which prompt version was used for each generation. https://langfuse.com/docs/prompt-management/features/link-to-traces" + }, + "promptVersion": { + "type": "number", + "description": "The version number of the Langfuse prompt to link generations to. Used together with promptName to identify the exact prompt version. https://langfuse.com/docs/prompt-management/features/link-to-traces", + "minimum": 1 + }, "tags": { "description": "This is an array of tags to be added to the Langfuse trace. Tags allow you to categorize and filter traces. https://langfuse.com/docs/tracing-features/tags", "type": "array", @@ -13757,6 +13512,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -13933,6 +13696,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -14111,6 +13882,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -14270,6 +14049,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -14460,6 +14247,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -14615,6 +14410,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -14843,6 +14646,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -15023,6 +14834,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -15195,6 +15014,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -15353,6 +15180,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -15773,6 +15608,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -15928,6 +15771,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -16083,6 +15934,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -16735,6 +16594,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -16880,6 +16747,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] }, @@ -17276,6 +17151,39 @@ "type" ] }, + "MessageAddHookAction": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "This is the type of action - must be \"message.add\"", + "enum": [ + "message.add" + ] + }, + "message": { + "description": "The message to add to the conversation in OpenAI format", + "example": { + "role": "system", + "content": "Context update from hook" + }, + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIMessage" + } + ] + }, + "triggerResponseEnabled": { + "type": "boolean", + "description": "Whether to trigger an assistant response after adding the message", + "default": true + } + }, + "required": [ + "type", + "message" + ] + }, "CallHookFilter": { "type": "object", "properties": { @@ -17326,6 +17234,10 @@ { "$ref": "#/components/schemas/ToolCallHookAction", "title": "ToolCallHookAction" + }, + { + "$ref": "#/components/schemas/MessageAddHookAction", + "title": "MessageAddHookAction" } ] } @@ -17366,6 +17278,10 @@ { "$ref": "#/components/schemas/ToolCallHookAction", "title": "ToolCallHookAction" + }, + { + "$ref": "#/components/schemas/MessageAddHookAction", + "title": "MessageAddHookAction" } ] } @@ -17399,6 +17315,10 @@ { "$ref": "#/components/schemas/ToolCallHookAction", "title": "ToolCallHookAction" + }, + { + "$ref": "#/components/schemas/MessageAddHookAction", + "title": "MessageAddHookAction" } ] } @@ -17505,6 +17425,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] }, @@ -17561,6 +17489,10 @@ { "$ref": "#/components/schemas/ToolCallHookAction", "title": "ToolCallHookAction" + }, + { + "$ref": "#/components/schemas/MessageAddHookAction", + "title": "MessageAddHookAction" } ] } @@ -17607,6 +17539,10 @@ { "$ref": "#/components/schemas/ToolCallHookAction", "title": "ToolCallHookAction" + }, + { + "$ref": "#/components/schemas/MessageAddHookAction", + "title": "MessageAddHookAction" } ] } @@ -18124,6 +18060,89 @@ } } }, + "ComplianceOverride": { + "type": "object", + "properties": { + "forceStoreOnHipaaEnabled": { + "type": "boolean", + "description": "Force storage for this output under HIPAA. Only enable if output contains no sensitive data.", + "example": false + } + } + }, + "CreateStructuredOutputDTO": { + "type": "object", + "properties": { + "model": { + "description": "This is the model that will be used to extract the structured output.\n\nTo provide your own custom system and user prompts for structured output extraction, populate the messages array with your system and user messages. You can specify liquid templating in your system and user messages.\nBetween the system or user messages, you must reference either 'transcript' or 'messages' with the '{{}}' syntax to access the conversation history.\nBetween the system or user messages, you must reference a variation of the structured output with the '{{}}' syntax to access the structured output definition.\ni.e.:\n{{structuredOutput}}\n{{structuredOutput.name}}\n{{structuredOutput.description}}\n{{structuredOutput.schema}}\n\nIf model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts.\nIf messages or required fields are not specified, the default system and user prompts will be used.", + "oneOf": [ + { + "$ref": "#/components/schemas/WorkflowOpenAIModel", + "title": "WorkflowOpenAIModel" + }, + { + "$ref": "#/components/schemas/WorkflowAnthropicModel", + "title": "WorkflowAnthropicModel" + }, + { + "$ref": "#/components/schemas/WorkflowGoogleModel", + "title": "WorkflowGoogleModel" + }, + { + "$ref": "#/components/schemas/WorkflowCustomModel", + "title": "WorkflowCustomModel" + } + ] + }, + "compliancePlan": { + "description": "Compliance configuration for this output. Only enable overrides if no sensitive data will be stored.", + "example": { + "forceStoreOnHipaaEnabled": false + }, + "allOf": [ + { + "$ref": "#/components/schemas/ComplianceOverride" + } + ] + }, + "name": { + "type": "string", + "description": "This is the name of the structured output.", + "minLength": 1, + "maxLength": 40 + }, + "schema": { + "description": "This is the JSON Schema definition for the structured output.\n\nThis is required when creating a structured output. Defines the structure and validation rules for the data that will be extracted. Supports all JSON Schema features including:\n- Objects and nested properties\n- Arrays and array validation\n- String, number, boolean, and null types\n- Enums and const values\n- Validation constraints (min/max, patterns, etc.)\n- Composition with allOf, anyOf, oneOf", + "allOf": [ + { + "$ref": "#/components/schemas/JsonSchema" + } + ] + }, + "description": { + "type": "string", + "description": "This is the description of what the structured output extracts.\n\nUse this to provide context about what data will be extracted and how it will be used." + }, + "assistantIds": { + "description": "These are the assistant IDs that this structured output is linked to.\n\nWhen linked to assistants, this structured output will be available for extraction during those assistant's calls.", + "type": "array", + "items": { + "type": "string" + } + }, + "workflowIds": { + "description": "These are the workflow IDs that this structured output is linked to.\n\nWhen linked to workflows, this structured output will be available for extraction during those workflow's execution.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [ + "name", + "schema" + ] + }, "ScorecardMetric": { "type": "object", "properties": { @@ -18251,6 +18270,13 @@ "type": "string" } }, + "structuredOutputs": { + "description": "This is an array of transient structured outputs to be calculated during the call.\nThe outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended.\nUse this to provide inline structured output configurations instead of referencing existing ones via structuredOutputIds.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CreateStructuredOutputDTO" + } + }, "scorecardIds": { "description": "This is an array of scorecard IDs that will be evaluated based on the structured outputs extracted during the call.\nThe scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has ended.", "type": "array", @@ -19278,6 +19304,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -19445,6 +19479,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -25920,6 +25962,10 @@ { "$ref": "#/components/schemas/ToolCallHookAction", "title": "ToolCallHookAction" + }, + { + "$ref": "#/components/schemas/MessageAddHookAction", + "title": "MessageAddHookAction" } ] } @@ -26853,6 +26899,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] } @@ -34225,6 +34279,10 @@ } ] }, + "customerId": { + "type": "string", + "description": "This is the customerId of the customer who will receive the SMS." + }, "useLLMGeneratedMessageForOutbound": { "type": "boolean", "description": "Whether to use LLM-generated messages for outbound SMS.\nWhen true (default), input is processed by the assistant for a response.\nWhen false, the input text is forwarded directly as the SMS message without LLM processing.\nUseful for sending pre-defined messages or notifications.", @@ -35550,6 +35608,194 @@ } } }, + "RelayTargetAssistant": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "assistant" + ], + "description": "The type of relay target" + }, + "assistantId": { + "type": "string", + "description": "The unique identifier of the assistant" + }, + "assistantName": { + "type": "string", + "description": "The name of the assistant" + } + }, + "required": [ + "type" + ] + }, + "RelayTargetSquad": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "squad" + ], + "description": "The type of relay target" + }, + "squadId": { + "type": "string", + "description": "The unique identifier of the squad" + }, + "squadName": { + "type": "string", + "description": "The name of the squad" + } + }, + "required": [ + "type" + ] + }, + "RelayTargetOptions": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "assistant", + "squad" + ] + } + }, + "required": [ + "type" + ] + }, + "RelayCommandSay": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "say" + ], + "description": "The type of relay command" + }, + "content": { + "type": "string", + "description": "The content for the assistant to speak" + } + }, + "required": [ + "type", + "content" + ] + }, + "RelayCommandNote": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "message.add" + ], + "description": "The type of relay command" + }, + "content": { + "type": "string", + "description": "The note content to add to the conversation" + } + }, + "required": [ + "type", + "content" + ] + }, + "RelayCommandOptions": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "say", + "message.add" + ] + } + }, + "required": [ + "type" + ] + }, + "RelayRequest": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "The source identifier of the relay request" + }, + "target": { + "oneOf": [ + { + "$ref": "#/components/schemas/RelayTargetAssistant" + }, + { + "$ref": "#/components/schemas/RelayTargetSquad" + } + ], + "description": "The target assistant or squad to relay the commands to" + }, + "customerId": { + "type": "string", + "description": "The unique identifier of the customer" + }, + "commands": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/RelayCommandSay" + }, + { + "$ref": "#/components/schemas/RelayCommandNote" + } + ] + }, + "description": "The list of commands to relay to the target" + } + }, + "required": [ + "source", + "target", + "customerId", + "commands" + ] + }, + "RelayResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "deliveredLive", + "deliveredHeadless", + "failed" + ], + "description": "The status of the relay request" + }, + "callId": { + "type": "string", + "description": "The unique identifier of the call, if delivered to a live call" + }, + "sessionId": { + "type": "string", + "description": "The unique identifier of the session, if delivered to a headless session" + }, + "chatId": { + "type": "string" + } + }, + "required": [ + "status" + ] + }, "Session": { "type": "object", "properties": { @@ -35627,6 +35873,14 @@ } ] }, + "assistantOverrides": { + "description": "These are the overrides for the assistant configuration.\nUse this to provide variable values and other overrides when using assistantId.\nVariable substitution will be applied to the assistant's messages and other text-based fields.", + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] + }, "squadId": { "type": "string", "description": "This is the squad ID associated with this session. Use this when referencing an existing squad." @@ -35675,6 +35929,10 @@ } ] }, + "customerId": { + "type": "string", + "description": "This is the customerId of the customer associated with this session." + }, "phoneNumberId": { "type": "string", "description": "This is the ID of the phone number associated with this session." @@ -35738,6 +35996,14 @@ } ] }, + "assistantOverrides": { + "description": "These are the overrides for the assistant configuration.\nUse this to provide variable values and other overrides when using assistantId.\nVariable substitution will be applied to the assistant's messages and other text-based fields.", + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] + }, "squadId": { "type": "string", "description": "This is the squad ID associated with this session. Use this when referencing an existing squad." @@ -35786,6 +36052,10 @@ } ] }, + "customerId": { + "type": "string", + "description": "This is the customerId of the customer associated with this session." + }, "phoneNumberId": { "type": "string", "description": "This is the ID of the phone number associated with this session." @@ -38570,10 +38840,104 @@ "id", "orgId", "createdAt", - "updatedAt" + "updatedAt" + ] + }, + "BashTool": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/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." + }, + "server": { + "description": "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook expects a response with tool call result.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the tool." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the organization that this tool belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was last updated." + }, + "rejectionPlan": { + "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", + "allOf": [ + { + "$ref": "#/components/schemas/ToolRejectionPlan" + } + ] + }, + "name": { + "type": "string", + "description": "The name of the tool, fixed to 'bash'", + "default": "bash", + "enum": [ + "bash" + ] + } + }, + "required": [ + "type", + "subType", + "id", + "orgId", + "createdAt", + "updatedAt", + "name" ] }, - "BashTool": { + "ComputerTool": { "type": "object", "properties": { "messages": { @@ -38603,14 +38967,14 @@ "type": { "type": "string", "enum": [ - "bash" + "computer" ], - "description": "The type of tool. \"bash\" for Bash tool." + "description": "The type of tool. \"computer\" for Computer tool." }, "subType": { "type": "string", "enum": [ - "bash_20241022" + "computer_20241022" ], "description": "The sub type of tool." }, @@ -38650,11 +39014,23 @@ }, "name": { "type": "string", - "description": "The name of the tool, fixed to 'bash'", - "default": "bash", + "description": "The name of the tool, fixed to 'computer'", + "default": "computer", "enum": [ - "bash" + "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": [ @@ -38664,10 +39040,12 @@ "orgId", "createdAt", "updatedAt", - "name" + "name", + "displayWidthPx", + "displayHeightPx" ] }, - "ComputerTool": { + "TextEditorTool": { "type": "object", "properties": { "messages": { @@ -38697,14 +39075,14 @@ "type": { "type": "string", "enum": [ - "computer" + "textEditor" ], - "description": "The type of tool. \"computer\" for Computer tool." + "description": "The type of tool. \"textEditor\" for Text Editor tool." }, "subType": { "type": "string", "enum": [ - "computer_20241022" + "text_editor_20241022" ], "description": "The sub type of tool." }, @@ -38744,23 +39122,11 @@ }, "name": { "type": "string", - "description": "The name of the tool, fixed to 'computer'", - "default": "computer", + "description": "The name of the tool, fixed to 'str_replace_editor'", + "default": "str_replace_editor", "enum": [ - "computer" + "str_replace_editor" ] - }, - "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": [ @@ -38770,12 +39136,10 @@ "orgId", "createdAt", "updatedAt", - "name", - "displayWidthPx", - "displayHeightPx" + "name" ] }, - "TextEditorTool": { + "QueryTool": { "type": "object", "properties": { "messages": { @@ -38805,24 +39169,85 @@ "type": { "type": "string", "enum": [ - "textEditor" + "query" ], - "description": "The type of tool. \"textEditor\" for Text Editor tool." + "description": "The type of tool. \"query\" for Query tool." }, - "subType": { + "knowledgeBases": { + "description": "The knowledge bases to query", + "type": "array", + "items": { + "$ref": "#/components/schemas/KnowledgeBase" + } + }, + "id": { "type": "string", - "enum": [ - "text_editor_20241022" - ], - "description": "The sub type of tool." + "description": "This is the unique identifier for the tool." }, - "server": { - "description": "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook expects a response with tool call result.", + "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." + }, + "rejectionPlan": { + "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", "allOf": [ { - "$ref": "#/components/schemas/Server" + "$ref": "#/components/schemas/ToolRejectionPlan" } ] + } + }, + "required": [ + "type", + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, + "GoogleCalendarCreateEventTool": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } + }, + "type": { + "type": "string", + "enum": [ + "google.calendar.event.create" + ], + "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar Create Event tool." }, "id": { "type": "string", @@ -38849,27 +39274,17 @@ "$ref": "#/components/schemas/ToolRejectionPlan" } ] - }, - "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": { + "GoogleSheetsRowAppendTool": { "type": "object", "properties": { "messages": { @@ -38899,17 +39314,79 @@ "type": { "type": "string", "enum": [ - "query" + "google.sheets.row.append" ], - "description": "The type of tool. \"query\" for Query tool." + "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets Row Append tool." }, - "knowledgeBases": { - "description": "The knowledge bases to query", + "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." + }, + "rejectionPlan": { + "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", + "allOf": [ + { + "$ref": "#/components/schemas/ToolRejectionPlan" + } + ] + } + }, + "required": [ + "type", + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, + "GoogleCalendarCheckAvailabilityTool": { + "type": "object", + "properties": { + "messages": { "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", "items": { - "$ref": "#/components/schemas/KnowledgeBase" + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] } }, + "type": { + "type": "string", + "enum": [ + "google.calendar.availability.check" + ], + "description": "The type of tool. \"google.calendar.availability.check\" for Google Calendar Check Availability tool." + }, "id": { "type": "string", "description": "This is the unique identifier for the tool." @@ -38945,7 +39422,7 @@ "updatedAt" ] }, - "GoogleCalendarCreateEventTool": { + "SlackSendMessageTool": { "type": "object", "properties": { "messages": { @@ -38975,9 +39452,9 @@ "type": { "type": "string", "enum": [ - "google.calendar.event.create" + "slack.message.send" ], - "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar Create Event tool." + "description": "The type of tool. \"slack.message.send\" for Slack Send Message tool." }, "id": { "type": "string", @@ -39014,7 +39491,7 @@ "updatedAt" ] }, - "GoogleSheetsRowAppendTool": { + "SmsTool": { "type": "object", "properties": { "messages": { @@ -39044,9 +39521,9 @@ "type": { "type": "string", "enum": [ - "google.sheets.row.append" + "sms" ], - "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets Row Append tool." + "description": "The type of tool. \"sms\" for Twilio SMS sending tool." }, "id": { "type": "string", @@ -39083,7 +39560,7 @@ "updatedAt" ] }, - "GoogleCalendarCheckAvailabilityTool": { + "McpTool": { "type": "object", "properties": { "messages": { @@ -39113,9 +39590,17 @@ "type": { "type": "string", "enum": [ - "google.calendar.availability.check" + "mcp" ], - "description": "The type of tool. \"google.calendar.availability.check\" for Google Calendar Check Availability tool." + "description": "The type of tool. \"mcp\" for MCP tool." + }, + "server": { + "description": "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook expects a response with tool call result.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] }, "id": { "type": "string", @@ -39142,6 +39627,9 @@ "$ref": "#/components/schemas/ToolRejectionPlan" } ] + }, + "metadata": { + "$ref": "#/components/schemas/McpToolMetadata" } }, "required": [ @@ -39152,7 +39640,7 @@ "updatedAt" ] }, - "SlackSendMessageTool": { + "GoHighLevelCalendarAvailabilityTool": { "type": "object", "properties": { "messages": { @@ -39182,9 +39670,9 @@ "type": { "type": "string", "enum": [ - "slack.message.send" + "gohighlevel.calendar.availability.check" ], - "description": "The type of tool. \"slack.message.send\" for Slack Send Message tool." + "description": "The type of tool. \"gohighlevel.calendar.availability.check\" for GoHighLevel Calendar Availability Check tool." }, "id": { "type": "string", @@ -39221,7 +39709,7 @@ "updatedAt" ] }, - "SmsTool": { + "GoHighLevelCalendarEventCreateTool": { "type": "object", "properties": { "messages": { @@ -39251,9 +39739,9 @@ "type": { "type": "string", "enum": [ - "sms" + "gohighlevel.calendar.event.create" ], - "description": "The type of tool. \"sms\" for Twilio SMS sending tool." + "description": "The type of tool. \"gohighlevel.calendar.event.create\" for GoHighLevel Calendar Event Create tool." }, "id": { "type": "string", @@ -39290,7 +39778,7 @@ "updatedAt" ] }, - "McpTool": { + "GoHighLevelContactCreateTool": { "type": "object", "properties": { "messages": { @@ -39320,17 +39808,9 @@ "type": { "type": "string", "enum": [ - "mcp" + "gohighlevel.contact.create" ], - "description": "The type of tool. \"mcp\" for MCP tool." - }, - "server": { - "description": "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook expects a response with tool call result.", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] + "description": "The type of tool. \"gohighlevel.contact.create\" for GoHighLevel Contact Create tool." }, "id": { "type": "string", @@ -39357,9 +39837,6 @@ "$ref": "#/components/schemas/ToolRejectionPlan" } ] - }, - "metadata": { - "$ref": "#/components/schemas/McpToolMetadata" } }, "required": [ @@ -39370,7 +39847,7 @@ "updatedAt" ] }, - "GoHighLevelCalendarAvailabilityTool": { + "GoHighLevelContactGetTool": { "type": "object", "properties": { "messages": { @@ -39400,9 +39877,9 @@ "type": { "type": "string", "enum": [ - "gohighlevel.calendar.availability.check" + "gohighlevel.contact.get" ], - "description": "The type of tool. \"gohighlevel.calendar.availability.check\" for GoHighLevel Calendar Availability Check tool." + "description": "The type of tool. \"gohighlevel.contact.get\" for GoHighLevel Contact Get tool." }, "id": { "type": "string", @@ -39439,7 +39916,7 @@ "updatedAt" ] }, - "GoHighLevelCalendarEventCreateTool": { + "SipRequestTool": { "type": "object", "properties": { "messages": { @@ -39469,78 +39946,37 @@ "type": { "type": "string", "enum": [ - "gohighlevel.calendar.event.create" + "sipRequest" ], - "description": "The type of tool. \"gohighlevel.calendar.event.create\" for GoHighLevel Calendar Event Create tool." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." + "description": "The type of tool. \"sipRequest\" for SIP request tool." }, - "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", + "verb": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." + "enum": [ + "INFO", + "MESSAGE", + "NOTIFY" + ], + "description": "The SIP method to send." }, - "rejectionPlan": { - "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", + "headers": { + "description": "JSON schema for headers the model should populate when sending the SIP request.", "allOf": [ { - "$ref": "#/components/schemas/ToolRejectionPlan" + "$ref": "#/components/schemas/JsonSchema" } ] - } - }, - "required": [ - "type", - "id", - "orgId", - "createdAt", - "updatedAt" - ] - }, - "GoHighLevelContactCreateTool": { - "type": "object", - "properties": { - "messages": { - "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] - } }, - "type": { - "type": "string", - "enum": [ - "gohighlevel.contact.create" - ], - "description": "The type of tool. \"gohighlevel.contact.create\" for GoHighLevel Contact Create tool." + "body": { + "description": "Body to include in the SIP request. Either a literal string body, or a JSON schema describing a structured body that the model should populate.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/JsonSchema" + } + ] }, "id": { "type": "string", @@ -39571,13 +40007,14 @@ }, "required": [ "type", + "verb", "id", "orgId", "createdAt", "updatedAt" ] }, - "GoHighLevelContactGetTool": { + "VoicemailTool": { "type": "object", "properties": { "messages": { @@ -39606,10 +40043,16 @@ }, "type": { "type": "string", + "description": "The type of tool. \"voicemail\" for Voicemail tool.", "enum": [ - "gohighlevel.contact.get" - ], - "description": "The type of tool. \"gohighlevel.contact.get\" for GoHighLevel Contact Get tool." + "voicemail" + ] + }, + "beepDetectionEnabled": { + "type": "boolean", + "description": "This is the flag that enables beep detection for voicemail detection and applies only for twilio based calls.\n\n@default false", + "default": false, + "example": false }, "id": { "type": "string", @@ -40195,6 +40638,82 @@ "type" ] }, + "CreateSipRequestToolDTO": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } + }, + "type": { + "type": "string", + "enum": [ + "sipRequest" + ], + "description": "The type of tool. \"sipRequest\" for SIP request tool." + }, + "verb": { + "type": "string", + "enum": [ + "INFO", + "MESSAGE", + "NOTIFY" + ], + "description": "The SIP method to send." + }, + "headers": { + "description": "JSON schema for headers the model should populate when sending the SIP request.", + "allOf": [ + { + "$ref": "#/components/schemas/JsonSchema" + } + ] + }, + "body": { + "description": "Body to include in the SIP request. Either a literal string body, or a JSON schema describing a structured body that the model should populate.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/JsonSchema" + } + ] + }, + "rejectionPlan": { + "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", + "allOf": [ + { + "$ref": "#/components/schemas/ToolRejectionPlan" + } + ] + } + }, + "required": [ + "type", + "verb" + ] + }, "UpdateApiRequestToolDTO": { "type": "object", "properties": { @@ -40928,20 +41447,72 @@ ] } }, - "subType": { - "type": "string", - "enum": [ - "text_editor_20241022" - ], - "description": "The sub type of tool." - }, - "server": { - "description": "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook expects a response with tool call result.", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] + "subType": { + "type": "string", + "enum": [ + "text_editor_20241022" + ], + "description": "The sub type of tool." + }, + "server": { + "description": "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook expects a response with tool call result.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + }, + "rejectionPlan": { + "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", + "allOf": [ + { + "$ref": "#/components/schemas/ToolRejectionPlan" + } + ] + }, + "name": { + "type": "string", + "description": "The name of the tool, fixed to 'str_replace_editor'", + "default": "str_replace_editor", + "enum": [ + "str_replace_editor" + ] + } + } + }, + "UpdateQueryToolDTO": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } + }, + "knowledgeBases": { + "description": "The knowledge bases to query", + "type": "array", + "items": { + "$ref": "#/components/schemas/KnowledgeBase" + } }, "rejectionPlan": { "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", @@ -40950,18 +41521,10 @@ "$ref": "#/components/schemas/ToolRejectionPlan" } ] - }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'str_replace_editor'", - "default": "str_replace_editor", - "enum": [ - "str_replace_editor" - ] } } }, - "UpdateQueryToolDTO": { + "UpdateGoogleCalendarCreateEventToolDTO": { "type": "object", "properties": { "messages": { @@ -40988,13 +41551,6 @@ ] } }, - "knowledgeBases": { - "description": "The knowledge bases to query", - "type": "array", - "items": { - "$ref": "#/components/schemas/KnowledgeBase" - } - }, "rejectionPlan": { "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", "allOf": [ @@ -41005,7 +41561,7 @@ } } }, - "UpdateGoogleCalendarCreateEventToolDTO": { + "UpdateGoogleSheetsRowAppendToolDTO": { "type": "object", "properties": { "messages": { @@ -41042,7 +41598,7 @@ } } }, - "UpdateGoogleSheetsRowAppendToolDTO": { + "UpdateGoogleCalendarCheckAvailabilityToolDTO": { "type": "object", "properties": { "messages": { @@ -41079,7 +41635,7 @@ } } }, - "UpdateGoogleCalendarCheckAvailabilityToolDTO": { + "UpdateSlackSendMessageToolDTO": { "type": "object", "properties": { "messages": { @@ -41116,7 +41672,7 @@ } } }, - "UpdateSlackSendMessageToolDTO": { + "UpdateSmsToolDTO": { "type": "object", "properties": { "messages": { @@ -41153,7 +41709,7 @@ } } }, - "UpdateSmsToolDTO": { + "UpdateMcpToolDTO": { "type": "object", "properties": { "messages": { @@ -41180,6 +41736,14 @@ ] } }, + "server": { + "description": "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook expects a response with tool call result.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + }, "rejectionPlan": { "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", "allOf": [ @@ -41187,10 +41751,13 @@ "$ref": "#/components/schemas/ToolRejectionPlan" } ] + }, + "metadata": { + "$ref": "#/components/schemas/McpToolMetadata" } } }, - "UpdateMcpToolDTO": { + "UpdateGoHighLevelCalendarAvailabilityToolDTO": { "type": "object", "properties": { "messages": { @@ -41217,13 +41784,42 @@ ] } }, - "server": { - "description": "\n This is the server where a `tool-calls` webhook will be sent.\n\n Notes:\n - Webhook is sent to this server when a tool call is made.\n - Webhook contains the call, assistant, and phone number objects.\n - Webhook contains the variables set on the assistant.\n - Webhook is sent to the first available URL in this order: {{tool.server.url}}, {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n - Webhook expects a response with tool call result.", + "rejectionPlan": { + "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", "allOf": [ { - "$ref": "#/components/schemas/Server" + "$ref": "#/components/schemas/ToolRejectionPlan" } ] + } + } + }, + "UpdateGoHighLevelCalendarEventCreateToolDTO": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } }, "rejectionPlan": { "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", @@ -41232,13 +41828,10 @@ "$ref": "#/components/schemas/ToolRejectionPlan" } ] - }, - "metadata": { - "$ref": "#/components/schemas/McpToolMetadata" } } }, - "UpdateGoHighLevelCalendarAvailabilityToolDTO": { + "UpdateGoHighLevelContactCreateToolDTO": { "type": "object", "properties": { "messages": { @@ -41275,7 +41868,7 @@ } } }, - "UpdateGoHighLevelCalendarEventCreateToolDTO": { + "UpdateGoHighLevelContactGetToolDTO": { "type": "object", "properties": { "messages": { @@ -41312,7 +41905,7 @@ } } }, - "UpdateGoHighLevelContactCreateToolDTO": { + "UpdateSipRequestToolDTO": { "type": "object", "properties": { "messages": { @@ -41339,6 +41932,34 @@ ] } }, + "verb": { + "type": "string", + "enum": [ + "INFO", + "MESSAGE", + "NOTIFY" + ], + "description": "The SIP method to send." + }, + "headers": { + "description": "JSON schema for headers the model should populate when sending the SIP request.", + "allOf": [ + { + "$ref": "#/components/schemas/JsonSchema" + } + ] + }, + "body": { + "description": "Body to include in the SIP request. Either a literal string body, or a JSON schema describing a structured body that the model should populate.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/components/schemas/JsonSchema" + } + ] + }, "rejectionPlan": { "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", "allOf": [ @@ -41349,7 +41970,7 @@ } } }, - "UpdateGoHighLevelContactGetToolDTO": { + "UpdateVoicemailToolDTO": { "type": "object", "properties": { "messages": { @@ -41376,6 +41997,12 @@ ] } }, + "beepDetectionEnabled": { + "type": "boolean", + "description": "This is the flag that enables beep detection for voicemail detection and applies only for twilio based calls.\n\n@default false", + "default": false, + "example": false + }, "rejectionPlan": { "description": "This is the plan to reject a tool call based on the conversation state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: { position: -1, role: 'user' },\n negate: true // Reject if pattern does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user is actually asking a question\n```json\n{\n conditions: [{\n type: 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user' }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' %}\n{% assign mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content contains 'transfer' or msg.content contains 'connect' or msg.content contains 'speak to' %}\n {% assign mentioned = true %}\n {% break %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall if the bot is looping and trying to exit\n```json\n{\n conditions: [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role', 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content | downcase %}\n {% comment %} Check for repetitive messages {% endcomment %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n {% comment %} Check for common loop phrases {% endcomment %}\n {% elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks' %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n {% endif %}\n{% endif %}`\n }]\n}\n```", "allOf": [ @@ -41753,16 +42380,6 @@ "providerId" ] }, - "ComplianceOverride": { - "type": "object", - "properties": { - "forceStoreOnHipaaEnabled": { - "type": "boolean", - "description": "Force storage for this output under HIPAA. Only enable if output contains no sensitive data.", - "example": false - } - } - }, "StructuredOutput": { "type": "object", "properties": { @@ -41798,133 +42415,30 @@ } ] }, - "id": { - "type": "string", - "description": "This is the unique identifier for the structured output." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the org that this structured output belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the structured output was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the structured output was last updated." - }, - "name": { - "type": "string", - "description": "This is the name of the structured output.", - "minLength": 1, - "maxLength": 40 - }, - "description": { - "type": "string", - "description": "This is the description of what the structured output extracts.\n\nUse this to provide context about what data will be extracted and how it will be used." - }, - "assistantIds": { - "description": "These are the assistant IDs that this structured output is linked to.\n\nWhen linked to assistants, this structured output will be available for extraction during those assistant's calls.", - "type": "array", - "items": { - "type": "string" - } - }, - "workflowIds": { - "description": "These are the workflow IDs that this structured output is linked to.\n\nWhen linked to workflows, this structured output will be available for extraction during those workflow's execution.", - "type": "array", - "items": { - "type": "string" - } - }, - "schema": { - "description": "This is the JSON Schema definition for the structured output.\n\nDefines the structure and validation rules for the data that will be extracted. Supports all JSON Schema features including:\n- Objects and nested properties\n- Arrays and array validation\n- String, number, boolean, and null types\n- Enums and const values\n- Validation constraints (min/max, patterns, etc.)\n- Composition with allOf, anyOf, oneOf", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - } - }, - "required": [ - "id", - "orgId", - "createdAt", - "updatedAt", - "name", - "schema" - ] - }, - "StructuredOutputPaginatedResponse": { - "type": "object", - "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/components/schemas/StructuredOutput" - } - }, - "metadata": { - "$ref": "#/components/schemas/PaginationMeta" - } - }, - "required": [ - "results", - "metadata" - ] - }, - "CreateStructuredOutputDTO": { - "type": "object", - "properties": { - "model": { - "description": "This is the model that will be used to extract the structured output.\n\nTo provide your own custom system and user prompts for structured output extraction, populate the messages array with your system and user messages. You can specify liquid templating in your system and user messages.\nBetween the system or user messages, you must reference either 'transcript' or 'messages' with the '{{}}' syntax to access the conversation history.\nBetween the system or user messages, you must reference a variation of the structured output with the '{{}}' syntax to access the structured output definition.\ni.e.:\n{{structuredOutput}}\n{{structuredOutput.name}}\n{{structuredOutput.description}}\n{{structuredOutput.schema}}\n\nIf model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts.\nIf messages or required fields are not specified, the default system and user prompts will be used.", - "oneOf": [ - { - "$ref": "#/components/schemas/WorkflowOpenAIModel", - "title": "WorkflowOpenAIModel" - }, - { - "$ref": "#/components/schemas/WorkflowAnthropicModel", - "title": "WorkflowAnthropicModel" - }, - { - "$ref": "#/components/schemas/WorkflowGoogleModel", - "title": "WorkflowGoogleModel" - }, - { - "$ref": "#/components/schemas/WorkflowCustomModel", - "title": "WorkflowCustomModel" - } - ] - }, - "compliancePlan": { - "description": "Compliance configuration for this output. Only enable overrides if no sensitive data will be stored.", - "example": { - "forceStoreOnHipaaEnabled": false - }, - "allOf": [ - { - "$ref": "#/components/schemas/ComplianceOverride" - } - ] - }, + "id": { + "type": "string", + "description": "This is the unique identifier for the structured output." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this structured output belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the structured output was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the structured output was last updated." + }, "name": { "type": "string", "description": "This is the name of the structured output.", "minLength": 1, "maxLength": 40 }, - "schema": { - "description": "This is the JSON Schema definition for the structured output.\n\nThis is required when creating a structured output. Defines the structure and validation rules for the data that will be extracted. Supports all JSON Schema features including:\n- Objects and nested properties\n- Arrays and array validation\n- String, number, boolean, and null types\n- Enums and const values\n- Validation constraints (min/max, patterns, etc.)\n- Composition with allOf, anyOf, oneOf", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, "description": { "type": "string", "description": "This is the description of what the structured output extracts.\n\nUse this to provide context about what data will be extracted and how it will be used." @@ -41942,13 +42456,43 @@ "items": { "type": "string" } + }, + "schema": { + "description": "This is the JSON Schema definition for the structured output.\n\nDefines the structure and validation rules for the data that will be extracted. Supports all JSON Schema features including:\n- Objects and nested properties\n- Arrays and array validation\n- String, number, boolean, and null types\n- Enums and const values\n- Validation constraints (min/max, patterns, etc.)\n- Composition with allOf, anyOf, oneOf", + "allOf": [ + { + "$ref": "#/components/schemas/JsonSchema" + } + ] } }, "required": [ + "id", + "orgId", + "createdAt", + "updatedAt", "name", "schema" ] }, + "StructuredOutputPaginatedResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/StructuredOutput" + } + }, + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" + } + }, + "required": [ + "results", + "metadata" + ] + }, "UpdateStructuredOutputDTO": { "type": "object", "properties": { @@ -42882,7 +43426,7 @@ "name": { "type": "string", "minLength": 1, - "maxLength": 40 + "maxLength": 255 } } }, @@ -42925,7 +43469,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -42985,6 +43529,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -43043,7 +43591,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -43149,7 +43697,7 @@ "name": { "type": "string", "minLength": 1, - "maxLength": 40 + "maxLength": 255 } } }, @@ -43160,7 +43708,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -43259,7 +43807,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -43333,7 +43881,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -43393,6 +43941,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -43406,7 +43958,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -43471,7 +44023,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -43544,7 +44096,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -43592,7 +44144,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -43652,6 +44204,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -43669,7 +44225,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -43738,7 +44294,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -43815,7 +44371,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -44094,6 +44650,150 @@ "operation" ] }, + "JSONQueryOnEventsTable": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "This is the type of query. Only allowed type is \"vapiql-json\".", + "example": "vapiql-json", + "enum": [ + "vapiql-json" + ] + }, + "table": { + "type": "string", + "description": "This is the table that will be queried.\nMust be \"events\" for event-based insights.", + "enum": [ + "events" + ] + }, + "on": { + "type": "string", + "description": "The event type to query", + "example": "assistant.model.requestFailed", + "enum": [ + "call.started", + "call.ended", + "call.inProgress", + "call.queued", + "call.transportConnected", + "call.transportDisconnected", + "call.transportReconnected", + "call.transferInitiated", + "call.transferCompleted", + "call.transferFailed", + "call.transferCancelled", + "call.handoffInitiated", + "call.handoffCompleted", + "call.handoffFailed", + "call.assistantSwapped", + "call.assistantStarted", + "call.customerJoined", + "call.customerLeft", + "call.controlReceived", + "call.listenStarted", + "call.recordingStarted", + "call.recordingPaused", + "call.recordingResumed", + "call.voicemailDetected", + "call.voicemailNotDetected", + "call.dtmfReceived", + "call.dtmfSent", + "call.amdDetected", + "call.hookTriggered", + "call.hookSucceeded", + "call.hookFailed", + "call.statusReceived", + "call.silenceTimeout", + "call.microphoneTimeout", + "call.maxDurationReached", + "assistant.voice.requestStarted", + "assistant.voice.requestSucceeded", + "assistant.voice.requestFailed", + "assistant.voice.connectionOpened", + "assistant.voice.connectionClosed", + "assistant.voice.firstAudioReceived", + "assistant.voice.audioChunkReceived", + "assistant.voice.generationSucceeded", + "assistant.voice.generationFailed", + "assistant.voice.textPushed", + "assistant.voice.reconnecting", + "assistant.voice.cleanup", + "assistant.voice.clearing", + "assistant.voice.voiceSwitched", + "assistant.model.requestStarted", + "assistant.model.requestSucceeded", + "assistant.model.requestFailed", + "assistant.model.connectionOpened", + "assistant.model.connectionClosed", + "assistant.model.firstTokenReceived", + "assistant.model.tokenReceived", + "assistant.model.responseSucceeded", + "assistant.model.responseFailed", + "assistant.model.toolCallsReceived", + "assistant.model.reconnecting", + "assistant.model.cleanup", + "assistant.model.clearing", + "assistant.tool.started", + "assistant.tool.completed", + "assistant.tool.failed", + "assistant.tool.delayedMessageSent", + "assistant.tool.timeout", + "assistant.tool.asyncCallbackReceived", + "assistant.transcriber.requestStarted", + "assistant.transcriber.requestSucceeded", + "assistant.transcriber.requestFailed", + "assistant.transcriber.connectionOpened", + "assistant.transcriber.connectionClosed", + "assistant.transcriber.partialTranscript", + "assistant.transcriber.finalTranscript", + "assistant.transcriber.keepAlive", + "assistant.transcriber.reconnecting", + "assistant.transcriber.cleanup", + "assistant.transcriber.clearing", + "assistant.transcriber.transcriptIgnored", + "assistant.transcriber.languageSwitched" + ] + }, + "operation": { + "type": "string", + "description": "This is the operation to perform on matching events.\nFor events table, only \"count\" is supported.", + "example": "count", + "enum": [ + "count" + ] + }, + "filters": { + "type": "array", + "description": "These are the filters to apply to the events query.\nEach filter filters on a field specific to the event type.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/EventsTableStringCondition" + }, + { + "$ref": "#/components/schemas/EventsTableNumberCondition" + }, + { + "$ref": "#/components/schemas/EventsTableBooleanCondition" + } + ] + } + }, + "name": { + "type": "string", + "description": "This is the name of the query.\nIt will be used to label the query in the insight board on the UI.", + "example": "Model Failures" + } + }, + "required": [ + "type", + "table", + "on", + "operation" + ] + }, "FilterStringTypeColumnOnCallTable": { "type": "object", "properties": { @@ -44239,7 +44939,9 @@ "in", "not_in", "contains", - "not_contains" + "not_contains", + "is_empty", + "is_not_empty" ] }, "value": { @@ -44279,7 +44981,9 @@ "example": "\"in\" or \"not_in\"", "enum": [ "in", - "not_in" + "not_in", + "is_empty", + "is_not_empty" ] }, "value": { @@ -44319,7 +45023,9 @@ "example": "\"in\" or \"not_in\"", "enum": [ "in", - "not_in" + "not_in", + "is_empty", + "is_not_empty" ] }, "value": { @@ -44336,6 +45042,98 @@ "value" ] }, + "EventsTableStringCondition": { + "type": "object", + "properties": { + "column": { + "type": "string", + "description": "The string field name from the event data", + "example": "provider" + }, + "operator": { + "type": "string", + "description": "String comparison operator", + "example": "=", + "enum": [ + "=", + "!=", + "contains", + "notContains" + ] + }, + "value": { + "type": "string", + "description": "The string value to compare", + "example": "openai" + } + }, + "required": [ + "column", + "operator", + "value" + ] + }, + "EventsTableNumberCondition": { + "type": "object", + "properties": { + "column": { + "type": "string", + "description": "The number field name from the event data", + "example": "latency" + }, + "operator": { + "type": "string", + "description": "Number comparison operator", + "example": ">=", + "enum": [ + "=", + "!=", + ">", + ">=", + "<", + "<=" + ] + }, + "value": { + "type": "number", + "description": "The number value to compare", + "example": 1000 + } + }, + "required": [ + "column", + "operator", + "value" + ] + }, + "EventsTableBooleanCondition": { + "type": "object", + "properties": { + "column": { + "type": "string", + "description": "The boolean field name from the event data", + "example": "success" + }, + "operator": { + "type": "string", + "description": "Boolean comparison operator", + "example": "=", + "enum": [ + "=" + ] + }, + "value": { + "type": "boolean", + "description": "The boolean value to compare", + "example": true + } + }, + "required": [ + "column", + "operator", + "value" + ] + }, "BarInsightFromCallTable": { "type": "object", "properties": { @@ -44343,7 +45141,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -44403,6 +45201,10 @@ { "$ref": "#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn", "title": "JSONQueryOnCallTableWithStructuredOutputColumn" + }, + { + "$ref": "#/components/schemas/JSONQueryOnEventsTable", + "title": "JSONQueryOnEventsTable" } ] } @@ -44420,7 +45222,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -44489,7 +45291,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -44566,7 +45368,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -44619,7 +45421,7 @@ "description": "This is the name of the formula.\nIt will be used to label the formula in the insight board on the UI.", "example": "Booking Rate", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "formula": { "type": "string", @@ -44699,7 +45501,7 @@ "type": "string", "description": "This is the name of the Insight.", "minLength": 1, - "maxLength": 40 + "maxLength": 255 }, "type": { "type": "string", @@ -46375,14 +47177,18 @@ "type": "string", "description": "This is the ID of the monitor that triggered this issue." }, - "policyId": { + "triggerId": { "type": "string", - "description": "This is the ID of the policy that triggered this issue." + "description": "This is the ID of the trigger that created this issue." }, "totalCalls": { "type": "number", "description": "This is the total number of calls made since evaluationStartAt to determine percentage of calls affected." }, + "callsCount": { + "type": "number", + "description": "This is the count of calls that triggered this issue.\nThis is populated in list responses as a summary count." + }, "evaluationStartAt": { "format": "date-time", "type": "string", @@ -46395,6 +47201,11 @@ "$ref": "#/components/schemas/IssueCall" } }, + "lastSeenAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the issue was last seen (most recent failed call).\nThis is populated in list responses from the MAX(failed_at) in issue_call table." + }, "status": { "type": "string", "description": "This is the status of the issue.", @@ -46409,24 +47220,16 @@ "description": "This is the email/name of the user who acknowledged the issue.", "maxLength": 255 }, - "resolvedBy": { - "type": "string", - "description": "This is the email/name of the user who resolved the issue.", - "maxLength": 255 - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the issue." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the org that this issue belongs to." - }, "acknowledgedAt": { "format": "date-time", "type": "string", "description": "This is the ISO 8601 date-time string of when the issue was acknowledged." }, + "resolvedBy": { + "type": "string", + "description": "This is the email/name of the user who resolved the issue.", + "maxLength": 255 + }, "resolvedAt": { "format": "date-time", "type": "string", @@ -46441,18 +47244,26 @@ "format": "date-time", "type": "string", "description": "This is the ISO 8601 date-time string of when the issue was last updated." + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the issue." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this issue belongs to." } }, "required": [ "monitorId", - "policyId", + "triggerId", "totalCalls", "evaluationStartAt", "status", - "id", - "orgId", "createdAt", - "updatedAt" + "updatedAt", + "id", + "orgId" ] }, "UpdateIssueDTO": { @@ -46479,492 +47290,6 @@ } } }, - "PolicyThreshold": { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "This is the type of threshold evaluation.", - "enum": [ - "count", - "percentage" - ], - "example": "percentage" - }, - "comparator": { - "type": "string", - "description": "This is the comparator operator for the threshold.", - "enum": [ - "lt", - "gt", - "eq", - "lte", - "gte", - "neq" - ], - "example": "gt" - }, - "value": { - "type": "number", - "description": "This is the value to compare against.", - "minimum": 0, - "example": 50 - } - }, - "required": [ - "type", - "comparator", - "value" - ] - }, - "PolicySchedule": { - "type": "object", - "properties": { - "second": { - "description": "Second(s) of the minute. Valid values: 0-59 or '*' for any second.\nCan be a single number, an array, or '*'.\n@default 0", - "oneOf": [ - { - "type": "number" - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "string", - "enum": [ - "*" - ] - } - ], - "example": 0, - "default": 0 - }, - "minute": { - "description": "Minute(s) of the hour. Valid values: 0-59 or '*' for any minute.\nCan be a single number, an array, or '*'.\n@default 0", - "oneOf": [ - { - "type": "number" - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "string", - "enum": [ - "*" - ] - } - ], - "example": 30, - "default": 0 - }, - "hour": { - "description": "Hour(s) of the day. Valid values: 0-23 or '*' for any hour.\nCan be a single number, an array, or '*'.\n@default 0", - "oneOf": [ - { - "type": "number" - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "string", - "enum": [ - "*" - ] - } - ], - "example": [ - 9, - 14, - 18 - ], - "default": 0 - }, - "dayOfMonth": { - "description": "Day(s) of the month. Valid values: 1-31 or '*' for any day.\nCan be a single number, an array, or '*'.", - "oneOf": [ - { - "type": "number" - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "string", - "enum": [ - "*" - ] - } - ], - "example": [ - 1, - 15 - ] - }, - "month": { - "description": "Month(s) of the year. Use uppercase full names: JANUARY, FEBRUARY, etc., or '*' for any month.\nCan be a single month, an array, or '*'.", - "oneOf": [ - { - "type": "string", - "enum": [ - "JANUARY", - "FEBRUARY", - "MARCH", - "APRIL", - "MAY", - "JUNE", - "JULY", - "AUGUST", - "SEPTEMBER", - "OCTOBER", - "NOVEMBER", - "DECEMBER", - "*" - ] - }, - { - "type": "array", - "items": { - "type": "string", - "enum": [ - "JANUARY", - "FEBRUARY", - "MARCH", - "APRIL", - "MAY", - "JUNE", - "JULY", - "AUGUST", - "SEPTEMBER", - "OCTOBER", - "NOVEMBER", - "DECEMBER" - ] - } - } - ], - "example": [ - "JANUARY", - "APRIL", - "JULY" - ] - }, - "dayOfWeek": { - "description": "Day(s) of the week. Use uppercase full names: SUNDAY, MONDAY, etc., or '*' for any day.\nCan be a single day, an array, or '*'.", - "oneOf": [ - { - "type": "string", - "enum": [ - "SUNDAY", - "MONDAY", - "TUESDAY", - "WEDNESDAY", - "THURSDAY", - "FRIDAY", - "SATURDAY", - "*" - ] - }, - { - "type": "array", - "items": { - "type": "string", - "enum": [ - "SUNDAY", - "MONDAY", - "TUESDAY", - "WEDNESDAY", - "THURSDAY", - "FRIDAY", - "SATURDAY" - ] - } - } - ], - "example": [ - "MONDAY", - "WEDNESDAY", - "FRIDAY" - ] - }, - "year": { - "description": "Year(s). Use full years like 2025 or '*' for any year.\nCan be a single number, an array, or '*'.", - "oneOf": [ - { - "type": "number" - }, - { - "type": "array", - "items": { - "type": "number" - } - }, - { - "type": "string", - "enum": [ - "*" - ] - } - ], - "example": 2025 - } - } - }, - "PolicyInterval": { - "type": "object", - "properties": { - "every": { - "type": "number", - "description": "Interval in minutes", - "example": 60, - "minimum": 1 - }, - "offset": { - "type": "number", - "description": "Offset in minutes", - "example": 15, - "minimum": 0 - } - }, - "required": [ - "every" - ] - }, - "Policy": { - "type": "object", - "properties": { - "monitorIds": { - "description": "These are the monitor IDs associated with this policy.\nThis is only present when retrieving a single policy by ID.", - "type": "array", - "items": { - "type": "string" - } - }, - "name": { - "type": "string", - "description": "This is the name of the policy.", - "maxLength": 100, - "example": "High Error Rate Policy" - }, - "threshold": { - "description": "This is the threshold configuration for the policy.", - "allOf": [ - { - "$ref": "#/components/schemas/PolicyThreshold" - } - ] - }, - "lookbackWindowMinutes": { - "type": "number", - "description": "This is the lookback window in minutes. The policy will query events from the last N minutes.", - "minimum": 1, - "maximum": 1440, - "example": 60 - }, - "severity": { - "type": "string", - "description": "This is the severity level of issues created by this policy.", - "enum": [ - "error", - "warning", - "info" - ], - "example": "error" - }, - "schedule": { - "description": "This is the schedule configuration for when the policy should run.\nUse either schedule or interval, not both.", - "allOf": [ - { - "$ref": "#/components/schemas/PolicySchedule" - } - ] - }, - "interval": { - "description": "This is the interval configuration for when the policy should run.\nUse either schedule or interval, not both.", - "allOf": [ - { - "$ref": "#/components/schemas/PolicyInterval" - } - ] - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the policy." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the org that this policy belongs to." - }, - "lastRunAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the policy was last run." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the policy was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the policy was last updated." - } - }, - "required": [ - "name", - "threshold", - "lookbackWindowMinutes", - "severity", - "id", - "orgId", - "createdAt", - "updatedAt" - ] - }, - "CreatePolicyDTO": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "This is the name of the policy.", - "maxLength": 100, - "example": "High Error Rate Policy" - }, - "threshold": { - "description": "This is the threshold configuration for the policy.", - "allOf": [ - { - "$ref": "#/components/schemas/PolicyThreshold" - } - ] - }, - "lookbackWindowMinutes": { - "type": "number", - "description": "This is the lookback window in minutes. The policy will query events from the last N minutes.", - "minimum": 1, - "maximum": 1440, - "example": 60 - }, - "severity": { - "type": "string", - "description": "This is the severity level of issues created by this policy.", - "enum": [ - "error", - "warning", - "info" - ], - "example": "error" - }, - "schedule": { - "description": "This is the schedule configuration for when the policy should run.\nUse either schedule or interval, not both.", - "allOf": [ - { - "$ref": "#/components/schemas/PolicySchedule" - } - ] - }, - "interval": { - "description": "This is the interval configuration for when the policy should run.\nUse either schedule or interval, not both.", - "allOf": [ - { - "$ref": "#/components/schemas/PolicyInterval" - } - ] - }, - "monitorIds": { - "description": "These are the monitor IDs to associate with this policy.\nThis creates entries in the monitor-policy join table.", - "example": [ - "550e8400-e29b-41d4-a716-446655440000" - ], - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "name", - "threshold", - "lookbackWindowMinutes", - "severity" - ] - }, - "UpdatePolicyDTO": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "This is the name of the policy.", - "maxLength": 100, - "example": "High Error Rate Policy" - }, - "threshold": { - "description": "This is the threshold configuration for the policy.", - "allOf": [ - { - "$ref": "#/components/schemas/PolicyThreshold" - } - ] - }, - "lookbackWindowMinutes": { - "type": "number", - "description": "This is the lookback window in minutes. The policy will query events from the last N minutes.", - "minimum": 1, - "maximum": 1440, - "example": 60 - }, - "severity": { - "type": "string", - "description": "This is the severity level of issues created by this policy.", - "enum": [ - "error", - "warning", - "info" - ], - "example": "error" - }, - "schedule": { - "description": "This is the schedule configuration for when the policy should run.\nUse either schedule or interval, not both.", - "allOf": [ - { - "$ref": "#/components/schemas/PolicySchedule" - } - ] - }, - "interval": { - "description": "This is the interval configuration for when the policy should run.\nUse either schedule or interval, not both.", - "allOf": [ - { - "$ref": "#/components/schemas/PolicyInterval" - } - ] - }, - "monitorIds": { - "description": "These are the monitor IDs to associate with this policy.\nThis creates entries in the monitor-policy join table.", - "example": [ - "550e8400-e29b-41d4-a716-446655440000" - ], - "type": "array", - "items": { - "type": "string" - } - } - } - }, "CreateOrgDTO": { "type": "object", "properties": { @@ -52559,6 +52884,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] }, @@ -52726,6 +53059,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] }, @@ -52915,6 +53256,14 @@ { "$ref": "#/components/schemas/CreateTransferCallToolDTO", "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateSipRequestToolDTO", + "title": "SipRequestTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" } ] },