diff --git a/.github/workflows/update-openapi.yml b/.github/workflows/update-openapi.yml index b164b545d..09309be5c 100644 --- a/.github/workflows/update-openapi.yml +++ b/.github/workflows/update-openapi.yml @@ -14,16 +14,8 @@ jobs: - name: Fetch OpenAPI specification run: | - curl -s https://api.vapi.ai/api-json > temp-openapi.json - - - name: Verify JSON validity - run: | - cat temp-openapi.json | jq . > /dev/null - if [ $? -ne 0 ]; then - echo "Error: Invalid JSON received from API endpoint" - exit 1 - fi - mv temp-openapi.json ./fern/apis/api/openapi.json + npm install -g fern-api + fern api update - name: Check for changes id: check_changes diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index f99146664..d073512e5 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -22,7 +22,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Call" + "oneOf": [ + { + "$ref": "#/components/schemas/Call" + }, + { + "$ref": "#/components/schemas/CallBatchResponse" + } + ] } } } @@ -596,6 +603,10 @@ { "$ref": "#/components/schemas/CreateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/CreateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ], "discriminator": { @@ -604,7 +615,8 @@ "byo-phone-number": "#/components/schemas/CreateByoPhoneNumberDTO", "twilio": "#/components/schemas/CreateTwilioPhoneNumberDTO", "vonage": "#/components/schemas/CreateVonagePhoneNumberDTO", - "vapi": "#/components/schemas/CreateVapiPhoneNumberDTO" + "vapi": "#/components/schemas/CreateVapiPhoneNumberDTO", + "telnyx": "#/components/schemas/CreateTelnyxPhoneNumberDTO" } } } @@ -634,6 +646,10 @@ { "$ref": "#/components/schemas/VapiPhoneNumber", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/TelnyxPhoneNumber", + "title": "TelnyxPhoneNumber" } ], "discriminator": { @@ -642,7 +658,8 @@ "byo-phone-number": "#/components/schemas/ByoPhoneNumber", "twilio": "#/components/schemas/TwilioPhoneNumber", "vonage": "#/components/schemas/VonagePhoneNumber", - "vapi": "#/components/schemas/VapiPhoneNumber" + "vapi": "#/components/schemas/VapiPhoneNumber", + "telnyx": "#/components/schemas/TelnyxPhoneNumber" } } } @@ -780,6 +797,10 @@ { "$ref": "#/components/schemas/VapiPhoneNumber", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/TelnyxPhoneNumber", + "title": "TelnyxPhoneNumber" } ], "discriminator": { @@ -788,7 +809,8 @@ "byo-phone-number": "#/components/schemas/ByoPhoneNumber", "twilio": "#/components/schemas/TwilioPhoneNumber", "vonage": "#/components/schemas/VonagePhoneNumber", - "vapi": "#/components/schemas/VapiPhoneNumber" + "vapi": "#/components/schemas/VapiPhoneNumber", + "telnyx": "#/components/schemas/TelnyxPhoneNumber" } } } @@ -844,6 +866,10 @@ { "$ref": "#/components/schemas/VapiPhoneNumber", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/TelnyxPhoneNumber", + "title": "TelnyxPhoneNumber" } ], "discriminator": { @@ -852,7 +878,8 @@ "byo-phone-number": "#/components/schemas/ByoPhoneNumber", "twilio": "#/components/schemas/TwilioPhoneNumber", "vonage": "#/components/schemas/VonagePhoneNumber", - "vapi": "#/components/schemas/VapiPhoneNumber" + "vapi": "#/components/schemas/VapiPhoneNumber", + "telnyx": "#/components/schemas/TelnyxPhoneNumber" } } } @@ -903,6 +930,10 @@ { "$ref": "#/components/schemas/UpdateVapiPhoneNumberDTO", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/UpdateTelnyxPhoneNumberDTO", + "title": "TelnyxPhoneNumber" } ], "discriminator": { @@ -911,7 +942,8 @@ "byo-phone-number": "#/components/schemas/UpdateByoPhoneNumberDTO", "twilio": "#/components/schemas/UpdateTwilioPhoneNumberDTO", "vonage": "#/components/schemas/UpdateVonagePhoneNumberDTO", - "vapi": "#/components/schemas/UpdateVapiPhoneNumberDTO" + "vapi": "#/components/schemas/UpdateVapiPhoneNumberDTO", + "telnyx": "#/components/schemas/UpdateTelnyxPhoneNumberDTO" } } } @@ -941,6 +973,10 @@ { "$ref": "#/components/schemas/VapiPhoneNumber", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/TelnyxPhoneNumber", + "title": "TelnyxPhoneNumber" } ], "discriminator": { @@ -949,7 +985,8 @@ "byo-phone-number": "#/components/schemas/ByoPhoneNumber", "twilio": "#/components/schemas/TwilioPhoneNumber", "vonage": "#/components/schemas/VonagePhoneNumber", - "vapi": "#/components/schemas/VapiPhoneNumber" + "vapi": "#/components/schemas/VapiPhoneNumber", + "telnyx": "#/components/schemas/TelnyxPhoneNumber" } } } @@ -1002,6 +1039,10 @@ { "$ref": "#/components/schemas/VapiPhoneNumber", "title": "VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/TelnyxPhoneNumber", + "title": "TelnyxPhoneNumber" } ], "discriminator": { @@ -1010,7 +1051,8 @@ "byo-phone-number": "#/components/schemas/ByoPhoneNumber", "twilio": "#/components/schemas/TwilioPhoneNumber", "vonage": "#/components/schemas/VonagePhoneNumber", - "vapi": "#/components/schemas/VapiPhoneNumber" + "vapi": "#/components/schemas/VapiPhoneNumber", + "telnyx": "#/components/schemas/TelnyxPhoneNumber" } } } @@ -1028,17 +1070,88 @@ ] } }, - "/squad": { + "/tool": { "post": { - "operationId": "SquadController_create", - "summary": "Create Squad", + "operationId": "ToolController_create", + "summary": "Create Tool", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateSquadDTO" + "oneOf": [ + { + "$ref": "#/components/schemas/CreateDtmfToolDTO", + "title": "DtmfTool" + }, + { + "$ref": "#/components/schemas/CreateEndCallToolDTO", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/CreateFunctionToolDTO", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/CreateGhlToolDTO", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/CreateMakeToolDTO", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/CreateTransferCallToolDTO", + "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateOutputToolDTO", + "title": "OutputTool" + }, + { + "$ref": "#/components/schemas/CreateBashToolDTO", + "title": "BashTool" + }, + { + "$ref": "#/components/schemas/CreateComputerToolDTO", + "title": "ComputerTool" + }, + { + "$ref": "#/components/schemas/CreateTextEditorToolDTO", + "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "dtmf": "#/components/schemas/CreateDtmfToolDTO", + "endCall": "#/components/schemas/CreateEndCallToolDTO", + "function": "#/components/schemas/CreateFunctionToolDTO", + "ghl": "#/components/schemas/CreateGhlToolDTO", + "make": "#/components/schemas/CreateMakeToolDTO", + "transferCall": "#/components/schemas/CreateTransferCallToolDTO", + "output": "#/components/schemas/CreateOutputToolDTO", + "bash": "#/components/schemas/CreateBashToolDTO", + "computer": "#/components/schemas/CreateComputerToolDTO", + "textEditor": "#/components/schemas/CreateTextEditorToolDTO", + "query": "#/components/schemas/CreateQueryToolDTO", + "google.calendar.event.create": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "google.sheets.row.append": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO" + } + } } } } @@ -1049,14 +1162,85 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Squad" + "oneOf": [ + { + "$ref": "#/components/schemas/DtmfTool", + "title": "DtmfTool" + }, + { + "$ref": "#/components/schemas/EndCallTool", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/FunctionTool", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/GhlTool", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/MakeTool", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/TransferCallTool", + "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/OutputTool", + "title": "OutputTool" + }, + { + "$ref": "#/components/schemas/BashTool", + "title": "BashTool" + }, + { + "$ref": "#/components/schemas/ComputerTool", + "title": "ComputerTool" + }, + { + "$ref": "#/components/schemas/TextEditorTool", + "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/QueryTool", + "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/GoogleCalendarCreateEventTool", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/GoogleSheetsRowAppendTool", + "title": "GoogleSheetsRowAppendTool" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "dtmf": "#/components/schemas/DtmfTool", + "endCall": "#/components/schemas/EndCallTool", + "function": "#/components/schemas/FunctionTool", + "ghl": "#/components/schemas/GhlTool", + "make": "#/components/schemas/MakeTool", + "transferCall": "#/components/schemas/TransferCallTool", + "output": "#/components/schemas/OutputTool", + "bash": "#/components/schemas/BashTool", + "computer": "#/components/schemas/ComputerTool", + "textEditor": "#/components/schemas/TextEditorTool", + "query": "#/components/schemas/QueryTool", + "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool", + "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool" + } + } } } } } }, "tags": [ - "Squads" + "Tools" ], "security": [ { @@ -1065,8 +1249,8 @@ ] }, "get": { - "operationId": "SquadController_findAll", - "summary": "List Squads", + "operationId": "ToolController_findAll", + "summary": "List Tools", "parameters": [ { "name": "limit", @@ -1168,7 +1352,78 @@ "schema": { "type": "array", "items": { - "$ref": "#/components/schemas/Squad" + "oneOf": [ + { + "$ref": "#/components/schemas/DtmfTool", + "title": "DtmfTool" + }, + { + "$ref": "#/components/schemas/EndCallTool", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/FunctionTool", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/GhlTool", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/MakeTool", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/TransferCallTool", + "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/OutputTool", + "title": "OutputTool" + }, + { + "$ref": "#/components/schemas/BashTool", + "title": "BashTool" + }, + { + "$ref": "#/components/schemas/ComputerTool", + "title": "ComputerTool" + }, + { + "$ref": "#/components/schemas/TextEditorTool", + "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/QueryTool", + "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/GoogleCalendarCreateEventTool", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/GoogleSheetsRowAppendTool", + "title": "GoogleSheetsRowAppendTool" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "dtmf": "#/components/schemas/DtmfTool", + "endCall": "#/components/schemas/EndCallTool", + "function": "#/components/schemas/FunctionTool", + "ghl": "#/components/schemas/GhlTool", + "make": "#/components/schemas/MakeTool", + "transferCall": "#/components/schemas/TransferCallTool", + "output": "#/components/schemas/OutputTool", + "bash": "#/components/schemas/BashTool", + "computer": "#/components/schemas/ComputerTool", + "textEditor": "#/components/schemas/TextEditorTool", + "query": "#/components/schemas/QueryTool", + "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool", + "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool" + } + } } } } @@ -1176,7 +1431,7 @@ } }, "tags": [ - "Squads" + "Tools" ], "security": [ { @@ -1185,10 +1440,10 @@ ] } }, - "/squad/{id}": { + "/tool/{id}": { "get": { - "operationId": "SquadController_findOne", - "summary": "Get Squad", + "operationId": "ToolController_findOne", + "summary": "Get Tool", "parameters": [ { "name": "id", @@ -1205,58 +1460,85 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/Squad" - } - } - } - } - }, - "tags": [ - "Squads" - ], - "security": [ - { - "bearer": [] - } - ] - }, - "patch": { - "operationId": "SquadController_update", - "summary": "Update Squad", - "parameters": [ - { - "name": "id", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateSquadDTO" - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Squad" + "oneOf": [ + { + "$ref": "#/components/schemas/DtmfTool", + "title": "DtmfTool" + }, + { + "$ref": "#/components/schemas/EndCallTool", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/FunctionTool", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/GhlTool", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/MakeTool", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/TransferCallTool", + "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/OutputTool", + "title": "OutputTool" + }, + { + "$ref": "#/components/schemas/BashTool", + "title": "BashTool" + }, + { + "$ref": "#/components/schemas/ComputerTool", + "title": "ComputerTool" + }, + { + "$ref": "#/components/schemas/TextEditorTool", + "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/QueryTool", + "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/GoogleCalendarCreateEventTool", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/GoogleSheetsRowAppendTool", + "title": "GoogleSheetsRowAppendTool" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "dtmf": "#/components/schemas/DtmfTool", + "endCall": "#/components/schemas/EndCallTool", + "function": "#/components/schemas/FunctionTool", + "ghl": "#/components/schemas/GhlTool", + "make": "#/components/schemas/MakeTool", + "transferCall": "#/components/schemas/TransferCallTool", + "output": "#/components/schemas/OutputTool", + "bash": "#/components/schemas/BashTool", + "computer": "#/components/schemas/ComputerTool", + "textEditor": "#/components/schemas/TextEditorTool", + "query": "#/components/schemas/QueryTool", + "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool", + "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool" + } + } } } } } }, "tags": [ - "Squads" + "Tools" ], "security": [ { @@ -1264,9 +1546,9 @@ } ] }, - "delete": { - "operationId": "SquadController_remove", - "summary": "Delete Squad", + "patch": { + "operationId": "ToolController_update", + "summary": "Update Tool", "parameters": [ { "name": "id", @@ -1277,33 +1559,6 @@ } } ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Squad" - } - } - } - } - }, - "tags": [ - "Squads" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/knowledge-base": { - "post": { - "operationId": "KnowledgeBaseController_create", - "summary": "Create Knowledge Base", - "parameters": [], "requestBody": { "required": true, "content": { @@ -1311,19 +1566,74 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/CreateTrieveKnowledgeBaseDTO", - "title": "TrieveKnowledgeBaseDTO" + "$ref": "#/components/schemas/UpdateDtmfToolDTO", + "title": "DtmfTool" }, { - "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO", - "title": "CustomKnowledgeBaseDTO" + "$ref": "#/components/schemas/UpdateEndCallToolDTO", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/UpdateFunctionToolDTO", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/UpdateGhlToolDTO", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/UpdateMakeToolDTO", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/UpdateTransferCallToolDTO", + "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/UpdateOutputToolDTO", + "title": "OutputTool" + }, + { + "$ref": "#/components/schemas/UpdateBashToolDTO", + "title": "BashTool" + }, + { + "$ref": "#/components/schemas/UpdateComputerToolDTO", + "title": "ComputerTool" + }, + { + "$ref": "#/components/schemas/UpdateTextEditorToolDTO", + "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/UpdateQueryToolDTO", + "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/UpdateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/UpdateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ], "discriminator": { - "propertyName": "provider", + "propertyName": "type", "mapping": { - "trieve": "#/components/schemas/CreateTrieveKnowledgeBaseDTO", - "custom-knowledge-base": "#/components/schemas/CreateCustomKnowledgeBaseDTO" + "dtmf": "#/components/schemas/UpdateDtmfToolDTO", + "endCall": "#/components/schemas/UpdateEndCallToolDTO", + "function": "#/components/schemas/UpdateFunctionToolDTO", + "ghl": "#/components/schemas/UpdateGhlToolDTO", + "make": "#/components/schemas/UpdateMakeToolDTO", + "transferCall": "#/components/schemas/UpdateTransferCallToolDTO", + "output": "#/components/schemas/UpdateOutputToolDTO", + "bash": "#/components/schemas/UpdateBashToolDTO", + "computer": "#/components/schemas/UpdateComputerToolDTO", + "textEditor": "#/components/schemas/UpdateTextEditorToolDTO", + "query": "#/components/schemas/UpdateQueryToolDTO", + "google.calendar.event.create": "#/components/schemas/UpdateGoogleCalendarCreateEventToolDTO", + "google.sheets.row.append": "#/components/schemas/UpdateGoogleSheetsRowAppendToolDTO" } } } @@ -1331,26 +1641,81 @@ } }, "responses": { - "201": { + "200": { "description": "", "content": { "application/json": { "schema": { "oneOf": [ { - "$ref": "#/components/schemas/TrieveKnowledgeBase", - "title": "TrieveKnowledgeBase" + "$ref": "#/components/schemas/DtmfTool", + "title": "DtmfTool" }, { - "$ref": "#/components/schemas/CustomKnowledgeBase", - "title": "CustomKnowledgeBase" + "$ref": "#/components/schemas/EndCallTool", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/FunctionTool", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/GhlTool", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/MakeTool", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/TransferCallTool", + "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/OutputTool", + "title": "OutputTool" + }, + { + "$ref": "#/components/schemas/BashTool", + "title": "BashTool" + }, + { + "$ref": "#/components/schemas/ComputerTool", + "title": "ComputerTool" + }, + { + "$ref": "#/components/schemas/TextEditorTool", + "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/QueryTool", + "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/GoogleCalendarCreateEventTool", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/GoogleSheetsRowAppendTool", + "title": "GoogleSheetsRowAppendTool" } ], "discriminator": { - "propertyName": "provider", + "propertyName": "type", "mapping": { - "trieve": "#/components/schemas/TrieveKnowledgeBase", - "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase" + "dtmf": "#/components/schemas/DtmfTool", + "endCall": "#/components/schemas/EndCallTool", + "function": "#/components/schemas/FunctionTool", + "ghl": "#/components/schemas/GhlTool", + "make": "#/components/schemas/MakeTool", + "transferCall": "#/components/schemas/TransferCallTool", + "output": "#/components/schemas/OutputTool", + "bash": "#/components/schemas/BashTool", + "computer": "#/components/schemas/ComputerTool", + "textEditor": "#/components/schemas/TextEditorTool", + "query": "#/components/schemas/QueryTool", + "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool", + "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool" } } } @@ -1359,7 +1724,7 @@ } }, "tags": [ - "Knowledge Base" + "Tools" ], "security": [ { @@ -1367,102 +1732,155 @@ } ] }, - "get": { - "operationId": "KnowledgeBaseController_findAll", - "summary": "List Knowledge Bases", + "delete": { + "operationId": "ToolController_remove", + "summary": "Delete Tool", "parameters": [ { - "name": "limit", - "required": false, - "in": "query", - "description": "This is the maximum number of items to return. Defaults to 100.", - "schema": { - "minimum": 0, - "maximum": 1000, - "type": "number" - } - }, - { - "name": "createdAtGt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLt", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtGe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is greater than or equal to the specified value.", - "schema": { - "format": "date-time", - "type": "string" - } - }, - { - "name": "createdAtLe", - "required": false, - "in": "query", - "description": "This will return items where the createdAt is less than or equal to the specified value.", + "name": "id", + "required": true, + "in": "path", "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" + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/DtmfTool", + "title": "DtmfTool" + }, + { + "$ref": "#/components/schemas/EndCallTool", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/FunctionTool", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/GhlTool", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/MakeTool", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/TransferCallTool", + "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/OutputTool", + "title": "OutputTool" + }, + { + "$ref": "#/components/schemas/BashTool", + "title": "BashTool" + }, + { + "$ref": "#/components/schemas/ComputerTool", + "title": "ComputerTool" + }, + { + "$ref": "#/components/schemas/TextEditorTool", + "title": "TextEditorTool" + }, + { + "$ref": "#/components/schemas/QueryTool", + "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/GoogleCalendarCreateEventTool", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/GoogleSheetsRowAppendTool", + "title": "GoogleSheetsRowAppendTool" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "dtmf": "#/components/schemas/DtmfTool", + "endCall": "#/components/schemas/EndCallTool", + "function": "#/components/schemas/FunctionTool", + "ghl": "#/components/schemas/GhlTool", + "make": "#/components/schemas/MakeTool", + "transferCall": "#/components/schemas/TransferCallTool", + "output": "#/components/schemas/OutputTool", + "bash": "#/components/schemas/BashTool", + "computer": "#/components/schemas/ComputerTool", + "textEditor": "#/components/schemas/TextEditorTool", + "query": "#/components/schemas/QueryTool", + "google.calendar.event.create": "#/components/schemas/GoogleCalendarCreateEventTool", + "google.sheets.row.append": "#/components/schemas/GoogleSheetsRowAppendTool" + } + } + } + } } - }, + } + }, + "tags": [ + "Tools" + ], + "security": [ { - "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" + "bearer": [] + } + ] + } + }, + "/file": { + "post": { + "operationId": "FileController_create", + "summary": "Upload File", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "multipart/form-data": { + "schema": { + "$ref": "#/components/schemas/CreateFileDTO" + } } - }, - { - "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" + } + }, + "responses": { + "201": { + "description": "File uploaded successfully", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/File" + } + } } }, - { - "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" - } + "400": { + "description": "Invalid file" } + }, + "tags": [ + "Files" ], + "security": [ + { + "bearer": [] + } + ] + }, + "get": { + "operationId": "FileController_findAll", + "summary": "List Files", + "parameters": [], "responses": { "200": { "description": "", @@ -1471,23 +1889,7 @@ "schema": { "type": "array", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TrieveKnowledgeBase", - "title": "TrieveKnowledgeBase" - }, - { - "$ref": "#/components/schemas/CustomKnowledgeBase", - "title": "CustomKnowledgeBase" - } - ], - "discriminator": { - "propertyName": "provider", - "mapping": { - "trieve": "#/components/schemas/TrieveKnowledgeBase", - "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase" - } - } + "$ref": "#/components/schemas/File" } } } @@ -1495,7 +1897,7 @@ } }, "tags": [ - "Knowledge Base" + "Files" ], "security": [ { @@ -1504,10 +1906,10 @@ ] } }, - "/knowledge-base/{id}": { + "/file/{id}": { "get": { - "operationId": "KnowledgeBaseController_findOne", - "summary": "Get Knowledge Base", + "operationId": "FileController_findOne", + "summary": "Get File", "parameters": [ { "name": "id", @@ -1524,30 +1926,14 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/TrieveKnowledgeBase", - "title": "TrieveKnowledgeBase" - }, - { - "$ref": "#/components/schemas/CustomKnowledgeBase", - "title": "CustomKnowledgeBase" - } - ], - "discriminator": { - "propertyName": "provider", - "mapping": { - "trieve": "#/components/schemas/TrieveKnowledgeBase", - "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase" - } - } + "$ref": "#/components/schemas/File" } } } } }, "tags": [ - "Knowledge Base" + "Files" ], "security": [ { @@ -1556,8 +1942,8 @@ ] }, "patch": { - "operationId": "KnowledgeBaseController_update", - "summary": "Update Knowledge Base", + "operationId": "FileController_update", + "summary": "Update File", "parameters": [ { "name": "id", @@ -1573,23 +1959,7 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/UpdateTrieveKnowledgeBaseDTO", - "title": "UpdateTrieveKnowledgeBaseDTO" - }, - { - "$ref": "#/components/schemas/UpdateCustomKnowledgeBaseDTO", - "title": "UpdateCustomKnowledgeBaseDTO" - } - ], - "discriminator": { - "propertyName": "provider", - "mapping": { - "trieve": "#/components/schemas/UpdateTrieveKnowledgeBaseDTO", - "custom-knowledge-base": "#/components/schemas/UpdateCustomKnowledgeBaseDTO" - } - } + "$ref": "#/components/schemas/UpdateFileDTO" } } } @@ -1600,30 +1970,14 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/TrieveKnowledgeBase", - "title": "TrieveKnowledgeBase" - }, - { - "$ref": "#/components/schemas/CustomKnowledgeBase", - "title": "CustomKnowledgeBase" - } - ], - "discriminator": { - "propertyName": "provider", - "mapping": { - "trieve": "#/components/schemas/TrieveKnowledgeBase", - "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase" - } - } + "$ref": "#/components/schemas/File" } } } } }, "tags": [ - "Knowledge Base" + "Files" ], "security": [ { @@ -1632,8 +1986,8 @@ ] }, "delete": { - "operationId": "KnowledgeBaseController_remove", - "summary": "Delete Knowledge Base", + "operationId": "FileController_remove", + "summary": "Delete File", "parameters": [ { "name": "id", @@ -1650,30 +2004,14 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/TrieveKnowledgeBase", - "title": "TrieveKnowledgeBase" - }, - { - "$ref": "#/components/schemas/CustomKnowledgeBase", - "title": "CustomKnowledgeBase" - } - ], - "discriminator": { - "propertyName": "provider", - "mapping": { - "trieve": "#/components/schemas/TrieveKnowledgeBase", - "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase" - } - } + "$ref": "#/components/schemas/File" } } } } }, "tags": [ - "Knowledge Base" + "Files" ], "security": [ { @@ -1682,10 +2020,10 @@ ] } }, - "/block": { + "/knowledge-base": { "post": { - "operationId": "BlockController_create", - "summary": "Create Block", + "operationId": "KnowledgeBaseController_create", + "summary": "Create Knowledge Base", "parameters": [], "requestBody": { "required": true, @@ -1694,24 +2032,19 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/CreateConversationBlockDTO", - "title": "ConversationBlock" - }, - { - "$ref": "#/components/schemas/CreateToolCallBlockDTO", - "title": "ToolCallBlock" + "$ref": "#/components/schemas/CreateTrieveKnowledgeBaseDTO", + "title": "TrieveKnowledgeBaseDTO" }, { - "$ref": "#/components/schemas/CreateWorkflowBlockDTO", - "title": "WorkflowBlock" + "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO", + "title": "CustomKnowledgeBaseDTO" } ], "discriminator": { - "propertyName": "type", + "propertyName": "provider", "mapping": { - "conversation": "#/components/schemas/CreateConversationBlockDTO", - "tool-call": "#/components/schemas/CreateToolCallBlockDTO", - "workflow": "#/components/schemas/CreateWorkflowBlockDTO" + "trieve": "#/components/schemas/CreateTrieveKnowledgeBaseDTO", + "custom-knowledge-base": "#/components/schemas/CreateCustomKnowledgeBaseDTO" } } } @@ -1726,24 +2059,19 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/ConversationBlock", - "title": "ConversationBlock" - }, - { - "$ref": "#/components/schemas/ToolCallBlock", - "title": "ToolCallBlock" + "$ref": "#/components/schemas/TrieveKnowledgeBase", + "title": "TrieveKnowledgeBase" }, { - "$ref": "#/components/schemas/WorkflowBlock", - "title": "WorkflowBlock" + "$ref": "#/components/schemas/CustomKnowledgeBase", + "title": "CustomKnowledgeBase" } ], "discriminator": { - "propertyName": "type", + "propertyName": "provider", "mapping": { - "conversation": "#/components/schemas/ConversationBlock", - "tool-call": "#/components/schemas/ToolCallBlock", - "workflow": "#/components/schemas/WorkflowBlock" + "trieve": "#/components/schemas/TrieveKnowledgeBase", + "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase" } } } @@ -1752,7 +2080,7 @@ } }, "tags": [ - "Blocks" + "Knowledge Base" ], "security": [ { @@ -1761,8 +2089,8 @@ ] }, "get": { - "operationId": "BlockController_findAll", - "summary": "List Blocks", + "operationId": "KnowledgeBaseController_findAll", + "summary": "List Knowledge Bases", "parameters": [ { "name": "limit", @@ -1866,24 +2194,19 @@ "items": { "oneOf": [ { - "$ref": "#/components/schemas/ConversationBlock", - "title": "ConversationBlock" - }, - { - "$ref": "#/components/schemas/ToolCallBlock", - "title": "ToolCallBlock" + "$ref": "#/components/schemas/TrieveKnowledgeBase", + "title": "TrieveKnowledgeBase" }, { - "$ref": "#/components/schemas/WorkflowBlock", - "title": "WorkflowBlock" + "$ref": "#/components/schemas/CustomKnowledgeBase", + "title": "CustomKnowledgeBase" } ], "discriminator": { - "propertyName": "type", + "propertyName": "provider", "mapping": { - "conversation": "#/components/schemas/ConversationBlock", - "tool-call": "#/components/schemas/ToolCallBlock", - "workflow": "#/components/schemas/WorkflowBlock" + "trieve": "#/components/schemas/TrieveKnowledgeBase", + "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase" } } } @@ -1893,7 +2216,7 @@ } }, "tags": [ - "Blocks" + "Knowledge Base" ], "security": [ { @@ -1902,10 +2225,10 @@ ] } }, - "/block/{id}": { + "/knowledge-base/{id}": { "get": { - "operationId": "BlockController_findOne", - "summary": "Get Block", + "operationId": "KnowledgeBaseController_findOne", + "summary": "Get Knowledge Base", "parameters": [ { "name": "id", @@ -1924,24 +2247,19 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/ConversationBlock", - "title": "ConversationBlock" - }, - { - "$ref": "#/components/schemas/ToolCallBlock", - "title": "ToolCallBlock" + "$ref": "#/components/schemas/TrieveKnowledgeBase", + "title": "TrieveKnowledgeBase" }, { - "$ref": "#/components/schemas/WorkflowBlock", - "title": "WorkflowBlock" + "$ref": "#/components/schemas/CustomKnowledgeBase", + "title": "CustomKnowledgeBase" } ], "discriminator": { - "propertyName": "type", + "propertyName": "provider", "mapping": { - "conversation": "#/components/schemas/ConversationBlock", - "tool-call": "#/components/schemas/ToolCallBlock", - "workflow": "#/components/schemas/WorkflowBlock" + "trieve": "#/components/schemas/TrieveKnowledgeBase", + "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase" } } } @@ -1950,7 +2268,7 @@ } }, "tags": [ - "Blocks" + "Knowledge Base" ], "security": [ { @@ -1959,8 +2277,8 @@ ] }, "patch": { - "operationId": "BlockController_update", - "summary": "Update Block", + "operationId": "KnowledgeBaseController_update", + "summary": "Update Knowledge Base", "parameters": [ { "name": "id", @@ -1978,24 +2296,19 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/UpdateConversationBlockDTO", - "title": "ConversationBlock" - }, - { - "$ref": "#/components/schemas/UpdateToolCallBlockDTO", - "title": "ToolCallBlock" + "$ref": "#/components/schemas/UpdateTrieveKnowledgeBaseDTO", + "title": "UpdateTrieveKnowledgeBaseDTO" }, { - "$ref": "#/components/schemas/UpdateWorkflowBlockDTO", - "title": "WorkflowBlock" + "$ref": "#/components/schemas/UpdateCustomKnowledgeBaseDTO", + "title": "UpdateCustomKnowledgeBaseDTO" } ], "discriminator": { - "propertyName": "type", + "propertyName": "provider", "mapping": { - "conversation": "#/components/schemas/UpdateConversationBlockDTO", - "tool-call": "#/components/schemas/UpdateToolCallBlockDTO", - "workflow": "#/components/schemas/UpdateWorkflowBlockDTO" + "trieve": "#/components/schemas/UpdateTrieveKnowledgeBaseDTO", + "custom-knowledge-base": "#/components/schemas/UpdateCustomKnowledgeBaseDTO" } } } @@ -2010,24 +2323,19 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/ConversationBlock", - "title": "ConversationBlock" - }, - { - "$ref": "#/components/schemas/ToolCallBlock", - "title": "ToolCallBlock" + "$ref": "#/components/schemas/TrieveKnowledgeBase", + "title": "TrieveKnowledgeBase" }, { - "$ref": "#/components/schemas/WorkflowBlock", - "title": "WorkflowBlock" + "$ref": "#/components/schemas/CustomKnowledgeBase", + "title": "CustomKnowledgeBase" } ], "discriminator": { - "propertyName": "type", + "propertyName": "provider", "mapping": { - "conversation": "#/components/schemas/ConversationBlock", - "tool-call": "#/components/schemas/ToolCallBlock", - "workflow": "#/components/schemas/WorkflowBlock" + "trieve": "#/components/schemas/TrieveKnowledgeBase", + "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase" } } } @@ -2036,7 +2344,7 @@ } }, "tags": [ - "Blocks" + "Knowledge Base" ], "security": [ { @@ -2045,8 +2353,8 @@ ] }, "delete": { - "operationId": "BlockController_remove", - "summary": "Delete Block", + "operationId": "KnowledgeBaseController_remove", + "summary": "Delete Knowledge Base", "parameters": [ { "name": "id", @@ -2065,24 +2373,19 @@ "schema": { "oneOf": [ { - "$ref": "#/components/schemas/ConversationBlock", - "title": "ConversationBlock" - }, - { - "$ref": "#/components/schemas/ToolCallBlock", - "title": "ToolCallBlock" + "$ref": "#/components/schemas/TrieveKnowledgeBase", + "title": "TrieveKnowledgeBase" }, { - "$ref": "#/components/schemas/WorkflowBlock", - "title": "WorkflowBlock" + "$ref": "#/components/schemas/CustomKnowledgeBase", + "title": "CustomKnowledgeBase" } ], "discriminator": { - "propertyName": "type", + "propertyName": "provider", "mapping": { - "conversation": "#/components/schemas/ConversationBlock", - "tool-call": "#/components/schemas/ToolCallBlock", - "workflow": "#/components/schemas/WorkflowBlock" + "trieve": "#/components/schemas/TrieveKnowledgeBase", + "custom-knowledge-base": "#/components/schemas/CustomKnowledgeBase" } } } @@ -2091,7 +2394,7 @@ } }, "tags": [ - "Blocks" + "Knowledge Base" ], "security": [ { @@ -2100,78 +2403,45 @@ ] } }, - "/tool": { + "/workflow": { + "get": { + "operationId": "WorkflowController_findAll", + "summary": "Get Workflows", + "parameters": [], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Workflow" + } + } + } + } + } + }, + "tags": [ + "Workflow" + ], + "security": [ + { + "bearer": [] + } + ] + }, "post": { - "operationId": "ToolController_create", - "summary": "Create Tool", + "operationId": "WorkflowController_create", + "summary": "Create Workflow", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/CreateDtmfToolDTO", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/CreateEndCallToolDTO", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/CreateFunctionToolDTO", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/CreateGhlToolDTO", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/CreateMakeToolDTO", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/CreateTransferCallToolDTO", - "title": "TransferCallTool" - }, - { - "$ref": "#/components/schemas/CreateOutputToolDTO", - "title": "OutputTool" - }, - { - "$ref": "#/components/schemas/CreateBashToolDTO", - "title": "BashTool" - }, - { - "$ref": "#/components/schemas/CreateComputerToolDTO", - "title": "ComputerTool" - }, - { - "$ref": "#/components/schemas/CreateTextEditorToolDTO", - "title": "TextEditorTool" - }, - { - "$ref": "#/components/schemas/CreateQueryToolDTO", - "title": "QueryTool" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "dtmf": "#/components/schemas/CreateDtmfToolDTO", - "endCall": "#/components/schemas/CreateEndCallToolDTO", - "function": "#/components/schemas/CreateFunctionToolDTO", - "ghl": "#/components/schemas/CreateGhlToolDTO", - "make": "#/components/schemas/CreateMakeToolDTO", - "transferCall": "#/components/schemas/CreateTransferCallToolDTO", - "output": "#/components/schemas/CreateOutputToolDTO", - "bash": "#/components/schemas/CreateBashToolDTO", - "computer": "#/components/schemas/CreateComputerToolDTO", - "textEditor": "#/components/schemas/CreateTextEditorToolDTO", - "query": "#/components/schemas/CreateQueryToolDTO" - } - } + "$ref": "#/components/schemas/CreateWorkflowDTO" } } } @@ -2182,75 +2452,165 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/DtmfTool", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/EndCallTool", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/FunctionTool", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/GhlTool", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/MakeTool", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/TransferCallTool", - "title": "TransferCallTool" - }, - { - "$ref": "#/components/schemas/OutputTool", - "title": "OutputTool" - }, - { - "$ref": "#/components/schemas/BashTool", - "title": "BashTool" - }, - { - "$ref": "#/components/schemas/ComputerTool", - "title": "ComputerTool" - }, - { - "$ref": "#/components/schemas/TextEditorTool", - "title": "TextEditorTool" - }, - { - "$ref": "#/components/schemas/QueryTool", - "title": "QueryTool" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "dtmf": "#/components/schemas/DtmfTool", - "endCall": "#/components/schemas/EndCallTool", - "function": "#/components/schemas/FunctionTool", - "ghl": "#/components/schemas/GhlTool", - "make": "#/components/schemas/MakeTool", - "transferCall": "#/components/schemas/TransferCallTool", - "output": "#/components/schemas/OutputTool", - "bash": "#/components/schemas/BashTool", - "computer": "#/components/schemas/ComputerTool", - "textEditor": "#/components/schemas/TextEditorTool", - "query": "#/components/schemas/QueryTool" - } - } + "$ref": "#/components/schemas/Workflow" } } } } }, "tags": [ - "Tools" + "Workflow" + ], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/workflow/{id}": { + "get": { + "operationId": "WorkflowController_findOne", + "summary": "Get Workflow", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Workflow" + } + } + } + } + }, + "tags": [ + "Workflow" + ], + "security": [ + { + "bearer": [] + } + ] + }, + "delete": { + "operationId": "WorkflowController_delete", + "summary": "Delete Workflow", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Workflow" + } + } + } + } + }, + "tags": [ + "Workflow" + ], + "security": [ + { + "bearer": [] + } + ] + }, + "patch": { + "operationId": "WorkflowController_update", + "summary": "Update Workflow", + "parameters": [ + { + "name": "id", + "required": true, + "in": "path", + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateWorkflowDTO" + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Workflow" + } + } + } + } + }, + "tags": [ + "Workflow" + ], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/squad": { + "post": { + "operationId": "SquadController_create", + "summary": "Create Squad", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateSquadDTO" + } + } + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Squad" + } + } + } + } + }, + "tags": [ + "Squads" ], "security": [ { @@ -2259,8 +2619,8 @@ ] }, "get": { - "operationId": "ToolController_findAll", - "summary": "List Tools", + "operationId": "SquadController_findAll", + "summary": "List Squads", "parameters": [ { "name": "limit", @@ -2362,68 +2722,7 @@ "schema": { "type": "array", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/DtmfTool", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/EndCallTool", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/FunctionTool", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/GhlTool", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/MakeTool", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/TransferCallTool", - "title": "TransferCallTool" - }, - { - "$ref": "#/components/schemas/OutputTool", - "title": "OutputTool" - }, - { - "$ref": "#/components/schemas/BashTool", - "title": "BashTool" - }, - { - "$ref": "#/components/schemas/ComputerTool", - "title": "ComputerTool" - }, - { - "$ref": "#/components/schemas/TextEditorTool", - "title": "TextEditorTool" - }, - { - "$ref": "#/components/schemas/QueryTool", - "title": "QueryTool" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "dtmf": "#/components/schemas/DtmfTool", - "endCall": "#/components/schemas/EndCallTool", - "function": "#/components/schemas/FunctionTool", - "ghl": "#/components/schemas/GhlTool", - "make": "#/components/schemas/MakeTool", - "transferCall": "#/components/schemas/TransferCallTool", - "output": "#/components/schemas/OutputTool", - "bash": "#/components/schemas/BashTool", - "computer": "#/components/schemas/ComputerTool", - "textEditor": "#/components/schemas/TextEditorTool", - "query": "#/components/schemas/QueryTool" - } - } + "$ref": "#/components/schemas/Squad" } } } @@ -2431,7 +2730,7 @@ } }, "tags": [ - "Tools" + "Squads" ], "security": [ { @@ -2440,10 +2739,10 @@ ] } }, - "/tool/{id}": { + "/squad/{id}": { "get": { - "operationId": "ToolController_findOne", - "summary": "Get Tool", + "operationId": "SquadController_findOne", + "summary": "Get Squad", "parameters": [ { "name": "id", @@ -2460,75 +2759,14 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/DtmfTool", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/EndCallTool", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/FunctionTool", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/GhlTool", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/MakeTool", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/TransferCallTool", - "title": "TransferCallTool" - }, - { - "$ref": "#/components/schemas/OutputTool", - "title": "OutputTool" - }, - { - "$ref": "#/components/schemas/BashTool", - "title": "BashTool" - }, - { - "$ref": "#/components/schemas/ComputerTool", - "title": "ComputerTool" - }, - { - "$ref": "#/components/schemas/TextEditorTool", - "title": "TextEditorTool" - }, - { - "$ref": "#/components/schemas/QueryTool", - "title": "QueryTool" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "dtmf": "#/components/schemas/DtmfTool", - "endCall": "#/components/schemas/EndCallTool", - "function": "#/components/schemas/FunctionTool", - "ghl": "#/components/schemas/GhlTool", - "make": "#/components/schemas/MakeTool", - "transferCall": "#/components/schemas/TransferCallTool", - "output": "#/components/schemas/OutputTool", - "bash": "#/components/schemas/BashTool", - "computer": "#/components/schemas/ComputerTool", - "textEditor": "#/components/schemas/TextEditorTool", - "query": "#/components/schemas/QueryTool" - } - } + "$ref": "#/components/schemas/Squad" } } } } }, "tags": [ - "Tools" + "Squads" ], "security": [ { @@ -2537,8 +2775,8 @@ ] }, "patch": { - "operationId": "ToolController_update", - "summary": "Update Tool", + "operationId": "SquadController_update", + "summary": "Update Squad", "parameters": [ { "name": "id", @@ -2554,68 +2792,7 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/UpdateDtmfToolDTO", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/UpdateEndCallToolDTO", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/UpdateFunctionToolDTO", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/UpdateGhlToolDTO", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/UpdateMakeToolDTO", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/UpdateTransferCallToolDTO", - "title": "TransferCallTool" - }, - { - "$ref": "#/components/schemas/UpdateOutputToolDTO", - "title": "OutputTool" - }, - { - "$ref": "#/components/schemas/UpdateBashToolDTO", - "title": "BashTool" - }, - { - "$ref": "#/components/schemas/UpdateComputerToolDTO", - "title": "ComputerTool" - }, - { - "$ref": "#/components/schemas/UpdateTextEditorToolDTO", - "title": "TextEditorTool" - }, - { - "$ref": "#/components/schemas/UpdateQueryToolDTO", - "title": "QueryTool" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "dtmf": "#/components/schemas/UpdateDtmfToolDTO", - "endCall": "#/components/schemas/UpdateEndCallToolDTO", - "function": "#/components/schemas/UpdateFunctionToolDTO", - "ghl": "#/components/schemas/UpdateGhlToolDTO", - "make": "#/components/schemas/UpdateMakeToolDTO", - "transferCall": "#/components/schemas/UpdateTransferCallToolDTO", - "output": "#/components/schemas/UpdateOutputToolDTO", - "bash": "#/components/schemas/UpdateBashToolDTO", - "computer": "#/components/schemas/UpdateComputerToolDTO", - "textEditor": "#/components/schemas/UpdateTextEditorToolDTO", - "query": "#/components/schemas/UpdateQueryToolDTO" - } - } + "$ref": "#/components/schemas/UpdateSquadDTO" } } } @@ -2626,75 +2803,14 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/DtmfTool", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/EndCallTool", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/FunctionTool", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/GhlTool", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/MakeTool", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/TransferCallTool", - "title": "TransferCallTool" - }, - { - "$ref": "#/components/schemas/OutputTool", - "title": "OutputTool" - }, - { - "$ref": "#/components/schemas/BashTool", - "title": "BashTool" - }, - { - "$ref": "#/components/schemas/ComputerTool", - "title": "ComputerTool" - }, - { - "$ref": "#/components/schemas/TextEditorTool", - "title": "TextEditorTool" - }, - { - "$ref": "#/components/schemas/QueryTool", - "title": "QueryTool" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "dtmf": "#/components/schemas/DtmfTool", - "endCall": "#/components/schemas/EndCallTool", - "function": "#/components/schemas/FunctionTool", - "ghl": "#/components/schemas/GhlTool", - "make": "#/components/schemas/MakeTool", - "transferCall": "#/components/schemas/TransferCallTool", - "output": "#/components/schemas/OutputTool", - "bash": "#/components/schemas/BashTool", - "computer": "#/components/schemas/ComputerTool", - "textEditor": "#/components/schemas/TextEditorTool", - "query": "#/components/schemas/QueryTool" - } - } + "$ref": "#/components/schemas/Squad" } } } } }, "tags": [ - "Tools" + "Squads" ], "security": [ { @@ -2703,8 +2819,8 @@ ] }, "delete": { - "operationId": "ToolController_remove", - "summary": "Delete Tool", + "operationId": "SquadController_remove", + "summary": "Delete Squad", "parameters": [ { "name": "id", @@ -2721,75 +2837,14 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/DtmfTool", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/EndCallTool", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/FunctionTool", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/GhlTool", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/MakeTool", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/TransferCallTool", - "title": "TransferCallTool" - }, - { - "$ref": "#/components/schemas/OutputTool", - "title": "OutputTool" - }, - { - "$ref": "#/components/schemas/BashTool", - "title": "BashTool" - }, - { - "$ref": "#/components/schemas/ComputerTool", - "title": "ComputerTool" - }, - { - "$ref": "#/components/schemas/TextEditorTool", - "title": "TextEditorTool" - }, - { - "$ref": "#/components/schemas/QueryTool", - "title": "QueryTool" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "dtmf": "#/components/schemas/DtmfTool", - "endCall": "#/components/schemas/EndCallTool", - "function": "#/components/schemas/FunctionTool", - "ghl": "#/components/schemas/GhlTool", - "make": "#/components/schemas/MakeTool", - "transferCall": "#/components/schemas/TransferCallTool", - "output": "#/components/schemas/OutputTool", - "bash": "#/components/schemas/BashTool", - "computer": "#/components/schemas/ComputerTool", - "textEditor": "#/components/schemas/TextEditorTool", - "query": "#/components/schemas/QueryTool" - } - } + "$ref": "#/components/schemas/Squad" } } } } }, "tags": [ - "Tools" + "Squads" ], "security": [ { @@ -2798,38 +2853,140 @@ ] } }, - "/file": { - "post": { - "operationId": "FileController_create", - "summary": "Upload File", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "multipart/form-data": { - "schema": { - "$ref": "#/components/schemas/CreateFileDTO" - } + "/test-suite": { + "get": { + "operationId": "TestSuiteController_findAllPaginated", + "summary": "List Test Suites", + "parameters": [ + { + "name": "page", + "required": false, + "in": "query", + "description": "This is the page number to return. Defaults to 1.", + "schema": { + "minimum": 1, + "type": "number" + } + }, + { + "name": "sortOrder", + "required": false, + "in": "query", + "description": "This is the sort order for pagination. Defaults to 'DESC'.", + "schema": { + "enum": [ + "ASC", + "DESC" + ], + "type": "string" + } + }, + { + "name": "limit", + "required": false, + "in": "query", + "description": "This is the maximum number of items to return. Defaults to 100.", + "schema": { + "minimum": 0, + "maximum": 1000, + "type": "number" + } + }, + { + "name": "createdAtGt", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is greater than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtLt", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is less than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtGe", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is greater than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "createdAtLe", + "required": false, + "in": "query", + "description": "This will return items where the createdAt is less than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtGt", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is greater than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtLt", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is less than the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtGe", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is greater than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" + } + }, + { + "name": "updatedAtLe", + "required": false, + "in": "query", + "description": "This will return items where the updatedAt is less than or equal to the specified value.", + "schema": { + "format": "date-time", + "type": "string" } } - }, + ], "responses": { - "201": { - "description": "File uploaded successfully", + "200": { + "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/File" + "$ref": "#/components/schemas/TestSuitesPaginatedResponse" } } } - }, - "400": { - "description": "Invalid file" } }, "tags": [ - "Files" + "Test Suites" ], "security": [ { @@ -2837,27 +2994,34 @@ } ] }, - "get": { - "operationId": "FileController_findAll", - "summary": "List Files", + "post": { + "operationId": "TestSuiteController_create", + "summary": "Create Test Suite", "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateTestSuiteDto" + } + } + } + }, "responses": { - "200": { + "201": { "description": "", "content": { "application/json": { "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/File" - } + "$ref": "#/components/schemas/TestSuite" } } } } }, "tags": [ - "Files" + "Test Suites" ], "security": [ { @@ -2866,10 +3030,10 @@ ] } }, - "/file/{id}": { + "/test-suite/{id}": { "get": { - "operationId": "FileController_findOne", - "summary": "Get File", + "operationId": "TestSuiteController_findOne", + "summary": "Get Test Suite", "parameters": [ { "name": "id", @@ -2886,14 +3050,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/File" + "$ref": "#/components/schemas/TestSuite" } } } } }, "tags": [ - "Files" + "Test Suites" ], "security": [ { @@ -2902,8 +3066,8 @@ ] }, "patch": { - "operationId": "FileController_update", - "summary": "Update File", + "operationId": "TestSuiteController_update", + "summary": "Update Test Suite", "parameters": [ { "name": "id", @@ -2919,7 +3083,7 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateFileDTO" + "$ref": "#/components/schemas/UpdateTestSuiteDto" } } } @@ -2930,14 +3094,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/File" + "$ref": "#/components/schemas/TestSuite" } } } } }, "tags": [ - "Files" + "Test Suites" ], "security": [ { @@ -2946,8 +3110,8 @@ ] }, "delete": { - "operationId": "FileController_remove", - "summary": "Delete File", + "operationId": "TestSuiteController_remove", + "summary": "Delete Test Suite", "parameters": [ { "name": "id", @@ -2964,57 +3128,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/File" - } - } - } - } - }, - "tags": [ - "Files" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/analytics": { - "post": { - "operationId": "AnalyticsController_query", - "summary": "Create Analytics Queries", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AnalyticsQueryDTO" - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/AnalyticsQueryResult" - } + "$ref": "#/components/schemas/TestSuite" } } } - }, - "201": { - "description": "" } }, "tags": [ - "Analytics" + "Test Suites" ], "security": [ { @@ -3023,77 +3144,15 @@ ] } }, - "/logs": { + "/test-suite/{testSuiteId}/test": { "get": { - "operationId": "LoggingController_logsQuery", - "summary": "Get Logs", - "deprecated": true, + "operationId": "TestSuiteTestController_findAllPaginated", + "summary": "List Tests", "parameters": [ { - "name": "type", - "required": false, - "in": "query", - "description": "This is the type of the log.", - "schema": { - "enum": [ - "API", - "Webhook", - "Call", - "Provider" - ], - "type": "string" - } - }, - { - "name": "webhookType", - "required": false, - "in": "query", - "description": "This is the type of the webhook, given the log is from a webhook.", - "schema": { - "type": "string" - } - }, - { - "name": "assistantId", - "required": false, - "in": "query", - "description": "This is the ID of the assistant.", - "schema": { - "type": "string" - } - }, - { - "name": "phoneNumberId", - "required": false, - "in": "query", - "description": "This is the ID of the phone number.", - "schema": { - "type": "string" - } - }, - { - "name": "customerId", - "required": false, - "in": "query", - "description": "This is the ID of the customer.", - "schema": { - "type": "string" - } - }, - { - "name": "squadId", - "required": false, - "in": "query", - "description": "This is the ID of the squad.", - "schema": { - "type": "string" - } - }, - { - "name": "callId", - "required": false, - "in": "query", - "description": "This is the ID of the call.", + "name": "testSuiteId", + "required": true, + "in": "path", "schema": { "type": "string" } @@ -3219,14 +3278,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/LogsPaginatedResponse" + "$ref": "#/components/schemas/TestSuiteTestsPaginatedResponse" } } } } }, "tags": [ - "Logs" + "Test Suite Tests" ], "security": [ { @@ -3234,66 +3293,100 @@ } ] }, - "delete": { - "operationId": "LoggingController_logsDeleteQuery", - "summary": "Delete Logs", - "deprecated": true, + "post": { + "operationId": "TestSuiteTestController_create", + "summary": "Create Test", "parameters": [ { - "name": "type", - "required": false, - "in": "query", - "description": "This is the type of the log.", + "name": "testSuiteId", + "required": true, + "in": "path", "schema": { - "enum": [ - "API", - "Webhook", - "Call", - "Provider" - ], "type": "string" } - }, - { - "name": "assistantId", - "required": false, - "in": "query", - "schema": { - "type": "string" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/CreateTestSuiteTestVoiceDto", + "title": "TestSuiteTestVoice" + }, + { + "$ref": "#/components/schemas/CreateTestSuiteTestChatDto", + "title": "TestSuiteTestChat" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "voice": "#/components/schemas/CreateTestSuiteTestVoiceDto", + "chat": "#/components/schemas/CreateTestSuiteTestChatDto" + } + } + } } - }, - { - "name": "phoneNumberId", - "required": false, - "in": "query", - "description": "This is the ID of the phone number.", - "schema": { - "type": "string" + } + }, + "responses": { + "201": { + "description": "", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestVoice", + "title": "Voice" + }, + { + "$ref": "#/components/schemas/TestSuiteTestChat", + "title": "Chat" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "voice": "#/components/schemas/TestSuiteTestVoice", + "chat": "#/components/schemas/TestSuiteTestChat" + } + } + } + } } - }, + } + }, + "tags": [ + "Test Suite Tests" + ], + "security": [ { - "name": "customerId", - "required": false, - "in": "query", - "description": "This is the ID of the customer.", - "schema": { - "type": "string" - } - }, + "bearer": [] + } + ] + } + }, + "/test-suite/{testSuiteId}/test/{id}": { + "get": { + "operationId": "TestSuiteTestController_findOne", + "summary": "Get Test", + "parameters": [ { - "name": "squadId", - "required": false, - "in": "query", - "description": "This is the ID of the squad.", + "name": "testSuiteId", + "required": true, + "in": "path", "schema": { "type": "string" } }, { - "name": "callId", - "required": false, - "in": "query", - "description": "This is the ID of the call.", + "name": "id", + "required": true, + "in": "path", "schema": { "type": "string" } @@ -3301,224 +3394,118 @@ ], "responses": { "200": { - "description": "" + "description": "", + "content": { + "application/json": { + "schema": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestVoice", + "title": "Voice" + }, + { + "$ref": "#/components/schemas/TestSuiteTestChat", + "title": "Chat" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "voice": "#/components/schemas/TestSuiteTestVoice", + "chat": "#/components/schemas/TestSuiteTestChat" + } + } + } + } + } } }, "tags": [ - "Logs" + "Test Suite Tests" ], "security": [ { "bearer": [] } ] - } - }, - "/test-suite": { - "get": { - "operationId": "TestSuiteController_findAllPaginated", - "summary": "List Test Suites", + }, + "patch": { + "operationId": "TestSuiteTestController_update", + "summary": "Update Test", "parameters": [ { - "name": "page", - "required": false, - "in": "query", - "description": "This is the page number to return. Defaults to 1.", - "schema": { - "minimum": 1, - "type": "number" - } - }, - { - "name": "sortOrder", - "required": false, - "in": "query", - "description": "This is the sort order for pagination. Defaults to 'DESC'.", + "name": "testSuiteId", + "required": true, + "in": "path", "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.", + "name": "id", + "required": true, + "in": "path", "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": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TestSuitesPaginatedResponse" - } - } + "type": "string" } } - }, - "tags": [ - "Test Suites" ], - "security": [ - { - "bearer": [] - } - ] - }, - "post": { - "operationId": "TestSuiteController_create", - "summary": "Create Test Suite", - "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateTestSuiteDto" - } - } - } - }, - "responses": { - "201": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TestSuite" + "oneOf": [ + { + "$ref": "#/components/schemas/UpdateTestSuiteTestVoiceDto", + "title": "TestSuiteTestVoice" + }, + { + "$ref": "#/components/schemas/UpdateTestSuiteTestChatDto", + "title": "TestSuiteTestChat" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "voice": "#/components/schemas/UpdateTestSuiteTestVoiceDto", + "chat": "#/components/schemas/UpdateTestSuiteTestChatDto" + } } } } } }, - "tags": [ - "Test Suites" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/test-suite/{id}": { - "get": { - "operationId": "TestSuiteController_findOne", - "summary": "Get Test Suite", - "parameters": [ - { - "name": "id", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TestSuite" + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestVoice", + "title": "Voice" + }, + { + "$ref": "#/components/schemas/TestSuiteTestChat", + "title": "Chat" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "voice": "#/components/schemas/TestSuiteTestVoice", + "chat": "#/components/schemas/TestSuiteTestChat" + } + } } } } } }, "tags": [ - "Test Suites" + "Test Suite Tests" ], "security": [ { @@ -3526,54 +3513,18 @@ } ] }, - "patch": { - "operationId": "TestSuiteController_update", - "summary": "Update Test Suite", + "delete": { + "operationId": "TestSuiteTestController_remove", + "summary": "Delete Test", "parameters": [ { - "name": "id", + "name": "testSuiteId", "required": true, "in": "path", "schema": { "type": "string" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateTestSuiteDto" - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TestSuite" - } - } - } - } - }, - "tags": [ - "Test Suites" - ], - "security": [ - { - "bearer": [] - } - ] - }, - "delete": { - "operationId": "TestSuiteController_remove", - "summary": "Delete Test Suite", - "parameters": [ + }, { "name": "id", "required": true, @@ -3589,14 +3540,30 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TestSuite" + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestVoice", + "title": "Voice" + }, + { + "$ref": "#/components/schemas/TestSuiteTestChat", + "title": "Chat" + } + ], + "discriminator": { + "propertyName": "type", + "mapping": { + "voice": "#/components/schemas/TestSuiteTestVoice", + "chat": "#/components/schemas/TestSuiteTestChat" + } + } } } } } }, "tags": [ - "Test Suites" + "Test Suite Tests" ], "security": [ { @@ -3605,10 +3572,10 @@ ] } }, - "/test-suite/{testSuiteId}/test": { + "/test-suite/{testSuiteId}/run": { "get": { - "operationId": "TestSuiteTestController_findAllPaginated", - "summary": "List Tests", + "operationId": "TestSuiteRunController_findAllPaginated", + "summary": "List Test Suite Runs", "parameters": [ { "name": "testSuiteId", @@ -3739,14 +3706,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TestSuiteTestsPaginatedResponse" + "$ref": "#/components/schemas/TestSuiteRunsPaginatedResponse" } } } } }, "tags": [ - "Test Suite Tests" + "Test Suite Runs" ], "security": [ { @@ -3755,8 +3722,8 @@ ] }, "post": { - "operationId": "TestSuiteTestController_create", - "summary": "Create Test", + "operationId": "TestSuiteRunController_create", + "summary": "Create Test Suite Run", "parameters": [ { "name": "testSuiteId", @@ -3772,18 +3739,7 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/CreateTestSuiteTestVoiceDto", - "title": "TestSuiteTestVoice" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "voice": "#/components/schemas/CreateTestSuiteTestVoiceDto" - } - } + "$ref": "#/components/schemas/CreateTestSuiteRunDto" } } } @@ -3794,35 +3750,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TestSuiteTestVoice" - } - } - } - }, - "default": { - "description": "", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteTestVoice", - "title": "Voice" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "voice": "#/components/schemas/TestSuiteTestVoice" - } - } + "$ref": "#/components/schemas/TestSuiteRun" } } } } }, "tags": [ - "Test Suite Tests" + "Test Suite Runs" ], "security": [ { @@ -3831,10 +3766,10 @@ ] } }, - "/test-suite/{testSuiteId}/test/{id}": { + "/test-suite/{testSuiteId}/run/{id}": { "get": { - "operationId": "TestSuiteTestController_findOne", - "summary": "Get Test", + "operationId": "TestSuiteRunController_findOne", + "summary": "Get Test Suite Run", "parameters": [ { "name": "testSuiteId", @@ -3859,35 +3794,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TestSuiteTestVoice" - } - } - } - }, - "default": { - "description": "", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteTestVoice", - "title": "Voice" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "voice": "#/components/schemas/TestSuiteTestVoice" - } - } + "$ref": "#/components/schemas/TestSuiteRun" } } } } }, "tags": [ - "Test Suite Tests" + "Test Suite Runs" ], "security": [ { @@ -3896,8 +3810,8 @@ ] }, "patch": { - "operationId": "TestSuiteTestController_update", - "summary": "Update Test", + "operationId": "TestSuiteRunController_update", + "summary": "Update Test Suite Run", "parameters": [ { "name": "testSuiteId", @@ -3921,18 +3835,7 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/UpdateTestSuiteTestVoiceDto", - "title": "TestSuiteTestVoice" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "voice": "#/components/schemas/UpdateTestSuiteTestVoiceDto" - } - } + "$ref": "#/components/schemas/UpdateTestSuiteRunDto" } } } @@ -3943,35 +3846,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TestSuiteTestVoice" - } - } - } - }, - "default": { - "description": "", - "content": { - "application/json": { - "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteTestVoice", - "title": "Voice" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "voice": "#/components/schemas/TestSuiteTestVoice" - } - } + "$ref": "#/components/schemas/TestSuiteRun" } } } } }, "tags": [ - "Test Suite Tests" + "Test Suite Runs" ], "security": [ { @@ -3980,8 +3862,8 @@ ] }, "delete": { - "operationId": "TestSuiteTestController_remove", - "summary": "Delete Test", + "operationId": "TestSuiteRunController_remove", + "summary": "Delete Test Suite Run", "parameters": [ { "name": "testSuiteId", @@ -4006,25 +3888,57 @@ "content": { "application/json": { "schema": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteTestVoice", - "title": "Voice" - } - ], - "discriminator": { - "propertyName": "type", - "mapping": { - "voice": "#/components/schemas/TestSuiteTestVoice" - } + "$ref": "#/components/schemas/TestSuiteRun" + } + } + } + } + }, + "tags": [ + "Test Suite Runs" + ], + "security": [ + { + "bearer": [] + } + ] + } + }, + "/analytics": { + "post": { + "operationId": "AnalyticsController_query", + "summary": "Create Analytics Queries", + "parameters": [], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/AnalyticsQueryDTO" + } + } + } + }, + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/AnalyticsQueryResult" } } } } + }, + "201": { + "description": "" } }, "tags": [ - "Test Suite Tests" + "Analytics" ], "security": [ { @@ -4033,15 +3947,77 @@ ] } }, - "/test-suite/{testSuiteId}/run": { + "/logs": { "get": { - "operationId": "TestSuiteRunController_findAllPaginated", - "summary": "List Test Suite Runs", + "operationId": "LoggingController_logsQuery", + "summary": "Get Logs", + "deprecated": true, "parameters": [ { - "name": "testSuiteId", - "required": true, - "in": "path", + "name": "type", + "required": false, + "in": "query", + "description": "This is the type of the log.", + "schema": { + "enum": [ + "API", + "Webhook", + "Call", + "Provider" + ], + "type": "string" + } + }, + { + "name": "webhookType", + "required": false, + "in": "query", + "description": "This is the type of the webhook, given the log is from a webhook.", + "schema": { + "type": "string" + } + }, + { + "name": "assistantId", + "required": false, + "in": "query", + "description": "This is the ID of the assistant.", + "schema": { + "type": "string" + } + }, + { + "name": "phoneNumberId", + "required": false, + "in": "query", + "description": "This is the ID of the phone number.", + "schema": { + "type": "string" + } + }, + { + "name": "customerId", + "required": false, + "in": "query", + "description": "This is the ID of the customer.", + "schema": { + "type": "string" + } + }, + { + "name": "squadId", + "required": false, + "in": "query", + "description": "This is the ID of the squad.", + "schema": { + "type": "string" + } + }, + { + "name": "callId", + "required": false, + "in": "query", + "description": "This is the ID of the call.", "schema": { "type": "string" } @@ -4167,14 +4143,14 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/TestSuiteRunsPaginatedResponse" + "$ref": "#/components/schemas/LogsPaginatedResponse" } } } } }, "tags": [ - "Test Suite Runs" + "Logs" ], "security": [ { @@ -4182,162 +4158,66 @@ } ] }, - "post": { - "operationId": "TestSuiteRunController_create", - "summary": "Create Test Suite Run", + "delete": { + "operationId": "LoggingController_logsDeleteQuery", + "summary": "Delete Logs", + "deprecated": true, "parameters": [ { - "name": "testSuiteId", - "required": true, - "in": "path", - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateTestSuiteRunDto" - } - } - } - }, - "responses": { - "201": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TestSuiteRun" - } - } - } - } - }, - "tags": [ - "Test Suite Runs" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, - "/test-suite/{testSuiteId}/run/{id}": { - "get": { - "operationId": "TestSuiteRunController_findOne", - "summary": "Get Test Suite Run", - "parameters": [ - { - "name": "testSuiteId", - "required": true, - "in": "path", + "name": "type", + "required": false, + "in": "query", + "description": "This is the type of the log.", "schema": { + "enum": [ + "API", + "Webhook", + "Call", + "Provider" + ], "type": "string" } }, { - "name": "id", - "required": true, - "in": "path", + "name": "assistantId", + "required": false, + "in": "query", "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TestSuiteRun" - } - } - } - } - }, - "tags": [ - "Test Suite Runs" - ], - "security": [ - { - "bearer": [] - } - ] - }, - "patch": { - "operationId": "TestSuiteRunController_update", - "summary": "Update Test Suite Run", - "parameters": [ + }, { - "name": "testSuiteId", - "required": true, - "in": "path", + "name": "phoneNumberId", + "required": false, + "in": "query", + "description": "This is the ID of the phone number.", "schema": { "type": "string" } }, { - "name": "id", - "required": true, - "in": "path", + "name": "customerId", + "required": false, + "in": "query", + "description": "This is the ID of the customer.", "schema": { "type": "string" } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateTestSuiteRunDto" - } - } - } - }, - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TestSuiteRun" - } - } - } - } - }, - "tags": [ - "Test Suite Runs" - ], - "security": [ - { - "bearer": [] - } - ] - }, - "delete": { - "operationId": "TestSuiteRunController_remove", - "summary": "Delete Test Suite Run", - "parameters": [ + }, { - "name": "testSuiteId", - "required": true, - "in": "path", + "name": "squadId", + "required": false, + "in": "query", + "description": "This is the ID of the squad.", "schema": { "type": "string" } }, { - "name": "id", - "required": true, - "in": "path", + "name": "callId", + "required": false, + "in": "query", + "description": "This is the ID of the call.", "schema": { "type": "string" } @@ -4345,18 +4225,11 @@ ], "responses": { "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TestSuiteRun" - } - } - } + "description": "" } }, "tags": [ - "Test Suite Runs" + "Logs" ], "security": [ { @@ -4368,7 +4241,7 @@ }, "info": { "title": "Vapi API", - "description": "API for building voice assistants", + "description": "Voice AI for developers.", "version": "1.0", "contact": {} }, @@ -4388,304 +4261,2502 @@ } }, "schemas": { - "AssemblyAITranscriber": { + "AnalysisCostBreakdown": { "type": "object", "properties": { - "provider": { - "type": "string", - "description": "This is the transcription provider that will be used.", - "enum": [ - "assembly-ai" - ] + "summary": { + "type": "number", + "description": "This is the cost to summarize the call." }, - "language": { - "type": "string", - "description": "This is the language that will be set for the transcription.", - "enum": [ - "en" - ] + "summaryPromptTokens": { + "type": "number", + "description": "This is the number of prompt tokens used to summarize the call." }, - "realtimeUrl": { - "type": "string", - "description": "The WebSocket URL that the transcriber connects to." + "summaryCompletionTokens": { + "type": "number", + "description": "This is the number of completion tokens used to summarize the call." }, - "wordBoost": { - "description": "Add up to 2500 characters of custom vocabulary.", - "type": "array", - "items": { - "type": "string", - "maxLength": 2500 - } + "structuredData": { + "type": "number", + "description": "This is the cost to extract structured data from the call." }, - "endUtteranceSilenceThreshold": { + "structuredDataPromptTokens": { "type": "number", - "description": "The duration of the end utterance silence threshold in milliseconds." + "description": "This is the number of prompt tokens used to extract structured data from the call." }, - "disablePartialTranscripts": { - "type": "boolean", - "description": "Disable partial transcripts.\nSet to `true` to not receive partial transcripts. Defaults to `false`." - } - }, - "required": [ - "provider" - ] - }, - "BackoffPlan": { - "type": "object", - "properties": { - "maxRetries": { + "structuredDataCompletionTokens": { "type": "number", - "description": "This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries).\n\n@default 0", - "minimum": 0, - "maximum": 10, - "example": 0 + "description": "This is the number of completion tokens used to extract structured data from the call." }, - "type": { - "type": "object", - "description": "This is the type of backoff plan to use. Defaults to fixed.\n\n@default fixed", - "enum": [ - "fixed", - "exponential" - ], - "example": "fixed" + "successEvaluation": { + "type": "number", + "description": "This is the cost to evaluate if the call was successful." }, - "baseDelaySeconds": { + "successEvaluationPromptTokens": { "type": "number", - "description": "This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.", - "minimum": 0, - "maximum": 10, - "example": 1 + "description": "This is the number of prompt tokens used to evaluate if the call was successful." + }, + "successEvaluationCompletionTokens": { + "type": "number", + "description": "This is the number of completion tokens used to evaluate if the call was successful." } - }, - "required": [ - "maxRetries", - "type", - "baseDelaySeconds" - ] + } }, - "Server": { + "CostBreakdown": { "type": "object", "properties": { - "timeoutSeconds": { + "transport": { "type": "number", - "description": "This is the timeout in seconds for the request to your server. Defaults to 20 seconds.\n\n@default 20", - "minimum": 1, - "maximum": 120, - "example": 20 - }, - "url": { - "type": "string", - "description": "API endpoint to send requests to." + "description": "This is the cost of the transport provider, like Twilio or Vonage." }, - "secret": { - "type": "string", - "description": "This is the secret you can set that Vapi will send with every request to your server. Will be sent as a header called x-vapi-secret.\n\nSame precedence logic as server." + "stt": { + "type": "number", + "description": "This is the cost of the speech-to-text service." }, - "headers": { - "type": "object", - "description": "These are the custom headers to include in the request sent to your server.\n\nEach key-value pair represents a header name and its value." + "llm": { + "type": "number", + "description": "This is the cost of the language model." }, - "backoffPlan": { - "description": "This is the backoff plan to use if the request fails.", + "tts": { + "type": "number", + "description": "This is the cost of the text-to-speech service." + }, + "vapi": { + "type": "number", + "description": "This is the cost of Vapi." + }, + "total": { + "type": "number", + "description": "This is the total cost of the call." + }, + "llmPromptTokens": { + "type": "number", + "description": "This is the LLM prompt tokens used for the call." + }, + "llmCompletionTokens": { + "type": "number", + "description": "This is the LLM completion tokens used for the call." + }, + "ttsCharacters": { + "type": "number", + "description": "This is the TTS characters used for the call." + }, + "analysisCostBreakdown": { + "description": "This is the cost of the analysis.", "allOf": [ { - "$ref": "#/components/schemas/BackoffPlan" + "$ref": "#/components/schemas/AnalysisCostBreakdown" } ] } - }, - "required": [ - "url" - ] + } }, - "CustomTranscriber": { + "TranscriptPlan": { "type": "object", "properties": { - "provider": { + "enabled": { + "type": "boolean", + "description": "This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true.\n\n@default true", + "example": true + }, + "assistantName": { "type": "string", - "description": "This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.", - "enum": [ - "custom-transcriber" - ] + "description": "This is the name of the assistant in the transcript. Defaults to 'AI'.\n\nUsage:\n- If you want to change the name of the assistant in the transcript, set this. Example, here is what the transcript would look like with `assistantName` set to 'Buyer':\n```\nUser: Hello, how are you?\nBuyer: I'm fine.\nUser: Do you want to buy a car?\nBuyer: No.\n```\n\n@default 'AI'" }, - "server": { - "description": "This is where the transcription request will be sent.\n\nUsage:\n1. Vapi will initiate a websocket connection with `server.url`.\n\n2. Vapi will send an initial text frame with the sample rate. Format:\n```\n {\n \"type\": \"start\",\n \"encoding\": \"linear16\", // 16-bit raw PCM format\n \"container\": \"raw\",\n \"sampleRate\": {{sampleRate}},\n \"channels\": 2 // customer is channel 0, assistant is channel 1\n }\n```\n\n3. Vapi will send the audio data in 16-bit raw PCM format as binary frames.\n\n4. You can read the messages something like this:\n```\nws.on('message', (data, isBinary) => {\n if (isBinary) {\n pcmBuffer = Buffer.concat([pcmBuffer, data]);\n console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);\n } else {\n console.log('Received message:', JSON.parse(data.toString()));\n }\n});\n```\n\n5. You will respond with transcriptions as you have them. Format:\n```\n {\n \"type\": \"transcriber-response\",\n \"transcription\": \"Hello, world!\",\n \"channel\": \"customer\" | \"assistant\"\n }\n```", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] + "userName": { + "type": "string", + "description": "This is the name of the user in the transcript. Defaults to 'User'.\n\nUsage:\n- If you want to change the name of the user in the transcript, set this. Example, here is what the transcript would look like with `userName` set to 'Seller':\n```\nSeller: Hello, how are you?\nAI: I'm fine.\nSeller: Do you want to buy a car?\nAI: No.\n```\n\n@default 'User'" } - }, - "required": [ - "provider", - "server" - ] + } }, - "DeepgramTranscriber": { + "ArtifactPlan": { "type": "object", "properties": { - "provider": { - "type": "string", - "description": "This is the transcription provider that will be used.", - "enum": [ - "deepgram" - ] - }, - "model": { - "description": "This is the Deepgram model that will be used. A list of models can be found here: https://developers.deepgram.com/docs/models-languages-overview", - "oneOf": [ - { - "type": "string", - "enum": [ - "nova-3", - "nova-3-general", - "nova-2", - "nova-2-general", - "nova-2-meeting", - "nova-2-phonecall", - "nova-2-finance", - "nova-2-conversationalai", - "nova-2-voicemail", - "nova-2-video", - "nova-2-medical", - "nova-2-drivethru", - "nova-2-automotive", - "nova", - "nova-general", - "nova-phonecall", - "nova-medical", - "enhanced", - "enhanced-general", - "enhanced-meeting", - "enhanced-phonecall", - "enhanced-finance", - "base", - "base-general", - "base-meeting", - "base-phonecall", - "base-finance", - "base-conversationalai", - "base-voicemail", - "base-video" - ] - }, - { - "type": "string" - } - ] + "recordingEnabled": { + "type": "boolean", + "description": "This determines whether assistant's calls are recorded. Defaults to true.\n\nUsage:\n- If you don't want to record the calls, set this to false.\n- If you want to record the calls when `assistant.hipaaEnabled` (deprecated) or `assistant.compliancePlan.hipaaEnabled` explicity set this to true and make sure to provide S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nYou can find the recording at `call.artifact.recordingUrl` and `call.artifact.stereoRecordingUrl` after the call is ended.\n\n@default true", + "example": true }, - "language": { + "recordingFormat": { "type": "string", - "description": "This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview", + "description": "This determines the format of the recording. Defaults to `wav;l16`.\n\n@default 'wav;l16'", "enum": [ - "bg", - "ca", - "cs", - "da", - "da-DK", - "de", - "de-CH", - "el", - "en", - "en-AU", - "en-GB", - "en-IN", - "en-NZ", - "en-US", - "es", - "es-419", - "es-LATAM", - "et", - "fi", - "fr", - "fr-CA", - "hi", - "hi-Latn", - "hu", - "id", - "it", - "ja", - "ko", - "ko-KR", - "lt", - "lv", - "ms", - "multi", - "nl", - "nl-BE", - "no", - "pl", - "pt", - "pt-BR", - "ro", - "ru", - "sk", - "sv", - "sv-SE", - "ta", - "taq", - "th", - "th-TH", - "tr", - "uk", - "vi", - "zh", - "zh-CN", - "zh-HK", - "zh-Hans", - "zh-Hant", - "zh-TW" + "wav;l16", + "mp3" ] }, - "smartFormat": { + "videoRecordingEnabled": { "type": "boolean", - "description": "This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes format numbers as times but it's getting better.", + "description": "This determines whether the video is recorded during the call. Defaults to false. Only relevant for `webCall` type.\n\nYou can find the video recording at `call.artifact.videoRecordingUrl` after the call is ended.\n\n@default false", "example": false }, - "codeSwitchingEnabled": { + "pcapEnabled": { "type": "boolean", - "description": "This automatically switches the transcriber's language when the customer's language changes. Defaults to false.\n\nUsage:\n- If your customers switch languages mid-call, you can set this to true.\n\nNote:\n- To detect language changes, Vapi uses a custom trained model. Languages supported (X = limited support):\n 1. Arabic\n 2. Bengali\n 3. Cantonese\n 4. Chinese\n 5. Chinese Simplified (X)\n 6. Chinese Traditional (X)\n 7. English\n 8. Farsi (X)\n 9. French\n 10. German\n 11. Haitian Creole (X)\n 12. Hindi\n 13. Italian\n 14. Japanese\n 15. Korean\n 16. Portuguese\n 17. Russian\n 18. Spanish\n 19. Thai\n 20. Urdu\n 21. Vietnamese\n- To receive `language-change-detected` webhook events, add it to `assistant.serverMessages`.\n\n@default false", - "example": false + "description": "This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`.\n\nYou can find the packet capture at `call.artifact.pcapUrl` after the call is ended.\n\n@default true", + "example": true }, - "mipOptOut": { - "type": "boolean", - "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false", - "example": false, - "default": false + "pcapS3PathPrefix": { + "type": "string", + "description": "This is the path where the SIP packet capture will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nIf credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it.\n\nUsage:\n- If you want to upload the packet capture to a specific path, set this to the path. Example: `/my-assistant-captures`.\n- If you want to upload the packet capture to the root of the bucket, set this to `/`.\n\n@default '/'", + "example": "/pcaps" }, - "keywords": { - "description": "These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here.", - "type": "array", - "items": { - "type": "string", - "pattern": "/^\\p{L}[\\p{L}\\d]*(?::[+-]?\\d+)?$/u" - } + "transcriptPlan": { + "description": "This is the plan for `call.artifact.transcript`. To disable, set `transcriptPlan.enabled` to false.", + "allOf": [ + { + "$ref": "#/components/schemas/TranscriptPlan" + } + ] }, - "keyterm": { - "description": "Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.", + "recordingPath": { + "type": "string", + "description": "This is the path where the recording will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nIf credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it.\n\nUsage:\n- If you want to upload the recording to a specific path, set this to the path. Example: `/my-assistant-recordings`.\n- If you want to upload the recording to the root of the bucket, set this to `/`.\n\n@default '/'" + } + } + }, + "Analysis": { + "type": "object", + "properties": { + "summary": { + "type": "string", + "description": "This is the summary of the call. Customize by setting `assistant.analysisPlan.summaryPrompt`." + }, + "structuredData": { + "type": "object", + "description": "This is the structured data extracted from the call. Customize by setting `assistant.analysisPlan.structuredDataPrompt` and/or `assistant.analysisPlan.structuredDataSchema`." + }, + "structuredDataMulti": { + "description": "This is the structured data catalog of the call. Customize by setting `assistant.analysisPlan.structuredDataMultiPlan`.", "type": "array", "items": { - "type": "string" + "type": "object" } }, - "endpointing": { - "type": "number", - "description": "This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth documentation here: https://developers.deepgram.com/docs/endpointing.\n\nHere are the most important bits:\n- Defaults to 10. This is recommended for most use cases to optimize for latency.\n- 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word utterances. For those uses cases, it's recommended to try 300. It will add a bit of latency but the quality and reliability of the experience will be better.\n- If neither 10 nor 300 work, contact support@vapi.ai and we'll find another solution.\n\n@default 10", - "minimum": 10, - "maximum": 500 + "successEvaluation": { + "type": "string", + "description": "This is the evaluation of the call. Customize by setting `assistant.analysisPlan.successEvaluationPrompt` and/or `assistant.analysisPlan.successEvaluationRubric`." } - }, - "required": [ - "provider" - ] + } }, - "TalkscriberTranscriber": { + "Monitor": { "type": "object", "properties": { - "provider": { + "listenUrl": { "type": "string", - "description": "This is the transcription provider that will be used.", + "description": "This is the URL where the assistant's calls can be listened to in real-time. To enable, set `assistant.monitorPlan.listenEnabled` to `true`." + }, + "controlUrl": { + "type": "string", + "description": "This is the URL where the assistant's calls can be controlled in real-time. To enable, set `assistant.monitorPlan.controlEnabled` to `true`." + } + } + }, + "OpenAIMessage": { + "type": "object", + "properties": { + "content": { + "type": "string", + "nullable": true, + "maxLength": 100000000 + }, + "role": { + "type": "string", + "enum": [ + "assistant", + "function", + "user", + "system", + "tool" + ] + } + }, + "required": [ + "content", + "role" + ] + }, + "Artifact": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "description": "These are the messages that were spoken during the call.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/UserMessage", + "title": "UserMessage" + }, + { + "$ref": "#/components/schemas/SystemMessage", + "title": "SystemMessage" + }, + { + "$ref": "#/components/schemas/BotMessage", + "title": "BotMessage" + }, + { + "$ref": "#/components/schemas/ToolCallMessage", + "title": "ToolCallMessage" + }, + { + "$ref": "#/components/schemas/ToolCallResultMessage", + "title": "ToolCallResultMessage" + } + ] + } + }, + "messagesOpenAIFormatted": { + "description": "These are the messages that were spoken during the call, formatted for OpenAI.", + "type": "array", + "items": { + "$ref": "#/components/schemas/OpenAIMessage" + } + }, + "recordingUrl": { + "type": "string", + "description": "This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`." + }, + "stereoRecordingUrl": { + "type": "string", + "description": "This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`." + }, + "videoRecordingUrl": { + "type": "string", + "description": "This is video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`." + }, + "videoRecordingStartDelaySeconds": { + "type": "number", + "description": "This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps." + }, + "transcript": { + "type": "string", + "description": "This is the transcript of the call. This is derived from `artifact.messages` but provided for convenience." + }, + "pcapUrl": { + "type": "string", + "description": "This is the packet capture url for the call. This is only available for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`." + } + } + }, + "Transport": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the provider used for the call.", + "enum": [ + "twilio", + "vonage", + "vapi", + "daily", + "telnyx" + ] + }, + "assistantVideoEnabled": { + "type": "boolean", + "description": "This is determines whether the assistant will have video enabled.\n\nOnly relevant for `webCall` type." + } + } + }, + "FallbackTranscriberPlan": { + "type": "object", + "properties": { + "transcribers": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/FallbackAssemblyAITranscriber", + "title": "AssemblyAI" + }, + { + "$ref": "#/components/schemas/FallbackAzureSpeechTranscriber", + "title": "Azure" + }, + { + "$ref": "#/components/schemas/FallbackCustomTranscriber", + "title": "Custom" + }, + { + "$ref": "#/components/schemas/FallbackDeepgramTranscriber", + "title": "Deepgram" + }, + { + "$ref": "#/components/schemas/FallbackElevenLabsTranscriber", + "title": "ElevenLabs" + }, + { + "$ref": "#/components/schemas/FallbackGladiaTranscriber", + "title": "Gladia" + }, + { + "$ref": "#/components/schemas/FallbackGoogleTranscriber", + "title": "Google" + }, + { + "$ref": "#/components/schemas/FallbackTalkscriberTranscriber", + "title": "Talkscriber" + }, + { + "$ref": "#/components/schemas/FallbackSpeechmaticsTranscriber", + "title": "Speechmatics" + }, + { + "$ref": "#/components/schemas/FallbackOpenAITranscriber", + "title": "OpenAI" + } + ] + } + } + }, + "required": [ + "transcribers" + ] + }, + "AssemblyAITranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "assembly-ai" + ] + }, + "language": { + "type": "string", + "description": "This is the language that will be set for the transcription.", + "enum": [ + "en" + ] + }, + "realtimeUrl": { + "type": "string", + "description": "The WebSocket URL that the transcriber connects to." + }, + "wordBoost": { + "description": "Add up to 2500 characters of custom vocabulary.", + "type": "array", + "items": { + "type": "string", + "maxLength": 2500 + } + }, + "endUtteranceSilenceThreshold": { + "type": "number", + "description": "The duration of the end utterance silence threshold in milliseconds." + }, + "disablePartialTranscripts": { + "type": "boolean", + "description": "Disable partial transcripts.\nSet to `true` to not receive partial transcripts. Defaults to `false`." + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider" + ] + }, + "AzureSpeechTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "azure" + ] + }, + "language": { + "type": "string", + "description": "This is the language that will be set for the transcription. The list of languages Azure supports can be found here: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt", + "enum": [ + "af-ZA", + "am-ET", + "ar-AE", + "ar-BH", + "ar-DZ", + "ar-EG", + "ar-IL", + "ar-IQ", + "ar-JO", + "ar-KW", + "ar-LB", + "ar-LY", + "ar-MA", + "ar-OM", + "ar-PS", + "ar-QA", + "ar-SA", + "ar-SY", + "ar-TN", + "ar-YE", + "az-AZ", + "bg-BG", + "bn-IN", + "bs-BA", + "ca-ES", + "cs-CZ", + "cy-GB", + "da-DK", + "de-AT", + "de-CH", + "de-DE", + "el-GR", + "en-AU", + "en-CA", + "en-GB", + "en-GH", + "en-HK", + "en-IE", + "en-IN", + "en-KE", + "en-NG", + "en-NZ", + "en-PH", + "en-SG", + "en-TZ", + "en-US", + "en-ZA", + "es-AR", + "es-BO", + "es-CL", + "es-CO", + "es-CR", + "es-CU", + "es-DO", + "es-EC", + "es-ES", + "es-GQ", + "es-GT", + "es-HN", + "es-MX", + "es-NI", + "es-PA", + "es-PE", + "es-PR", + "es-PY", + "es-SV", + "es-US", + "es-UY", + "es-VE", + "et-EE", + "eu-ES", + "fa-IR", + "fi-FI", + "fil-PH", + "fr-BE", + "fr-CA", + "fr-CH", + "fr-FR", + "ga-IE", + "gl-ES", + "gu-IN", + "he-IL", + "hi-IN", + "hr-HR", + "hu-HU", + "hy-AM", + "id-ID", + "is-IS", + "it-CH", + "it-IT", + "ja-JP", + "jv-ID", + "ka-GE", + "kk-KZ", + "km-KH", + "kn-IN", + "ko-KR", + "lo-LA", + "lt-LT", + "lv-LV", + "mk-MK", + "ml-IN", + "mn-MN", + "mr-IN", + "ms-MY", + "mt-MT", + "my-MM", + "nb-NO", + "ne-NP", + "nl-BE", + "nl-NL", + "pa-IN", + "pl-PL", + "ps-AF", + "pt-BR", + "pt-PT", + "ro-RO", + "ru-RU", + "si-LK", + "sk-SK", + "sl-SI", + "so-SO", + "sq-AL", + "sr-RS", + "sv-SE", + "sw-KE", + "sw-TZ", + "ta-IN", + "te-IN", + "th-TH", + "tr-TR", + "uk-UA", + "ur-IN", + "uz-UZ", + "vi-VN", + "wuu-CN", + "yue-CN", + "zh-CN", + "zh-CN-shandong", + "zh-CN-sichuan", + "zh-HK", + "zh-TW", + "zu-ZA" + ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider" + ] + }, + "BackoffPlan": { + "type": "object", + "properties": { + "maxRetries": { + "type": "number", + "description": "This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries).\n\n@default 0", + "minimum": 0, + "maximum": 10, + "example": 0 + }, + "type": { + "type": "object", + "description": "This is the type of backoff plan to use. Defaults to fixed.\n\n@default fixed", + "enum": [ + "fixed", + "exponential" + ], + "example": "fixed" + }, + "baseDelaySeconds": { + "type": "number", + "description": "This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay.", + "minimum": 0, + "maximum": 10, + "example": 1 + } + }, + "required": [ + "maxRetries", + "type", + "baseDelaySeconds" + ] + }, + "Server": { + "type": "object", + "properties": { + "timeoutSeconds": { + "type": "number", + "description": "This is the timeout in seconds for the request to your server. Defaults to 20 seconds.\n\n@default 20", + "minimum": 1, + "maximum": 120, + "example": 20 + }, + "url": { + "type": "string", + "description": "API endpoint to send requests to." + }, + "secret": { + "type": "string", + "description": "This is the secret you can set that Vapi will send with every request to your server. Will be sent as a header called x-vapi-secret.\n\nSame precedence logic as server." + }, + "headers": { + "type": "object", + "description": "These are the custom headers to include in the request sent to your server.\n\nEach key-value pair represents a header name and its value." + }, + "backoffPlan": { + "description": "This is the backoff plan to use if the request fails.", + "allOf": [ + { + "$ref": "#/components/schemas/BackoffPlan" + } + ] + } + }, + "required": [ + "url" + ] + }, + "CustomTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.", + "enum": [ + "custom-transcriber" + ] + }, + "server": { + "description": "This is where the transcription request will be sent.\n\nUsage:\n1. Vapi will initiate a websocket connection with `server.url`.\n\n2. Vapi will send an initial text frame with the sample rate. Format:\n```\n {\n \"type\": \"start\",\n \"encoding\": \"linear16\", // 16-bit raw PCM format\n \"container\": \"raw\",\n \"sampleRate\": {{sampleRate}},\n \"channels\": 2 // customer is channel 0, assistant is channel 1\n }\n```\n\n3. Vapi will send the audio data in 16-bit raw PCM format as binary frames.\n\n4. You can read the messages something like this:\n```\nws.on('message', (data, isBinary) => {\n if (isBinary) {\n pcmBuffer = Buffer.concat([pcmBuffer, data]);\n console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);\n } else {\n console.log('Received message:', JSON.parse(data.toString()));\n }\n});\n```\n\n5. You will respond with transcriptions as you have them. Format:\n```\n {\n \"type\": \"transcriber-response\",\n \"transcription\": \"Hello, world!\",\n \"channel\": \"customer\" | \"assistant\"\n }\n```", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider", + "server" + ] + }, + "DeepgramTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "deepgram" + ] + }, + "model": { + "description": "This is the Deepgram model that will be used. A list of models can be found here: https://developers.deepgram.com/docs/models-languages-overview", + "oneOf": [ + { + "type": "string", + "enum": [ + "nova-3", + "nova-3-general", + "nova-2", + "nova-2-general", + "nova-2-meeting", + "nova-2-phonecall", + "nova-2-finance", + "nova-2-conversationalai", + "nova-2-voicemail", + "nova-2-video", + "nova-2-medical", + "nova-2-drivethru", + "nova-2-automotive", + "nova", + "nova-general", + "nova-phonecall", + "nova-medical", + "enhanced", + "enhanced-general", + "enhanced-meeting", + "enhanced-phonecall", + "enhanced-finance", + "base", + "base-general", + "base-meeting", + "base-phonecall", + "base-finance", + "base-conversationalai", + "base-voicemail", + "base-video" + ] + }, + { + "type": "string" + } + ] + }, + "language": { + "type": "string", + "description": "This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview", + "enum": [ + "bg", + "ca", + "cs", + "da", + "da-DK", + "de", + "de-CH", + "el", + "en", + "en-AU", + "en-GB", + "en-IN", + "en-NZ", + "en-US", + "es", + "es-419", + "es-LATAM", + "et", + "fi", + "fr", + "fr-CA", + "hi", + "hi-Latn", + "hu", + "id", + "it", + "ja", + "ko", + "ko-KR", + "lt", + "lv", + "ms", + "multi", + "nl", + "nl-BE", + "no", + "pl", + "pt", + "pt-BR", + "ro", + "ru", + "sk", + "sv", + "sv-SE", + "ta", + "taq", + "th", + "th-TH", + "tr", + "uk", + "vi", + "zh", + "zh-CN", + "zh-HK", + "zh-Hans", + "zh-Hant", + "zh-TW" + ] + }, + "smartFormat": { + "type": "boolean", + "description": "This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes format numbers as times but it's getting better.", + "example": false + }, + "codeSwitchingEnabled": { + "type": "boolean", + "description": "This automatically switches the transcriber's language when the customer's language changes. Defaults to false.\n\nUsage:\n- If your customers switch languages mid-call, you can set this to true.\n\nNote:\n- To detect language changes, Vapi uses a custom trained model. Languages supported (X = limited support):\n 1. Arabic\n 2. Bengali\n 3. Cantonese\n 4. Chinese\n 5. Chinese Simplified (X)\n 6. Chinese Traditional (X)\n 7. English\n 8. Farsi (X)\n 9. French\n 10. German\n 11. Haitian Creole (X)\n 12. Hindi\n 13. Italian\n 14. Japanese\n 15. Korean\n 16. Portuguese\n 17. Russian\n 18. Spanish\n 19. Thai\n 20. Urdu\n 21. Vietnamese\n- To receive `language-change-detected` webhook events, add it to `assistant.serverMessages`.\n\n@default false", + "example": false + }, + "mipOptOut": { + "type": "boolean", + "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false", + "example": false, + "default": false + }, + "numerals": { + "type": "boolean", + "description": "If set to true, this will cause deepgram to convert spoken numbers to literal numerals. For example, \"my phone number is nine-seven-two...\" would become \"my phone number is 972...\"\n\n@default false", + "example": false + }, + "keywords": { + "description": "These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here.", + "type": "array", + "items": { + "type": "string", + "pattern": "/^\\p{L}[\\p{L}\\d]*(?::[+-]?\\d+)?$/u" + } + }, + "keyterm": { + "description": "Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.", + "type": "array", + "items": { + "type": "string" + } + }, + "endpointing": { + "type": "number", + "description": "This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth documentation here: https://developers.deepgram.com/docs/endpointing.\n\nHere are the most important bits:\n- Defaults to 10. This is recommended for most use cases to optimize for latency.\n- 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word utterances. For those uses cases, it's recommended to try 300. It will add a bit of latency but the quality and reliability of the experience will be better.\n- If neither 10 nor 300 work, contact support@vapi.ai and we'll find another solution.\n\n@default 10", + "minimum": 10, + "maximum": 500 + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider" + ] + }, + "ElevenLabsTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "11labs" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used for the transcription.", + "enum": [ + "scribe_v1" + ] + }, + "language": { + "type": "string", + "enum": [ + "aa", + "ab", + "ae", + "af", + "ak", + "am", + "an", + "ar", + "as", + "av", + "ay", + "az", + "ba", + "be", + "bg", + "bh", + "bi", + "bm", + "bn", + "bo", + "br", + "bs", + "ca", + "ce", + "ch", + "co", + "cr", + "cs", + "cu", + "cv", + "cy", + "da", + "de", + "dv", + "dz", + "ee", + "el", + "en", + "eo", + "es", + "et", + "eu", + "fa", + "ff", + "fi", + "fj", + "fo", + "fr", + "fy", + "ga", + "gd", + "gl", + "gn", + "gu", + "gv", + "ha", + "he", + "hi", + "ho", + "hr", + "ht", + "hu", + "hy", + "hz", + "ia", + "id", + "ie", + "ig", + "ii", + "ik", + "io", + "is", + "it", + "iu", + "ja", + "jv", + "ka", + "kg", + "ki", + "kj", + "kk", + "kl", + "km", + "kn", + "ko", + "kr", + "ks", + "ku", + "kv", + "kw", + "ky", + "la", + "lb", + "lg", + "li", + "ln", + "lo", + "lt", + "lu", + "lv", + "mg", + "mh", + "mi", + "mk", + "ml", + "mn", + "mr", + "ms", + "mt", + "my", + "na", + "nb", + "nd", + "ne", + "ng", + "nl", + "nn", + "no", + "nr", + "nv", + "ny", + "oc", + "oj", + "om", + "or", + "os", + "pa", + "pi", + "pl", + "ps", + "pt", + "qu", + "rm", + "rn", + "ro", + "ru", + "rw", + "sa", + "sc", + "sd", + "se", + "sg", + "si", + "sk", + "sl", + "sm", + "sn", + "so", + "sq", + "sr", + "ss", + "st", + "su", + "sv", + "sw", + "ta", + "te", + "tg", + "th", + "ti", + "tk", + "tl", + "tn", + "to", + "tr", + "ts", + "tt", + "tw", + "ty", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "wo", + "xh", + "yi", + "yue", + "yo", + "za", + "zh", + "zu" + ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider" + ] + }, + "GladiaTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "gladia" + ] + }, + "model": { + "description": "This is the Gladia model that will be used. Default is 'fast'", + "oneOf": [ + { + "enum": [ + "fast", + "accurate" + ] + } + ] + }, + "languageBehaviour": { + "description": "Defines how the transcription model detects the audio language. Default value is 'automatic single language'.", + "oneOf": [ + { + "type": "string", + "enum": [ + "manual", + "automatic single language", + "automatic multiple languages" + ] + } + ] + }, + "language": { + "type": "string", + "description": "Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.", + "enum": [ + "af", + "sq", + "am", + "ar", + "hy", + "as", + "az", + "ba", + "eu", + "be", + "bn", + "bs", + "br", + "bg", + "ca", + "zh", + "hr", + "cs", + "da", + "nl", + "en", + "et", + "fo", + "fi", + "fr", + "gl", + "ka", + "de", + "el", + "gu", + "ht", + "ha", + "haw", + "he", + "hi", + "hu", + "is", + "id", + "it", + "ja", + "jv", + "kn", + "kk", + "km", + "ko", + "lo", + "la", + "lv", + "ln", + "lt", + "lb", + "mk", + "mg", + "ms", + "ml", + "mt", + "mi", + "mr", + "mn", + "my", + "ne", + "no", + "nn", + "oc", + "ps", + "fa", + "pl", + "pt", + "pa", + "ro", + "ru", + "sa", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "es", + "su", + "sw", + "sv", + "tl", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "tr", + "tk", + "uk", + "ur", + "uz", + "vi", + "cy", + "yi", + "yo" + ] + }, + "transcriptionHint": { + "type": "string", + "description": "Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored.\n⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.", + "maxLength": 600, + "example": "custom vocabulary" + }, + "prosody": { + "type": "boolean", + "description": "If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)… Default value is false.", + "example": false + }, + "audioEnhancer": { + "type": "boolean", + "description": "If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.", + "example": false + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider" + ] + }, + "SpeechmaticsTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "speechmatics" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used for the transcription.", + "enum": [ + "default" + ] + }, + "language": { + "type": "string", + "enum": [ + "auto", + "ar", + "ba", + "eu", + "be", + "bn", + "bg", + "yue", + "ca", + "hr", + "cs", + "da", + "nl", + "en", + "eo", + "et", + "fi", + "fr", + "gl", + "de", + "el", + "he", + "hi", + "hu", + "id", + "ia", + "ga", + "it", + "ja", + "ko", + "lv", + "lt", + "ms", + "mt", + "cmn", + "mr", + "mn", + "no", + "fa", + "pl", + "pt", + "ro", + "ru", + "sk", + "sl", + "es", + "sw", + "sv", + "ta", + "th", + "tr", + "uk", + "ur", + "ug", + "vi", + "cy" + ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider" + ] + }, + "TalkscriberTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "talkscriber" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used for the transcription.", + "enum": [ + "whisper" + ] + }, + "language": { + "type": "string", + "description": "This is the language that will be set for the transcription. The list of languages Whisper supports can be found here: https://github.com/openai/whisper/blob/main/whisper/tokenizer.py", + "enum": [ + "en", + "zh", + "de", + "es", + "ru", + "ko", + "fr", + "ja", + "pt", + "tr", + "pl", + "ca", + "nl", + "ar", + "sv", + "it", + "id", + "hi", + "fi", + "vi", + "he", + "uk", + "el", + "ms", + "cs", + "ro", + "da", + "hu", + "ta", + "no", + "th", + "ur", + "hr", + "bg", + "lt", + "la", + "mi", + "ml", + "cy", + "sk", + "te", + "fa", + "lv", + "bn", + "sr", + "az", + "sl", + "kn", + "et", + "mk", + "br", + "eu", + "is", + "hy", + "ne", + "mn", + "bs", + "kk", + "sq", + "sw", + "gl", + "mr", + "pa", + "si", + "km", + "sn", + "yo", + "so", + "af", + "oc", + "ka", + "be", + "tg", + "sd", + "gu", + "am", + "yi", + "lo", + "uz", + "fo", + "ht", + "ps", + "tk", + "nn", + "mt", + "sa", + "lb", + "my", + "bo", + "tl", + "mg", + "as", + "tt", + "haw", + "ln", + "ha", + "ba", + "jw", + "su", + "yue" + ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider" + ] + }, + "GoogleTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "google" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used for the transcription.", + "enum": [ + "gemini-2.0-flash-thinking-exp", + "gemini-2.0-pro-exp-02-05", + "gemini-2.0-flash", + "gemini-2.0-flash-lite", + "gemini-2.0-flash-lite-preview-02-05", + "gemini-2.0-flash-exp", + "gemini-2.0-flash-realtime-exp", + "gemini-1.5-flash", + "gemini-1.5-flash-002", + "gemini-1.5-pro", + "gemini-1.5-pro-002", + "gemini-1.0-pro" + ] + }, + "language": { + "type": "string", + "description": "This is the language that will be set for the transcription.", + "enum": [ + "Multilingual", + "Arabic", + "Bengali", + "Bulgarian", + "Chinese", + "Croatian", + "Czech", + "Danish", + "Dutch", + "English", + "Estonian", + "Finnish", + "French", + "German", + "Greek", + "Hebrew", + "Hindi", + "Hungarian", + "Indonesian", + "Italian", + "Japanese", + "Korean", + "Latvian", + "Lithuanian", + "Norwegian", + "Polish", + "Portuguese", + "Romanian", + "Russian", + "Serbian", + "Slovak", + "Slovenian", + "Spanish", + "Swahili", + "Swedish", + "Thai", + "Turkish", + "Ukrainian", + "Vietnamese" + ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider" + ] + }, + "OpenAITranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "openai" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used for the transcription.", + "enum": [ + "gpt-4o-transcribe", + "gpt-4o-mini-transcribe" + ] + }, + "language": { + "type": "string", + "description": "This is the language that will be set for the transcription.", + "enum": [ + "af", + "ar", + "hy", + "az", + "be", + "bs", + "bg", + "ca", + "zh", + "hr", + "cs", + "da", + "nl", + "en", + "et", + "fi", + "fr", + "gl", + "de", + "el", + "he", + "hi", + "hu", + "is", + "id", + "it", + "ja", + "kn", + "kk", + "ko", + "lv", + "lt", + "mk", + "ms", + "mr", + "mi", + "ne", + "no", + "fa", + "pl", + "pt", + "ro", + "ru", + "sr", + "sk", + "sl", + "es", + "sw", + "sv", + "tl", + "ta", + "th", + "tr", + "uk", + "ur", + "vi", + "cy" + ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackTranscriberPlan" + } + ] + } + }, + "required": [ + "provider", + "model" + ] + }, + "FallbackAssemblyAITranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "assembly-ai" + ] + }, + "language": { + "type": "string", + "description": "This is the language that will be set for the transcription.", + "enum": [ + "en" + ] + }, + "realtimeUrl": { + "type": "string", + "description": "The WebSocket URL that the transcriber connects to." + }, + "wordBoost": { + "description": "Add up to 2500 characters of custom vocabulary.", + "type": "array", + "items": { + "type": "string", + "maxLength": 2500 + } + }, + "endUtteranceSilenceThreshold": { + "type": "number", + "description": "The duration of the end utterance silence threshold in milliseconds." + }, + "disablePartialTranscripts": { + "type": "boolean", + "description": "Disable partial transcripts.\nSet to `true` to not receive partial transcripts. Defaults to `false`." + } + }, + "required": [ + "provider" + ] + }, + "FallbackAzureSpeechTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "azure" + ] + }, + "language": { + "type": "string", + "description": "This is the language that will be set for the transcription. The list of languages Azure supports can be found here: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt", + "enum": [ + "af-ZA", + "am-ET", + "ar-AE", + "ar-BH", + "ar-DZ", + "ar-EG", + "ar-IL", + "ar-IQ", + "ar-JO", + "ar-KW", + "ar-LB", + "ar-LY", + "ar-MA", + "ar-OM", + "ar-PS", + "ar-QA", + "ar-SA", + "ar-SY", + "ar-TN", + "ar-YE", + "az-AZ", + "bg-BG", + "bn-IN", + "bs-BA", + "ca-ES", + "cs-CZ", + "cy-GB", + "da-DK", + "de-AT", + "de-CH", + "de-DE", + "el-GR", + "en-AU", + "en-CA", + "en-GB", + "en-GH", + "en-HK", + "en-IE", + "en-IN", + "en-KE", + "en-NG", + "en-NZ", + "en-PH", + "en-SG", + "en-TZ", + "en-US", + "en-ZA", + "es-AR", + "es-BO", + "es-CL", + "es-CO", + "es-CR", + "es-CU", + "es-DO", + "es-EC", + "es-ES", + "es-GQ", + "es-GT", + "es-HN", + "es-MX", + "es-NI", + "es-PA", + "es-PE", + "es-PR", + "es-PY", + "es-SV", + "es-US", + "es-UY", + "es-VE", + "et-EE", + "eu-ES", + "fa-IR", + "fi-FI", + "fil-PH", + "fr-BE", + "fr-CA", + "fr-CH", + "fr-FR", + "ga-IE", + "gl-ES", + "gu-IN", + "he-IL", + "hi-IN", + "hr-HR", + "hu-HU", + "hy-AM", + "id-ID", + "is-IS", + "it-CH", + "it-IT", + "ja-JP", + "jv-ID", + "ka-GE", + "kk-KZ", + "km-KH", + "kn-IN", + "ko-KR", + "lo-LA", + "lt-LT", + "lv-LV", + "mk-MK", + "ml-IN", + "mn-MN", + "mr-IN", + "ms-MY", + "mt-MT", + "my-MM", + "nb-NO", + "ne-NP", + "nl-BE", + "nl-NL", + "pa-IN", + "pl-PL", + "ps-AF", + "pt-BR", + "pt-PT", + "ro-RO", + "ru-RU", + "si-LK", + "sk-SK", + "sl-SI", + "so-SO", + "sq-AL", + "sr-RS", + "sv-SE", + "sw-KE", + "sw-TZ", + "ta-IN", + "te-IN", + "th-TH", + "tr-TR", + "uk-UA", + "ur-IN", + "uz-UZ", + "vi-VN", + "wuu-CN", + "yue-CN", + "zh-CN", + "zh-CN-shandong", + "zh-CN-sichuan", + "zh-HK", + "zh-TW", + "zu-ZA" + ] + } + }, + "required": [ + "provider" + ] + }, + "FallbackCustomTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used. Use `custom-transcriber` for providers that are not natively supported.", + "enum": [ + "custom-transcriber" + ] + }, + "server": { + "description": "This is where the transcription request will be sent.\n\nUsage:\n1. Vapi will initiate a websocket connection with `server.url`.\n\n2. Vapi will send an initial text frame with the sample rate. Format:\n```\n {\n \"type\": \"start\",\n \"encoding\": \"linear16\", // 16-bit raw PCM format\n \"container\": \"raw\",\n \"sampleRate\": {{sampleRate}},\n \"channels\": 2 // customer is channel 0, assistant is channel 1\n }\n```\n\n3. Vapi will send the audio data in 16-bit raw PCM format as binary frames.\n\n4. You can read the messages something like this:\n```\nws.on('message', (data, isBinary) => {\n if (isBinary) {\n pcmBuffer = Buffer.concat([pcmBuffer, data]);\n console.log(`Received PCM data, buffer size: ${pcmBuffer.length}`);\n } else {\n console.log('Received message:', JSON.parse(data.toString()));\n }\n});\n```\n\n5. You will respond with transcriptions as you have them. Format:\n```\n {\n \"type\": \"transcriber-response\",\n \"transcription\": \"Hello, world!\",\n \"channel\": \"customer\" | \"assistant\"\n }\n```", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + } + }, + "required": [ + "provider", + "server" + ] + }, + "FallbackDeepgramTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "deepgram" + ] + }, + "model": { + "description": "This is the Deepgram model that will be used. A list of models can be found here: https://developers.deepgram.com/docs/models-languages-overview", + "oneOf": [ + { + "type": "string", + "enum": [ + "nova-3", + "nova-3-general", + "nova-2", + "nova-2-general", + "nova-2-meeting", + "nova-2-phonecall", + "nova-2-finance", + "nova-2-conversationalai", + "nova-2-voicemail", + "nova-2-video", + "nova-2-medical", + "nova-2-drivethru", + "nova-2-automotive", + "nova", + "nova-general", + "nova-phonecall", + "nova-medical", + "enhanced", + "enhanced-general", + "enhanced-meeting", + "enhanced-phonecall", + "enhanced-finance", + "base", + "base-general", + "base-meeting", + "base-phonecall", + "base-finance", + "base-conversationalai", + "base-voicemail", + "base-video" + ] + }, + { + "type": "string" + } + ] + }, + "language": { + "type": "string", + "description": "This is the language that will be set for the transcription. The list of languages Deepgram supports can be found here: https://developers.deepgram.com/docs/models-languages-overview", + "enum": [ + "bg", + "ca", + "cs", + "da", + "da-DK", + "de", + "de-CH", + "el", + "en", + "en-AU", + "en-GB", + "en-IN", + "en-NZ", + "en-US", + "es", + "es-419", + "es-LATAM", + "et", + "fi", + "fr", + "fr-CA", + "hi", + "hi-Latn", + "hu", + "id", + "it", + "ja", + "ko", + "ko-KR", + "lt", + "lv", + "ms", + "multi", + "nl", + "nl-BE", + "no", + "pl", + "pt", + "pt-BR", + "ro", + "ru", + "sk", + "sv", + "sv-SE", + "ta", + "taq", + "th", + "th-TH", + "tr", + "uk", + "vi", + "zh", + "zh-CN", + "zh-HK", + "zh-Hans", + "zh-Hant", + "zh-TW" + ] + }, + "smartFormat": { + "type": "boolean", + "description": "This will be use smart format option provided by Deepgram. It's default disabled because it can sometimes format numbers as times but it's getting better.", + "example": false + }, + "codeSwitchingEnabled": { + "type": "boolean", + "description": "This automatically switches the transcriber's language when the customer's language changes. Defaults to false.\n\nUsage:\n- If your customers switch languages mid-call, you can set this to true.\n\nNote:\n- To detect language changes, Vapi uses a custom trained model. Languages supported (X = limited support):\n 1. Arabic\n 2. Bengali\n 3. Cantonese\n 4. Chinese\n 5. Chinese Simplified (X)\n 6. Chinese Traditional (X)\n 7. English\n 8. Farsi (X)\n 9. French\n 10. German\n 11. Haitian Creole (X)\n 12. Hindi\n 13. Italian\n 14. Japanese\n 15. Korean\n 16. Portuguese\n 17. Russian\n 18. Spanish\n 19. Thai\n 20. Urdu\n 21. Vietnamese\n- To receive `language-change-detected` webhook events, add it to `assistant.serverMessages`.\n\n@default false", + "example": false + }, + "mipOptOut": { + "type": "boolean", + "description": "If set to true, this will add mip_opt_out=true as a query parameter of all API requests. See https://developers.deepgram.com/docs/the-deepgram-model-improvement-partnership-program#want-to-opt-out\n\nThis will only be used if you are using your own Deepgram API key.\n\n@default false", + "example": false, + "default": false + }, + "numerals": { + "type": "boolean", + "description": "If set to true, this will cause deepgram to convert spoken numbers to literal numerals. For example, \"my phone number is nine-seven-two...\" would become \"my phone number is 972...\"\n\n@default false", + "example": false + }, + "keywords": { + "description": "These keywords are passed to the transcription model to help it pick up use-case specific words. Anything that may not be a common word, like your company name, should be added here.", + "type": "array", + "items": { + "type": "string", + "pattern": "/^\\p{L}[\\p{L}\\d]*(?::[+-]?\\d+)?$/u" + } + }, + "keyterm": { + "description": "Keyterm Prompting allows you improve Keyword Recall Rate (KRR) for important keyterms or phrases up to 90%.", + "type": "array", + "items": { + "type": "string" + } + }, + "endpointing": { + "type": "number", + "description": "This is the timeout after which Deepgram will send transcription on user silence. You can read in-depth documentation here: https://developers.deepgram.com/docs/endpointing.\n\nHere are the most important bits:\n- Defaults to 10. This is recommended for most use cases to optimize for latency.\n- 10 can cause some missing transcriptions since because of the shorter context. This mostly happens for one-word utterances. For those uses cases, it's recommended to try 300. It will add a bit of latency but the quality and reliability of the experience will be better.\n- If neither 10 nor 300 work, contact support@vapi.ai and we'll find another solution.\n\n@default 10", + "minimum": 10, + "maximum": 500 + } + }, + "required": [ + "provider" + ] + }, + "FallbackElevenLabsTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "11labs" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used for the transcription.", + "enum": [ + "scribe_v1" + ] + }, + "language": { + "type": "string", + "enum": [ + "aa", + "ab", + "ae", + "af", + "ak", + "am", + "an", + "ar", + "as", + "av", + "ay", + "az", + "ba", + "be", + "bg", + "bh", + "bi", + "bm", + "bn", + "bo", + "br", + "bs", + "ca", + "ce", + "ch", + "co", + "cr", + "cs", + "cu", + "cv", + "cy", + "da", + "de", + "dv", + "dz", + "ee", + "el", + "en", + "eo", + "es", + "et", + "eu", + "fa", + "ff", + "fi", + "fj", + "fo", + "fr", + "fy", + "ga", + "gd", + "gl", + "gn", + "gu", + "gv", + "ha", + "he", + "hi", + "ho", + "hr", + "ht", + "hu", + "hy", + "hz", + "ia", + "id", + "ie", + "ig", + "ii", + "ik", + "io", + "is", + "it", + "iu", + "ja", + "jv", + "ka", + "kg", + "ki", + "kj", + "kk", + "kl", + "km", + "kn", + "ko", + "kr", + "ks", + "ku", + "kv", + "kw", + "ky", + "la", + "lb", + "lg", + "li", + "ln", + "lo", + "lt", + "lu", + "lv", + "mg", + "mh", + "mi", + "mk", + "ml", + "mn", + "mr", + "ms", + "mt", + "my", + "na", + "nb", + "nd", + "ne", + "ng", + "nl", + "nn", + "no", + "nr", + "nv", + "ny", + "oc", + "oj", + "om", + "or", + "os", + "pa", + "pi", + "pl", + "ps", + "pt", + "qu", + "rm", + "rn", + "ro", + "ru", + "rw", + "sa", + "sc", + "sd", + "se", + "sg", + "si", + "sk", + "sl", + "sm", + "sn", + "so", + "sq", + "sr", + "ss", + "st", + "su", + "sv", + "sw", + "ta", + "te", + "tg", + "th", + "ti", + "tk", + "tl", + "tn", + "to", + "tr", + "ts", + "tt", + "tw", + "ty", + "ug", + "uk", + "ur", + "uz", + "ve", + "vi", + "vo", + "wa", + "wo", + "xh", + "yi", + "yue", + "yo", + "za", + "zh", + "zu" + ] + } + }, + "required": [ + "provider" + ] + }, + "FallbackGladiaTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "gladia" + ] + }, + "model": { + "description": "This is the Gladia model that will be used. Default is 'fast'", + "oneOf": [ + { + "enum": [ + "fast", + "accurate" + ] + } + ] + }, + "languageBehaviour": { + "description": "Defines how the transcription model detects the audio language. Default value is 'automatic single language'.", + "oneOf": [ + { + "type": "string", + "enum": [ + "manual", + "automatic single language", + "automatic multiple languages" + ] + } + ] + }, + "language": { + "type": "string", + "description": "Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.", + "enum": [ + "af", + "sq", + "am", + "ar", + "hy", + "as", + "az", + "ba", + "eu", + "be", + "bn", + "bs", + "br", + "bg", + "ca", + "zh", + "hr", + "cs", + "da", + "nl", + "en", + "et", + "fo", + "fi", + "fr", + "gl", + "ka", + "de", + "el", + "gu", + "ht", + "ha", + "haw", + "he", + "hi", + "hu", + "is", + "id", + "it", + "ja", + "jv", + "kn", + "kk", + "km", + "ko", + "lo", + "la", + "lv", + "ln", + "lt", + "lb", + "mk", + "mg", + "ms", + "ml", + "mt", + "mi", + "mr", + "mn", + "my", + "ne", + "no", + "nn", + "oc", + "ps", + "fa", + "pl", + "pt", + "pa", + "ro", + "ru", + "sa", + "sr", + "sn", + "sd", + "si", + "sk", + "sl", + "so", + "es", + "su", + "sw", + "sv", + "tl", + "tg", + "ta", + "tt", + "te", + "th", + "bo", + "tr", + "tk", + "uk", + "ur", + "uz", + "vi", + "cy", + "yi", + "yo" + ] + }, + "transcriptionHint": { + "type": "string", + "description": "Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored.\n⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.", + "maxLength": 600, + "example": "custom vocabulary" + }, + "prosody": { + "type": "boolean", + "description": "If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)… Default value is false.", + "example": false + }, + "audioEnhancer": { + "type": "boolean", + "description": "If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.", + "example": false + } + }, + "required": [ + "provider" + ] + }, + "FallbackSpeechmaticsTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "speechmatics" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used for the transcription.", + "enum": [ + "default" + ] + }, + "language": { + "type": "string", + "enum": [ + "auto", + "ar", + "ba", + "eu", + "be", + "bn", + "bg", + "yue", + "ca", + "hr", + "cs", + "da", + "nl", + "en", + "eo", + "et", + "fi", + "fr", + "gl", + "de", + "el", + "he", + "hi", + "hu", + "id", + "ia", + "ga", + "it", + "ja", + "ko", + "lv", + "lt", + "ms", + "mt", + "cmn", + "mr", + "mn", + "no", + "fa", + "pl", + "pt", + "ro", + "ru", + "sk", + "sl", + "es", + "sw", + "sv", + "ta", + "th", + "tr", + "uk", + "ur", + "ug", + "vi", + "cy" + ] + } + }, + "required": [ + "provider" + ] + }, + "FallbackTalkscriberTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", "enum": [ "talkscriber" ] @@ -4808,57 +6879,112 @@ "provider" ] }, - "GladiaTranscriber": { + "FallbackGoogleTranscriber": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the transcription provider that will be used.", + "enum": [ + "google" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used for the transcription.", + "enum": [ + "gemini-2.0-flash-thinking-exp", + "gemini-2.0-pro-exp-02-05", + "gemini-2.0-flash", + "gemini-2.0-flash-lite", + "gemini-2.0-flash-lite-preview-02-05", + "gemini-2.0-flash-exp", + "gemini-2.0-flash-realtime-exp", + "gemini-1.5-flash", + "gemini-1.5-flash-002", + "gemini-1.5-pro", + "gemini-1.5-pro-002", + "gemini-1.0-pro" + ] + }, + "language": { + "type": "string", + "description": "This is the language that will be set for the transcription.", + "enum": [ + "Multilingual", + "Arabic", + "Bengali", + "Bulgarian", + "Chinese", + "Croatian", + "Czech", + "Danish", + "Dutch", + "English", + "Estonian", + "Finnish", + "French", + "German", + "Greek", + "Hebrew", + "Hindi", + "Hungarian", + "Indonesian", + "Italian", + "Japanese", + "Korean", + "Latvian", + "Lithuanian", + "Norwegian", + "Polish", + "Portuguese", + "Romanian", + "Russian", + "Serbian", + "Slovak", + "Slovenian", + "Spanish", + "Swahili", + "Swedish", + "Thai", + "Turkish", + "Ukrainian", + "Vietnamese" + ] + } + }, + "required": [ + "provider" + ] + }, + "FallbackOpenAITranscriber": { "type": "object", "properties": { "provider": { "type": "string", "description": "This is the transcription provider that will be used.", "enum": [ - "gladia" + "openai" ] }, "model": { - "description": "This is the Gladia model that will be used. Default is 'fast'", - "oneOf": [ - { - "enum": [ - "fast", - "accurate" - ] - } - ] - }, - "languageBehaviour": { - "description": "Defines how the transcription model detects the audio language. Default value is 'automatic single language'.", - "oneOf": [ - { - "type": "string", - "enum": [ - "manual", - "automatic single language", - "automatic multiple languages" - ] - } + "type": "string", + "description": "This is the model that will be used for the transcription.", + "enum": [ + "gpt-4o-transcribe", + "gpt-4o-mini-transcribe" ] }, "language": { "type": "string", - "description": "Defines the language to use for the transcription. Required when languageBehaviour is 'manual'.", + "description": "This is the language that will be set for the transcription.", "enum": [ "af", - "sq", - "am", "ar", "hy", - "as", "az", - "ba", - "eu", "be", - "bn", "bs", - "br", "bg", "ca", "zh", @@ -4868,17 +6994,11 @@ "nl", "en", "et", - "fo", "fi", "fr", "gl", - "ka", "de", "el", - "gu", - "ht", - "ha", - "haw", "he", "hi", "hu", @@ -4886,250 +7006,68 @@ "id", "it", "ja", - "jv", "kn", "kk", - "km", "ko", - "lo", - "la", "lv", - "ln", "lt", - "lb", "mk", - "mg", "ms", - "ml", - "mt", - "mi", "mr", - "mn", - "my", + "mi", "ne", "no", - "nn", - "oc", - "ps", "fa", "pl", "pt", - "pa", "ro", "ru", - "sa", "sr", - "sn", - "sd", - "si", "sk", "sl", - "so", "es", - "su", "sw", "sv", "tl", - "tg", "ta", - "tt", - "te", "th", - "bo", "tr", - "tk", "uk", "ur", - "uz", "vi", - "cy", - "yi", - "yo" + "cy" ] - }, - "transcriptionHint": { - "type": "string", - "description": "Provides a custom vocabulary to the model to improve accuracy of transcribing context specific words, technical terms, names, etc. If empty, this argument is ignored.\n⚠️ Warning ⚠️: Please be aware that the transcription_hint field has a character limit of 600. If you provide a transcription_hint longer than 600 characters, it will be automatically truncated to meet this limit.", - "maxLength": 600, - "example": "custom vocabulary" - }, - "prosody": { - "type": "boolean", - "description": "If prosody is true, you will get a transcription that can contain prosodies i.e. (laugh) (giggles) (malefic laugh) (toss) (music)… Default value is false.", - "example": false - }, - "audioEnhancer": { - "type": "boolean", - "description": "If true, audio will be pre-processed to improve accuracy but latency will increase. Default value is false.", - "example": false } }, "required": [ - "provider" + "provider", + "model" ] }, - "AzureSpeechTranscriber": { + "LangfuseObservabilityPlan": { "type": "object", "properties": { "provider": { "type": "string", - "description": "This is the transcription provider that will be used.", "enum": [ - "azure" + "langfuse" ] }, - "language": { - "type": "string", - "description": "This is the language that will be set for the transcription. The list of languages Azure supports can be found here: https://learn.microsoft.com/en-us/azure/ai-services/speech-service/language-support?tabs=stt", - "enum": [ - "af-ZA", - "am-ET", - "ar-AE", - "ar-BH", - "ar-DZ", - "ar-EG", - "ar-IL", - "ar-IQ", - "ar-JO", - "ar-KW", - "ar-LB", - "ar-LY", - "ar-MA", - "ar-OM", - "ar-PS", - "ar-QA", - "ar-SA", - "ar-SY", - "ar-TN", - "ar-YE", - "az-AZ", - "bg-BG", - "bn-IN", - "bs-BA", - "ca-ES", - "cs-CZ", - "cy-GB", - "da-DK", - "de-AT", - "de-CH", - "de-DE", - "el-GR", - "en-AU", - "en-CA", - "en-GB", - "en-GH", - "en-HK", - "en-IE", - "en-IN", - "en-KE", - "en-NG", - "en-NZ", - "en-PH", - "en-SG", - "en-TZ", - "en-US", - "en-ZA", - "es-AR", - "es-BO", - "es-CL", - "es-CO", - "es-CR", - "es-CU", - "es-DO", - "es-EC", - "es-ES", - "es-GQ", - "es-GT", - "es-HN", - "es-MX", - "es-NI", - "es-PA", - "es-PE", - "es-PR", - "es-PY", - "es-SV", - "es-US", - "es-UY", - "es-VE", - "et-EE", - "eu-ES", - "fa-IR", - "fi-FI", - "fil-PH", - "fr-BE", - "fr-CA", - "fr-CH", - "fr-FR", - "ga-IE", - "gl-ES", - "gu-IN", - "he-IL", - "hi-IN", - "hr-HR", - "hu-HU", - "hy-AM", - "id-ID", - "is-IS", - "it-CH", - "it-IT", - "ja-JP", - "jv-ID", - "ka-GE", - "kk-KZ", - "km-KH", - "kn-IN", - "ko-KR", - "lo-LA", - "lt-LT", - "lv-LV", - "mk-MK", - "ml-IN", - "mn-MN", - "mr-IN", - "ms-MY", - "mt-MT", - "my-MM", - "nb-NO", - "ne-NP", - "nl-BE", - "nl-NL", - "pa-IN", - "pl-PL", - "ps-AF", - "pt-BR", - "pt-PT", - "ro-RO", - "ru-RU", - "si-LK", - "sk-SK", - "sl-SI", - "so-SO", - "sq-AL", - "sr-RS", - "sv-SE", - "sw-KE", - "sw-TZ", - "ta-IN", - "te-IN", - "th-TH", - "tr-TR", - "uk-UA", - "ur-IN", - "uz-UZ", - "vi-VN", - "wuu-CN", - "yue-CN", - "zh-CN", - "zh-CN-shandong", - "zh-CN-sichuan", - "zh-HK", - "zh-TW", - "zu-ZA" - ] + "tags": { + "description": "This is an array of tags to be added to the Langfuse trace. Tags allow you to categorize and filter traces. https://langfuse.com/docs/tracing-features/tags", + "type": "array", + "items": { + "type": "string" + } + }, + "metadata": { + "type": "object", + "description": "This is a JSON object that will be added to the Langfuse trace. Traces can be enriched with metadata to better understand your users, application, and experiments. https://langfuse.com/docs/tracing-features/metadata\nBy default it includes the call metadata, assistant metadata, and assistant overrides." } }, "required": [ - "provider" + "provider", + "tags" ] }, "TextContent": { @@ -6470,31 +8408,276 @@ "server" ] }, - "OpenAIMessage": { + "AnyscaleModel": { "type": "object", "properties": { - "content": { + "messages": { + "description": "This is the starting state for the conversation.", + "type": "array", + "items": { + "$ref": "#/components/schemas/OpenAIMessage" + } + }, + "tools": { + "type": "array", + "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CreateDtmfToolDTO", + "title": "DtmfTool" + }, + { + "$ref": "#/components/schemas/CreateEndCallToolDTO", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" + }, + { + "$ref": "#/components/schemas/CreateFunctionToolDTO", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/CreateGhlToolDTO", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/CreateMakeToolDTO", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/CreateTransferCallToolDTO", + "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" + } + ] + } + }, + "toolIds": { + "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.", + "type": "array", + "items": { + "type": "string" + } + }, + "knowledgeBase": { + "description": "These are the options for the knowledge base.", + "oneOf": [ + { + "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO", + "title": "Custom" + } + ] + }, + "knowledgeBaseId": { "type": "string", - "nullable": true, - "maxLength": 100000000 + "description": "This is the ID of the knowledge base the model will use." }, - "role": { + "provider": { "type": "string", "enum": [ - "assistant", - "function", - "user", - "system", - "tool" + "anyscale" + ] + }, + "model": { + "type": "string", + "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b" + }, + "temperature": { + "type": "number", + "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.", + "minimum": 0, + "maximum": 2 + }, + "maxTokens": { + "type": "number", + "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.", + "minimum": 50, + "maximum": 10000 + }, + "emotionRecognitionEnabled": { + "type": "boolean", + "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false" + }, + "numFastTurns": { + "type": "number", + "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0", + "minimum": 0 + } + }, + "required": [ + "provider", + "model" + ] + }, + "AnthropicThinkingConfig": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "enabled" + ] + }, + "budgetTokens": { + "type": "number", + "description": "The maximum number of tokens to allocate for thinking.\nMust be between 1024 and 100000 tokens.", + "minimum": 1024, + "maximum": 100000 + } + }, + "required": [ + "type", + "budgetTokens" + ] + }, + "AnthropicModel": { + "type": "object", + "properties": { + "messages": { + "description": "This is the starting state for the conversation.", + "type": "array", + "items": { + "$ref": "#/components/schemas/OpenAIMessage" + } + }, + "tools": { + "type": "array", + "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CreateDtmfToolDTO", + "title": "DtmfTool" + }, + { + "$ref": "#/components/schemas/CreateEndCallToolDTO", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" + }, + { + "$ref": "#/components/schemas/CreateFunctionToolDTO", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/CreateGhlToolDTO", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/CreateMakeToolDTO", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/CreateTransferCallToolDTO", + "title": "TransferTool" + }, + { + "$ref": "#/components/schemas/CreateQueryToolDTO", + "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" + } + ] + } + }, + "toolIds": { + "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.", + "type": "array", + "items": { + "type": "string" + } + }, + "knowledgeBase": { + "description": "These are the options for the knowledge base.", + "oneOf": [ + { + "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO", + "title": "Custom" + } + ] + }, + "knowledgeBaseId": { + "type": "string", + "description": "This is the ID of the knowledge base the model will use." + }, + "model": { + "type": "string", + "description": "The specific Anthropic/Claude model that will be used.", + "enum": [ + "claude-3-opus-20240229", + "claude-3-sonnet-20240229", + "claude-3-haiku-20240307", + "claude-3-5-sonnet-20240620", + "claude-3-5-sonnet-20241022", + "claude-3-5-haiku-20241022", + "claude-3-7-sonnet-20250219" + ] + }, + "provider": { + "type": "string", + "description": "The provider identifier for Anthropic.", + "enum": [ + "anthropic" + ] + }, + "thinking": { + "description": "Optional configuration for Anthropic's thinking feature.\nOnly applicable for claude-3-7-sonnet-20250219 model.\nIf provided, maxTokens must be greater than thinking.budgetTokens.", + "allOf": [ + { + "$ref": "#/components/schemas/AnthropicThinkingConfig" + } ] + }, + "temperature": { + "type": "number", + "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.", + "minimum": 0, + "maximum": 2 + }, + "maxTokens": { + "type": "number", + "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.", + "minimum": 50, + "maximum": 10000 + }, + "emotionRecognitionEnabled": { + "type": "boolean", + "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false" + }, + "numFastTurns": { + "type": "number", + "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0", + "minimum": 0 } }, "required": [ - "content", - "role" + "model", + "provider" ] }, - "AnyscaleModel": { + "CerebrasModel": { "type": "object", "properties": { "messages": { @@ -6540,6 +8723,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -6564,15 +8755,19 @@ "type": "string", "description": "This is the ID of the knowledge base the model will use." }, - "provider": { + "model": { "type": "string", + "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b", "enum": [ - "anyscale" + "llama3.1-8b", + "llama-3.3-70b" ] }, - "model": { + "provider": { "type": "string", - "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b" + "enum": [ + "cerebras" + ] }, "temperature": { "type": "number", @@ -6597,32 +8792,11 @@ } }, "required": [ - "provider", - "model" - ] - }, - "AnthropicThinkingConfig": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "enabled" - ] - }, - "budgetTokens": { - "type": "number", - "description": "The maximum number of tokens to allocate for thinking.\nMust be between 1024 and 100000 tokens.", - "minimum": 1024, - "maximum": 100000 - } - }, - "required": [ - "type", - "budgetTokens" + "model", + "provider" ] }, - "AnthropicModel": { + "CustomLLMModel": { "type": "object", "properties": { "messages": { @@ -6668,6 +8842,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -6692,33 +8874,35 @@ "type": "string", "description": "This is the ID of the knowledge base the model will use." }, - "model": { + "provider": { "type": "string", - "description": "The specific Anthropic/Claude model that will be used.", + "description": "This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used.", "enum": [ - "claude-3-opus-20240229", - "claude-3-sonnet-20240229", - "claude-3-haiku-20240307", - "claude-3-5-sonnet-20240620", - "claude-3-5-sonnet-20241022", - "claude-3-5-haiku-20241022", - "claude-3-7-sonnet-20250219" + "custom-llm" ] }, - "provider": { + "metadataSendMode": { "type": "string", - "description": "The provider identifier for Anthropic.", + "description": "This determines whether metadata is sent in requests to the custom provider.\n\n- `off` will not send any metadata. payload will look like `{ messages }`\n- `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }`\n- `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }`\n\nFurther, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload.\n\nDefault is `variable`.", "enum": [ - "anthropic" + "off", + "variable", + "destructured" ] }, - "thinking": { - "description": "Optional configuration for Anthropic's thinking feature.\nOnly applicable for claude-3-7-sonnet-20250219 model.\nIf provided, maxTokens must be greater than thinking.budgetTokens.", - "allOf": [ - { - "$ref": "#/components/schemas/AnthropicThinkingConfig" - } - ] + "url": { + "type": "string", + "description": "These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1" + }, + "timeoutSeconds": { + "type": "number", + "description": "This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds.", + "minimum": 20, + "maximum": 600 + }, + "model": { + "type": "string", + "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b" }, "temperature": { "type": "number", @@ -6743,11 +8927,12 @@ } }, "required": [ - "model", - "provider" + "provider", + "url", + "model" ] }, - "CustomLLMModel": { + "DeepInfraModel": { "type": "object", "properties": { "messages": { @@ -6793,6 +8978,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -6819,24 +9012,10 @@ }, "provider": { "type": "string", - "description": "This is the provider that will be used for the model. Any service, including your own server, that is compatible with the OpenAI API can be used.", - "enum": [ - "custom-llm" - ] - }, - "metadataSendMode": { - "type": "string", - "description": "This determines whether metadata is sent in requests to the custom provider.\n\n- `off` will not send any metadata. payload will look like `{ messages }`\n- `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }`\n- `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }`\n\nFurther, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload.\n\nDefault is `variable`.", "enum": [ - "off", - "variable", - "destructured" + "deepinfra" ] }, - "url": { - "type": "string", - "description": "These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1" - }, "model": { "type": "string", "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b" @@ -6865,11 +9044,10 @@ }, "required": [ "provider", - "url", "model" ] }, - "DeepInfraModel": { + "DeepSeekModel": { "type": "object", "properties": { "messages": { @@ -6915,6 +9093,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -6939,15 +9125,19 @@ "type": "string", "description": "This is the ID of the knowledge base the model will use." }, - "provider": { + "model": { "type": "string", + "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b", "enum": [ - "deepinfra" + "deepseek-chat", + "deepseek-reasoner" ] }, - "model": { + "provider": { "type": "string", - "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b" + "enum": [ + "deep-seek" + ] }, "temperature": { "type": "number", @@ -6972,8 +9162,8 @@ } }, "required": [ - "provider", - "model" + "model", + "provider" ] }, "GeminiMultimodalLivePrebuiltVoiceConfig": { @@ -7091,6 +9281,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -7122,6 +9320,7 @@ "gemini-2.0-flash-thinking-exp", "gemini-2.0-pro-exp-02-05", "gemini-2.0-flash", + "gemini-2.0-flash-lite", "gemini-2.0-flash-lite-preview-02-05", "gemini-2.0-flash-exp", "gemini-2.0-flash-realtime-exp", @@ -7219,124 +9418,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" - } - ] - } - }, - "toolIds": { - "description": "These are the tools that the assistant can use during the call. To use transient tools, use `tools`.\n\nBoth `tools` and `toolIds` can be used together.", - "type": "array", - "items": { - "type": "string" - } - }, - "knowledgeBase": { - "description": "These are the options for the knowledge base.", - "oneOf": [ - { - "$ref": "#/components/schemas/CreateCustomKnowledgeBaseDTO", - "title": "Custom" - } - ] - }, - "knowledgeBaseId": { - "type": "string", - "description": "This is the ID of the knowledge base the model will use." - }, - "model": { - "type": "string", - "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b", - "enum": [ - "deepseek-r1-distill-llama-70b", - "llama-3.3-70b-versatile", - "llama-3.1-405b-reasoning", - "llama-3.1-70b-versatile", - "llama-3.1-8b-instant", - "mixtral-8x7b-32768", - "llama3-8b-8192", - "llama3-70b-8192", - "gemma2-9b-it" - ] - }, - "provider": { - "type": "string", - "enum": [ - "groq" - ] - }, - "temperature": { - "type": "number", - "description": "This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency.", - "minimum": 0, - "maximum": 2 - }, - "maxTokens": { - "type": "number", - "description": "This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250.", - "minimum": 50, - "maximum": 10000 - }, - "emotionRecognitionEnabled": { - "type": "boolean", - "description": "This determines whether we detect user's emotion while they speak and send it as an additional info to model.\n\nDefault `false` because the model is usually are good at understanding the user's emotion from text.\n\n@default false" - }, - "numFastTurns": { - "type": "number", - "description": "This sets how many turns at the start of the conversation to use a smaller, faster model from the same provider before switching to the primary model. Example, gpt-3.5-turbo if provider is openai.\n\nDefault is 0.\n\n@default 0", - "minimum": 0 - } - }, - "required": [ - "model", - "provider" - ] - }, - "InflectionAIModel": { - "type": "object", - "properties": { - "messages": { - "description": "This is the starting state for the conversation.", - "type": "array", - "items": { - "$ref": "#/components/schemas/OpenAIMessage" - } - }, - "tools": { - "type": "array", - "description": "These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`.\n\nBoth `tools` and `toolIds` can be used together.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/CreateDtmfToolDTO", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/CreateEndCallToolDTO", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/CreateVoicemailToolDTO", - "title": "VoicemailTool" - }, - { - "$ref": "#/components/schemas/CreateFunctionToolDTO", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/CreateGhlToolDTO", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/CreateMakeToolDTO", - "title": "MakeTool" }, { - "$ref": "#/components/schemas/CreateTransferCallToolDTO", - "title": "TransferTool" + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" }, { - "$ref": "#/components/schemas/CreateQueryToolDTO", - "title": "QueryTool" + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -7365,13 +9454,21 @@ "type": "string", "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b", "enum": [ - "inflection_3_pi" + "deepseek-r1-distill-llama-70b", + "llama-3.3-70b-versatile", + "llama-3.1-405b-reasoning", + "llama-3.1-70b-versatile", + "llama-3.1-8b-instant", + "mixtral-8x7b-32768", + "llama3-8b-8192", + "llama3-70b-8192", + "gemma2-9b-it" ] }, "provider": { "type": "string", "enum": [ - "inflection-ai" + "groq" ] }, "temperature": { @@ -7401,7 +9498,7 @@ "provider" ] }, - "DeepSeekModel": { + "InflectionAIModel": { "type": "object", "properties": { "messages": { @@ -7447,6 +9544,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -7475,14 +9580,13 @@ "type": "string", "description": "This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b", "enum": [ - "deepseek-chat", - "deepseek-reasoner" + "inflection_3_pi" ] }, "provider": { "type": "string", "enum": [ - "deep-seek" + "inflection-ai" ] }, "temperature": { @@ -7558,6 +9662,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -7767,6 +9879,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -7874,6 +9994,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -7981,6 +10109,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -8245,6 +10381,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -8269,21 +10413,6 @@ "type": "string", "description": "This is the ID of the knowledge base the model will use." }, - "steps": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/HandoffStep", - "title": "HandoffStep" - }, - { - "$ref": "#/components/schemas/CallbackStep", - "title": "CallbackStep" - } - ] - } - }, "provider": { "type": "string", "enum": [ @@ -8379,6 +10508,14 @@ { "$ref": "#/components/schemas/CreateQueryToolDTO", "title": "QueryTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } ] } @@ -8723,10 +10860,6 @@ "$ref": "#/components/schemas/FallbackLMNTVoice", "title": "LMNT" }, - { - "$ref": "#/components/schemas/FallbackNeetsVoice", - "title": "Neets" - }, { "$ref": "#/components/schemas/FallbackOpenAIVoice", "title": "OpenAI" @@ -8873,6 +11006,7 @@ "type": "string", "description": "This is the model that will be used. This is optional and will default to the correct model for the voiceId.", "enum": [ + "sonic-2", "sonic-english", "sonic-multilingual", "sonic-preview", @@ -9161,6 +11295,59 @@ "voiceId" ] }, + "HumeVoice": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the voice provider that will be used.", + "enum": [ + "hume" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used.", + "enum": [ + "octave" + ], + "example": "octave" + }, + "voiceId": { + "type": "string", + "description": "The ID of the particular voice you want to use." + }, + "isCustomHumeVoice": { + "type": "boolean", + "description": "Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.", + "example": false + }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + }, + "description": { + "type": "string", + "description": "Natural language instructions describing how the synthesized speech should sound, including but not limited to tone, intonation, pacing, and accent (e.g., 'a soft, gentle voice with a strong British accent').\n\nIf a Voice is specified in the request, this description serves as acting instructions.\nIf no Voice is specified, a new voice is generated based on this description." + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackPlan" + } + ] + } + }, + "required": [ + "provider", + "voiceId" + ] + }, "LMNTVoice": { "type": "object", "properties": { @@ -9217,14 +11404,14 @@ "voiceId" ] }, - "NeetsVoice": { + "NeuphonicVoice": { "type": "object", "properties": { "provider": { "type": "string", "description": "This is the voice provider that will be used.", "enum": [ - "neets" + "neuphonic" ] }, "voiceId": { @@ -9232,18 +11419,36 @@ "oneOf": [ { "type": "string", - "enum": [ - "vits", - "vits" - ], + "enum": [], "title": "Preset Voice Options" }, { "type": "string", - "title": "Neets Voice ID" + "title": "Neuphonic Voice ID" } ] }, + "model": { + "type": "string", + "description": "This is the model that will be used. Defaults to 'neu_fast' if not specified.", + "enum": [ + "neu_hq", + "neu_fast" + ], + "example": "neu_fast" + }, + "language": { + "type": "object", + "description": "This is the language (ISO 639-1) that is enforced for the model.", + "example": "en" + }, + "speed": { + "type": "number", + "description": "This is the speed multiplier that will be used.", + "minimum": 0.25, + "maximum": 2, + "example": null + }, "chunkPlan": { "description": "This is the plan for chunking the model output before it is sent to the voice provider.", "allOf": [ @@ -9263,7 +11468,8 @@ }, "required": [ "provider", - "voiceId" + "voiceId", + "language" ] }, "OpenAIVoice": { @@ -9310,6 +11516,20 @@ } ] }, + "model": { + "type": "string", + "description": "This is the model that will be used for text-to-speech.", + "enum": [ + "tts-1", + "tts-1-hd", + "gpt-4o-mini-tts" + ] + }, + "instructions": { + "type": "string", + "description": "This is a prompt that allows you to control the voice of your generated audio.\nDoes not work with 'tts-1' or 'tts-1-hd' models.", + "maxLength": 10000 + }, "speed": { "type": "number", "description": "This is the speed multiplier that will be used.", @@ -9627,6 +11847,26 @@ "minimum": 0.1, "example": null }, + "pauseBetweenBrackets": { + "type": "boolean", + "description": "This is a flag that controls whether to add slight pauses using angle brackets. Example: “Hi. <200> I’d love to have a conversation with you.” adds a 200ms pause between the first and second sentences.", + "example": false + }, + "phonemizeBetweenBrackets": { + "type": "boolean", + "description": "This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic pronunciation) - Example: \"{h'El.o} World\" will pronounce \"Hello\" as expected.", + "example": false + }, + "reduceLatency": { + "type": "boolean", + "description": "This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency", + "example": false + }, + "inlineSpeedAlpha": { + "type": "string", + "description": "This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha", + "example": null + }, "chunkPlan": { "description": "This is the plan for chunking the model output before it is sent to the voice provider.", "allOf": [ @@ -9812,34 +12052,135 @@ } ] }, - "personaId": { - "type": "string", - "description": "This is the unique identifier for the persona that the replica will use in the conversation." - }, - "callbackUrl": { - "type": "string", - "description": "This is the url that will receive webhooks with updates regarding the conversation state." - }, - "conversationName": { - "type": "string", - "description": "This is the name for the conversation." - }, - "conversationalContext": { - "type": "string", - "description": "This is the context that will be appended to any context provided in the persona, if one is provided." - }, - "customGreeting": { - "type": "string", - "description": "This is the custom greeting that the replica will give once a participant joines the conversation." - }, - "properties": { - "description": "These are optional properties used to customize the conversation.", - "allOf": [ - { - "$ref": "#/components/schemas/TavusConversationProperties" - } - ] - }, + "personaId": { + "type": "string", + "description": "This is the unique identifier for the persona that the replica will use in the conversation." + }, + "callbackUrl": { + "type": "string", + "description": "This is the url that will receive webhooks with updates regarding the conversation state." + }, + "conversationName": { + "type": "string", + "description": "This is the name for the conversation." + }, + "conversationalContext": { + "type": "string", + "description": "This is the context that will be appended to any context provided in the persona, if one is provided." + }, + "customGreeting": { + "type": "string", + "description": "This is the custom greeting that the replica will give once a participant joines the conversation." + }, + "properties": { + "description": "These are optional properties used to customize the conversation.", + "allOf": [ + { + "$ref": "#/components/schemas/TavusConversationProperties" + } + ] + }, + "fallbackPlan": { + "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "allOf": [ + { + "$ref": "#/components/schemas/FallbackPlan" + } + ] + } + }, + "required": [ + "provider", + "voiceId" + ] + }, + "VapiVoice": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the voice provider that will be used.", + "enum": [ + "vapi" + ] + }, + "voiceId": { + "type": "string", + "description": "The voices provided by Vapi", + "enum": [ + "Elliot", + "Rohan", + "Lily", + "Savannah", + "Hana", + "Neha", + "Cole", + "Harry", + "Paige", + "Spencer" + ] + }, + "speed": { + "type": "number", + "description": "This is the speed multiplier that will be used.\n\n@default 1", + "minimum": 0.25, + "maximum": 2, + "default": 1 + }, + "language": { + "type": "string", + "description": "This is the language code (ISO 639-1) that will be used.\n\n@default 'en-US'", + "enum": [ + "en-US", + "en-GB", + "en-AU", + "en-CA", + "ja", + "zh", + "de", + "hi", + "fr-FR", + "fr-CA", + "ko", + "pt-BR", + "pt-PT", + "it", + "es-ES", + "es-MX", + "id", + "nl", + "tr", + "fil", + "pl", + "sv", + "bg", + "ro", + "ar-SA", + "ar-AE", + "cs", + "el", + "fi", + "hr", + "ms", + "sk", + "da", + "ta", + "uk", + "ru", + "hu", + "no", + "vi" + ], + "default": "en-US" + }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + }, "fallbackPlan": { "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", "allOf": [ @@ -9920,6 +12261,7 @@ "type": "string", "description": "This is the model that will be used. This is optional and will default to the correct model for the voiceId.", "enum": [ + "sonic-2", "sonic-english", "sonic-multilingual", "sonic-preview", @@ -10060,51 +12402,6 @@ "voiceId" ] }, - "FallbackHumeVoice": { - "type": "object", - "properties": { - "provider": { - "type": "string", - "description": "This is the voice provider that will be used.", - "enum": [ - "hume" - ] - }, - "model": { - "type": "string", - "description": "This is the model that will be used.", - "enum": [ - "octave" - ], - "example": "octave" - }, - "voiceId": { - "type": "string", - "description": "The ID of the particular voice you want to use." - }, - "isCustomHumeVoice": { - "type": "boolean", - "description": "Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.", - "example": false - }, - "description": { - "type": "string", - "description": "Natural language instructions describing how the synthesized speech should sound, including but not limited to tone, intonation, pacing, and accent (e.g., 'a soft, gentle voice with a strong British accent').\n\nIf a Voice is specified in the request, this description serves as acting instructions.\nIf no Voice is specified, a new voice is generated based on this description." - }, - "chunkPlan": { - "description": "This is the plan for chunking the model output before it is sent to the voice provider.", - "allOf": [ - { - "$ref": "#/components/schemas/ChunkPlan" - } - ] - } - }, - "required": [ - "provider", - "voiceId" - ] - }, "FallbackElevenLabsVoice": { "type": "object", "properties": { @@ -10221,6 +12518,51 @@ "voiceId" ] }, + "FallbackHumeVoice": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the voice provider that will be used.", + "enum": [ + "hume" + ] + }, + "model": { + "type": "string", + "description": "This is the model that will be used.", + "enum": [ + "octave" + ], + "example": "octave" + }, + "voiceId": { + "type": "string", + "description": "The ID of the particular voice you want to use." + }, + "isCustomHumeVoice": { + "type": "boolean", + "description": "Indicates whether the chosen voice is a preset Hume AI voice or a custom voice.", + "example": false + }, + "description": { + "type": "string", + "description": "Natural language instructions describing how the synthesized speech should sound, including but not limited to tone, intonation, pacing, and accent (e.g., 'a soft, gentle voice with a strong British accent').\n\nIf a Voice is specified in the request, this description serves as acting instructions.\nIf no Voice is specified, a new voice is generated based on this description." + }, + "chunkPlan": { + "description": "This is the plan for chunking the model output before it is sent to the voice provider.", + "allOf": [ + { + "$ref": "#/components/schemas/ChunkPlan" + } + ] + } + }, + "required": [ + "provider", + "voiceId" + ] + }, "FallbackLMNTVoice": { "type": "object", "properties": { @@ -10269,14 +12611,14 @@ "voiceId" ] }, - "FallbackNeetsVoice": { + "FallbackNeuphonicVoice": { "type": "object", "properties": { "provider": { "type": "string", "description": "This is the voice provider that will be used.", "enum": [ - "neets" + "neuphonic" ] }, "voiceId": { @@ -10284,18 +12626,36 @@ "oneOf": [ { "type": "string", - "enum": [ - "vits", - "vits" - ], + "enum": [], "title": "Preset Voice Options" }, { "type": "string", - "title": "Neets Voice ID" + "title": "Neuphonic Voice ID" } ] }, + "model": { + "type": "string", + "description": "This is the model that will be used. Defaults to 'neu_fast' if not specified.", + "enum": [ + "neu_hq", + "neu_fast" + ], + "example": "neu_fast" + }, + "language": { + "type": "object", + "description": "This is the language (ISO 639-1) that is enforced for the model.", + "example": "en" + }, + "speed": { + "type": "number", + "description": "This is the speed multiplier that will be used.", + "minimum": 0.25, + "maximum": 2, + "example": null + }, "chunkPlan": { "description": "This is the plan for chunking the model output before it is sent to the voice provider.", "allOf": [ @@ -10307,7 +12667,8 @@ }, "required": [ "provider", - "voiceId" + "voiceId", + "language" ] }, "FallbackOpenAIVoice": { @@ -10354,6 +12715,20 @@ } ] }, + "model": { + "type": "string", + "description": "This is the model that will be used for text-to-speech.", + "enum": [ + "tts-1", + "tts-1-hd", + "gpt-4o-mini-tts" + ] + }, + "instructions": { + "type": "string", + "description": "This is a prompt that allows you to control the voice of your generated audio.\nDoes not work with 'tts-1' or 'tts-1-hd' models.", + "maxLength": 10000 + }, "speed": { "type": "number", "description": "This is the speed multiplier that will be used.", @@ -10655,6 +13030,26 @@ "minimum": 0.1, "example": null }, + "pauseBetweenBrackets": { + "type": "boolean", + "description": "This is a flag that controls whether to add slight pauses using angle brackets. Example: “Hi. <200> I’d love to have a conversation with you.” adds a 200ms pause between the first and second sentences.", + "example": false + }, + "phonemizeBetweenBrackets": { + "type": "boolean", + "description": "This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic pronunciation) - Example: \"{h'El.o} World\" will pronounce \"Hello\" as expected.", + "example": false + }, + "reduceLatency": { + "type": "boolean", + "description": "This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency", + "example": false + }, + "inlineSpeedAlpha": { + "type": "string", + "description": "This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha", + "example": null + }, "chunkPlan": { "description": "This is the plan for chunking the model output before it is sent to the voice provider.", "allOf": [ @@ -10827,14 +13222,71 @@ "type": "string", "description": "The voices provided by Vapi", "enum": [ - "Jordan", - "Adi", - "Julia", - "Maibri (Web)", - "Maibri (Phone)", - "Ashley" + "Elliot", + "Rohan", + "Lily", + "Savannah", + "Hana", + "Neha", + "Cole", + "Harry", + "Paige", + "Spencer" ] }, + "speed": { + "type": "number", + "description": "This is the speed multiplier that will be used.\n\n@default 1", + "minimum": 0.25, + "maximum": 2, + "default": 1 + }, + "language": { + "type": "string", + "description": "This is the language code (ISO 639-1) that will be used.\n\n@default 'en-US'", + "enum": [ + "en-US", + "en-GB", + "en-AU", + "en-CA", + "ja", + "zh", + "de", + "hi", + "fr-FR", + "fr-CA", + "ko", + "pt-BR", + "pt-PT", + "it", + "es-ES", + "es-MX", + "id", + "nl", + "tr", + "fil", + "pl", + "sv", + "bg", + "ro", + "ar-SA", + "ar-AE", + "cs", + "el", + "fi", + "hr", + "ms", + "sk", + "da", + "ta", + "uk", + "ru", + "hu", + "no", + "vi" + ], + "default": "en-US" + }, "chunkPlan": { "description": "This is the plan for chunking the model output before it is sent to the voice provider.", "allOf": [ @@ -11084,6 +13536,7 @@ "models": { "type": "array", "enum": [ + "gpt-4o-2024-11-20", "gpt-4o-2024-08-06", "gpt-4o-mini-2024-07-18", "gpt-4o-2024-05-13", @@ -11101,6 +13554,7 @@ "items": { "type": "string", "enum": [ + "gpt-4o-2024-11-20", "gpt-4o-2024-08-06", "gpt-4o-mini-2024-07-18", "gpt-4o-2024-05-13", @@ -12283,24 +14737,69 @@ } }, "required": [ - "provider", - "authenticationPlan" + "provider", + "authenticationPlan" + ] + }, + "CreateXAiCredentialDTO": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the api key for Grok in XAi's console. Get it from here: https://console.x.ai", + "enum": [ + "xai" + ] + }, + "apiKey": { + "type": "string", + "maxLength": 10000, + "description": "This is not returned in the API." + }, + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + }, + "required": [ + "provider", + "apiKey" + ] + }, + "CreateGoogleCalendarOAuth2ClientCredentialDTO": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "enum": [ + "google.calendar.oauth2-client" + ] + }, + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + }, + "required": [ + "provider" ] }, - "CreateXAiCredentialDTO": { + "CreateGoogleCalendarOAuth2AuthorizationCredentialDTO": { "type": "object", "properties": { "provider": { "type": "string", - "description": "This is the api key for Grok in XAi's console. Get it from here: https://console.x.ai", "enum": [ - "xai" + "google.calendar.oauth2-authorization" ] }, - "apiKey": { + "authorizationId": { "type": "string", - "maxLength": 10000, - "description": "This is not returned in the API." + "description": "The authorization ID for the OAuth2 authorization" }, "name": { "type": "string", @@ -12311,7 +14810,7 @@ }, "required": [ "provider", - "apiKey" + "authorizationId" ] }, "TransferAssistantHookAction": { @@ -12342,6 +14841,52 @@ "type" ] }, + "GoogleVoicemailDetectionPlan": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the provider to use for voicemail detection.", + "enum": [ + "google" + ] + }, + "voicemailExpectedDurationSeconds": { + "type": "number", + "description": "This is how long should we listen in order to determine if we were sent to voicemail or not?\n\n@default 15", + "minimum": 5, + "maximum": 60, + "default": 25 + } + }, + "required": [ + "provider", + "voicemailExpectedDurationSeconds" + ] + }, + "OpenAIVoicemailDetectionPlan": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the provider to use for voicemail detection.", + "enum": [ + "openai" + ] + }, + "voicemailExpectedDurationSeconds": { + "type": "number", + "description": "This is how long should we listen in order to determine if we were sent to voicemail or not?\n\n@default 15", + "minimum": 5, + "maximum": 60, + "default": 25 + } + }, + "required": [ + "provider", + "voicemailExpectedDurationSeconds" + ] + }, "TwilioVoicemailDetectionPlan": { "type": "object", "properties": { @@ -12414,42 +14959,19 @@ "provider" ] }, - "GoogleVoicemailDetectionPlan": { - "type": "object", - "properties": { - "provider": { - "type": "string", - "description": "This is the provider to use for voicemail detection.", - "enum": [ - "google" - ] - }, - "voicemailExpectedDurationSeconds": { - "type": "number", - "description": "This is how long should we listen in order to determine if we were sent to voicemail or not?\n\n@default 15", - "minimum": 5, - "maximum": 60, - "default": 15 - } - }, - "required": [ - "provider", - "voicemailExpectedDurationSeconds" - ] - }, "CompliancePlan": { "type": "object", "properties": { "hipaaEnabled": { "type": "boolean", - "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.", + "description": "When this is enabled, no logs, recordings, or transcriptions will be stored.\nAt the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.", "example": { "hipaaEnabled": false } }, "pciEnabled": { "type": "boolean", - "description": "When this is enabled, the user will be restricted to use PCI-compliant providers, and no logs or transcripts are stored. At the end of the call, you will receive an end-of-call-report message to store on your server. Defaults to false.", + "description": "When this is enabled, the user will be restricted to use PCI-compliant providers, and no logs or transcripts are stored.\nAt the end of the call, you will receive an end-of-call-report message to store on your server. Defaults to false.", "example": { "pciEnabled": false } @@ -12486,6 +15008,27 @@ } } }, + "StructuredDataMultiPlan": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "This is the key of the structured data plan in the catalog." + }, + "plan": { + "description": "This is an individual structured data plan in the catalog.", + "allOf": [ + { + "$ref": "#/components/schemas/StructuredDataPlan" + } + ] + } + }, + "required": [ + "key", + "plan" + ] + }, "SuccessEvaluationPlan": { "type": "object", "properties": { @@ -12541,6 +15084,13 @@ } ] }, + "structuredDataMultiPlan": { + "description": "This is an array of structured data plan catalogs. Each entry includes a `key` and a `plan` for generating the structured data from the call. This outputs to `call.analysis.structuredDataMulti`.", + "type": "array", + "items": { + "$ref": "#/components/schemas/StructuredDataMultiPlan" + } + }, "successEvaluationPlan": { "description": "This is the plan for generating the success evaluation of the call. This outputs to `call.analysis.successEvaluation`.", "allOf": [ @@ -12551,61 +15101,6 @@ } } }, - "TranscriptPlan": { - "type": "object", - "properties": { - "enabled": { - "type": "boolean", - "description": "This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true.\n\n@default true", - "example": true - }, - "assistantName": { - "type": "string", - "description": "This is the name of the assistant in the transcript. Defaults to 'AI'.\n\nUsage:\n- If you want to change the name of the assistant in the transcript, set this. Example, here is what the transcript would look like with `assistantName` set to 'Buyer':\n```\nUser: Hello, how are you?\nBuyer: I'm fine.\nUser: Do you want to buy a car?\nBuyer: No.\n```\n\n@default 'AI'" - }, - "userName": { - "type": "string", - "description": "This is the name of the user in the transcript. Defaults to 'User'.\n\nUsage:\n- If you want to change the name of the user in the transcript, set this. Example, here is what the transcript would look like with `userName` set to 'Seller':\n```\nSeller: Hello, how are you?\nAI: I'm fine.\nSeller: Do you want to buy a car?\nAI: No.\n```\n\n@default 'User'" - } - } - }, - "ArtifactPlan": { - "type": "object", - "properties": { - "recordingEnabled": { - "type": "boolean", - "description": "This determines whether assistant's calls are recorded. Defaults to true.\n\nUsage:\n- If you don't want to record the calls, set this to false.\n- If you want to record the calls when `assistant.hipaaEnabled` (deprecated) or `assistant.compliancePlan.hipaaEnabled` explicity set this to true and make sure to provide S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nYou can find the recording at `call.artifact.recordingUrl` and `call.artifact.stereoRecordingUrl` after the call is ended.\n\n@default true", - "example": true - }, - "videoRecordingEnabled": { - "type": "boolean", - "description": "This determines whether the video is recorded during the call. Defaults to false. Only relevant for `webCall` type.\n\nYou can find the video recording at `call.artifact.videoRecordingUrl` after the call is ended.\n\n@default false", - "example": false - }, - "pcapEnabled": { - "type": "boolean", - "description": "This determines whether the SIP packet capture is enabled. Defaults to true. Only relevant for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`.\n\nYou can find the packet capture at `call.artifact.pcapUrl` after the call is ended.\n\n@default true", - "example": true - }, - "pcapS3PathPrefix": { - "type": "string", - "description": "This is the path where the SIP packet capture will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nIf credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it.\n\nUsage:\n- If you want to upload the packet capture to a specific path, set this to the path. Example: `/my-assistant-captures`.\n- If you want to upload the packet capture to the root of the bucket, set this to `/`.\n\n@default '/'", - "example": "/pcaps" - }, - "transcriptPlan": { - "description": "This is the plan for `call.artifact.transcript`. To disable, set `transcriptPlan.enabled` to false.", - "allOf": [ - { - "$ref": "#/components/schemas/TranscriptPlan" - } - ] - }, - "recordingPath": { - "type": "string", - "description": "This is the path where the recording will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard.\n\nIf credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it.\n\nUsage:\n- If you want to upload the recording to a specific path, set this to the path. Example: `/my-assistant-recordings`.\n- If you want to upload the recording to the root of the bucket, set this to `/`.\n\n@default '/'" - } - } - }, "MessagePlan": { "type": "object", "properties": { @@ -12749,6 +15244,48 @@ "timeoutSeconds" ] }, + "VapiSmartEndpointingPlan": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the provider for the smart endpointing plan.", + "enum": [ + "vapi", + "livekit" + ], + "example": "vapi" + } + }, + "required": [ + "provider" + ] + }, + "LivekitSmartEndpointingPlan": { + "type": "object", + "properties": { + "provider": { + "type": "string", + "description": "This is the provider for the smart endpointing plan.", + "enum": [ + "vapi", + "livekit" + ], + "example": "livekit" + }, + "waitFunction": { + "type": "string", + "description": "This expression describes how long the bot will wait to start speaking based on the likelihood that the user has reached an endpoint.\n\nThis is a millisecond valued function. It maps probabilities (real numbers on [0,1]) to seconds that the user should wait ([0, \\infty]). Any negative values that are returned are set to zero (the bot can't start talking in the past).\n\nA probability of zero represents very high confidence that the caller has stopped speaking, and would like the bot to speak to them. A probability of one represents very high confidence that the caller is still speaking.\n\nUnder the hood, this is parsed into a mathjs expression. Whatever you use to write your expression needs to be valid with respect to mathjs\n\n@default \"200 + 8000 * x\"", + "examples": [ + "200 + 8000 * x", + "4000 * (1 - cos(pi * x))" + ] + } + }, + "required": [ + "provider" + ] + }, "TranscriptionEndpointingPlan": { "type": "object", "properties": { @@ -12786,13 +15323,26 @@ "example": 0.4 }, "smartEndpointingEnabled": { - "type": "boolean", - "description": "This determines if a customer speech is considered done (endpointing) using a Vapi custom-trained model on customer's speech. This is good for middle-of-thought detection.\n\nOnce an endpoint is triggered, the request is sent to `assistant.model`.\n\nUsage:\n- If your conversations are long-form and you want assistant to wait smartly even if customer pauses for a bit to think, you can use this instead.\n\nThis overrides `transcriptionEndpointingPlan`.\n\n@default false", - "example": false + "type": "object", + "example": false, + "deprecated": true + }, + "smartEndpointingPlan": { + "description": "This is the plan for smart endpointing. Pick between Vapi smart endpointing or LiveKit smart endpointing (or nothing). We strongly recommend using livekit endpointing when working in English. LiveKit endpointing is not supported in other languages, yet.\n\nIf this is set, it will override and take precedence over `transcriptionEndpointingPlan`.\nThis plan will still be overridden by any matching `customEndpointingRules`.", + "oneOf": [ + { + "$ref": "#/components/schemas/VapiSmartEndpointingPlan", + "title": "Vapi" + }, + { + "$ref": "#/components/schemas/LivekitSmartEndpointingPlan", + "title": "Livekit" + } + ] }, "customEndpointingRules": { "type": "array", - "description": "These are the custom endpointing rules to set an endpointing timeout based on a regex on the customer's speech or the assistant's last message.\n\nUsage:\n- If you have yes/no questions like \"are you interested in a loan?\", you can set a shorter timeout.\n- If you have questions where the customer may pause to look up information like \"what's my account number?\", you can set a longer timeout.\n- If you want to wait longer while customer is enumerating a list of numbers, you can set a longer timeout.\n\nThese override `transcriptionEndpointingPlan` and `smartEndpointingEnabled` when a rule is matched.\n\nThe rules are evaluated in order and the first one that matches will be used.\n\n@default []", + "description": "These are the custom endpointing rules to set an endpointing timeout based on a regex on the customer's speech or the assistant's last message.\n\nUsage:\n- If you have yes/no questions like \"are you interested in a loan?\", you can set a shorter timeout.\n- If you have questions where the customer may pause to look up information like \"what's my account number?\", you can set a longer timeout.\n- If you want to wait longer while customer is enumerating a list of numbers, you can set a longer timeout.\n\nThese rules have the highest precedence and will override both `smartEndpointingPlan` and `transcriptionEndpointingPlan` when a rule is matched.\n\nThe rules are evaluated in order and the first one that matches will be used.\n\nOrder of precedence for endpointing:\n1. customEndpointingRules (if any match)\n2. smartEndpointingPlan (if set)\n3. transcriptionEndpointingPlan\n\n@default []", "items": { "oneOf": [ { @@ -12811,7 +15361,7 @@ } }, "transcriptionEndpointingPlan": { - "description": "This determines how a customer speech is considered done (endpointing) using the transcription of customer's speech.\n\nOnce an endpoint is triggered, the request is sent to `assistant.model`.", + "description": "This determines how a customer speech is considered done (endpointing) using the transcription of customer's speech.\n\nOnce an endpoint is triggered, the request is sent to `assistant.model`.\n\nNote: This plan is only used if `smartEndpointingPlan` is not set. If both are provided, `smartEndpointingPlan` takes precedence.\nThis plan will also be overridden by any matching `customEndpointingRules`.", "allOf": [ { "$ref": "#/components/schemas/TranscriptionEndpointingPlan" @@ -13081,13 +15631,29 @@ "$ref": "#/components/schemas/DeepgramTranscriber", "title": "Deepgram" }, + { + "$ref": "#/components/schemas/ElevenLabsTranscriber", + "title": "ElevenLabs" + }, { "$ref": "#/components/schemas/GladiaTranscriber", "title": "Gladia" }, + { + "$ref": "#/components/schemas/SpeechmaticsTranscriber", + "title": "Speechmatics" + }, { "$ref": "#/components/schemas/TalkscriberTranscriber", "title": "Talkscriber" + }, + { + "$ref": "#/components/schemas/GoogleTranscriber", + "title": "Google" + }, + { + "$ref": "#/components/schemas/OpenAITranscriber", + "title": "OpenAI" } ] }, @@ -13102,6 +15668,10 @@ "$ref": "#/components/schemas/AnthropicModel", "title": "Anthropic" }, + { + "$ref": "#/components/schemas/CerebrasModel", + "title": "Cerebras" + }, { "$ref": "#/components/schemas/CustomLLMModel", "title": "CustomLLM" @@ -13110,6 +15680,10 @@ "$ref": "#/components/schemas/DeepInfraModel", "title": "DeepInfra" }, + { + "$ref": "#/components/schemas/DeepSeekModel", + "title": "DeepSeek" + }, { "$ref": "#/components/schemas/GoogleModel", "title": "Google" @@ -13122,10 +15696,6 @@ "$ref": "#/components/schemas/InflectionAIModel", "title": "InflectionAI" }, - { - "$ref": "#/components/schemas/DeepSeekModel", - "title": "DeepSeek" - }, { "$ref": "#/components/schemas/OpenAIModel", "title": "OpenAI" @@ -13175,13 +15745,17 @@ "$ref": "#/components/schemas/ElevenLabsVoice", "title": "ElevenLabs" }, + { + "$ref": "#/components/schemas/HumeVoice", + "title": "Hume" + }, { "$ref": "#/components/schemas/LMNTVoice", "title": "LMNT" }, { - "$ref": "#/components/schemas/NeetsVoice", - "title": "Neets" + "$ref": "#/components/schemas/NeuphonicVoice", + "title": "Neuphonic" }, { "$ref": "#/components/schemas/OpenAIVoice", @@ -13202,6 +15776,10 @@ { "$ref": "#/components/schemas/TavusVoice", "title": "TavusVoice" + }, + { + "$ref": "#/components/schemas/VapiVoice", + "title": "Vapi" } ], "default": { @@ -13214,6 +15792,10 @@ "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.", "example": "Hello! How can I help you today?" }, + "firstMessageInterruptionsEnabled": { + "type": "boolean", + "default": false + }, "firstMessageMode": { "type": "string", "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'", @@ -13225,8 +15807,21 @@ "example": "assistant-speaks-first" }, "voicemailDetection": { - "type": "object", - "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not." + "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.", + "oneOf": [ + { + "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan", + "title": "Google" + }, + { + "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan", + "title": "OpenAI" + }, + { + "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan", + "title": "Twilio" + } + ] }, "clientMessages": { "type": "array", @@ -13245,7 +15840,8 @@ "tool-calls-result", "transfer-update", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ], "example": [ "conversation-update", @@ -13258,9 +15854,10 @@ "transcript", "tool-calls", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ], - "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input. You can check the shape of the messages in ClientMessage schema.", + "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.", "items": { "type": "string", "enum": [ @@ -13278,7 +15875,8 @@ "tool-calls-result", "transfer-update", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ] } }, @@ -13353,13 +15951,23 @@ "example": 600 }, "backgroundSound": { - "type": "string", - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.", - "enum": [ - "off", - "office" - ], - "example": "office" + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "maxLength": 1000, + "oneOf": [ + { + "type": "enum", + "enum": [ + "off", + "office" + ], + "example": "office" + }, + { + "type": "string", + "format": "uri", + "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3" + } + ] }, "backgroundDenoisingEnabled": { "type": "boolean", @@ -13383,6 +15991,20 @@ ] } }, + "observabilityPlan": { + "description": "This is the plan for observability configuration of assistant's calls.\nCurrently supports Langfuse for tracing and monitoring.", + "oneOf": [ + { + "$ref": "#/components/schemas/LangfuseObservabilityPlan", + "title": "Langfuse" + } + ], + "allOf": [ + { + "$ref": "#/components/schemas/LangfuseObservabilityPlan" + } + ] + }, "credentials": { "type": "array", "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.", @@ -13400,14 +16022,14 @@ "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO", "title": "AssemblyAICredential" }, - { - "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO", - "title": "AzureOpenAICredential" - }, { "$ref": "#/components/schemas/CreateAzureCredentialDTO", "title": "AzureCredential" }, + { + "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO", + "title": "AzureOpenAICredential" + }, { "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO", "title": "ByoSipTrunkCredential" @@ -13416,6 +16038,10 @@ "$ref": "#/components/schemas/CreateCartesiaCredentialDTO", "title": "CartesiaCredential" }, + { + "$ref": "#/components/schemas/CreateCerebrasCredentialDTO", + "title": "CerebrasCredential" + }, { "$ref": "#/components/schemas/CreateCloudflareCredentialDTO", "title": "CloudflareCredential" @@ -13452,10 +16078,22 @@ "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO", "title": "GhlCredential" }, + { + "$ref": "#/components/schemas/CreateGoogleCredentialDTO", + "title": "GoogleCredential" + }, { "$ref": "#/components/schemas/CreateGroqCredentialDTO", "title": "GroqCredential" }, + { + "$ref": "#/components/schemas/CreateHumeCredentialDTO", + "title": "HumeCredential" + }, + { + "$ref": "#/components/schemas/CreateInflectionAICredentialDTO", + "title": "InflectionAICredential" + }, { "$ref": "#/components/schemas/CreateLangfuseCredentialDTO", "title": "LangfuseCredential" @@ -13468,6 +16106,14 @@ "$ref": "#/components/schemas/CreateMakeCredentialDTO", "title": "MakeCredential" }, + { + "$ref": "#/components/schemas/CreateMistralCredentialDTO", + "title": "MistralCredential" + }, + { + "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO", + "title": "NeuphonicCredential" + }, { "$ref": "#/components/schemas/CreateOpenAICredentialDTO", "title": "OpenAICredential" @@ -13496,14 +16142,18 @@ "$ref": "#/components/schemas/CreateS3CredentialDTO", "title": "S3Credential" }, - { - "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", - "title": "SupabaseCredential" - }, { "$ref": "#/components/schemas/CreateSmallestAICredentialDTO", "title": "SmallestAICredential" }, + { + "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO", + "title": "SpeechmaticsCredential" + }, + { + "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", + "title": "SupabaseCredential" + }, { "$ref": "#/components/schemas/CreateTavusCredentialDTO", "title": "TavusCredential" @@ -13512,6 +16162,10 @@ "$ref": "#/components/schemas/CreateTogetherAICredentialDTO", "title": "TogetherAICredential" }, + { + "$ref": "#/components/schemas/CreateTrieveCredentialDTO", + "title": "TrieveCredential" + }, { "$ref": "#/components/schemas/CreateTwilioCredentialDTO", "title": "TwilioCredential" @@ -13527,6 +16181,18 @@ { "$ref": "#/components/schemas/CreateXAiCredentialDTO", "title": "XAiCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", + "title": "GoogleCalendarOAuth2ClientCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", + "title": "GoogleCalendarOAuth2AuthorizationCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", + "title": "GoogleSheetsOAuth2AuthorizationCredential" } ] } @@ -13659,13 +16325,29 @@ "$ref": "#/components/schemas/DeepgramTranscriber", "title": "Deepgram" }, + { + "$ref": "#/components/schemas/ElevenLabsTranscriber", + "title": "ElevenLabs" + }, { "$ref": "#/components/schemas/GladiaTranscriber", "title": "Gladia" }, + { + "$ref": "#/components/schemas/SpeechmaticsTranscriber", + "title": "Speechmatics" + }, { "$ref": "#/components/schemas/TalkscriberTranscriber", "title": "Talkscriber" + }, + { + "$ref": "#/components/schemas/GoogleTranscriber", + "title": "Google" + }, + { + "$ref": "#/components/schemas/OpenAITranscriber", + "title": "OpenAI" } ] }, @@ -13680,6 +16362,10 @@ "$ref": "#/components/schemas/AnthropicModel", "title": "Anthropic" }, + { + "$ref": "#/components/schemas/CerebrasModel", + "title": "Cerebras" + }, { "$ref": "#/components/schemas/CustomLLMModel", "title": "CustomLLM" @@ -13688,6 +16374,10 @@ "$ref": "#/components/schemas/DeepInfraModel", "title": "DeepInfra" }, + { + "$ref": "#/components/schemas/DeepSeekModel", + "title": "DeepSeek" + }, { "$ref": "#/components/schemas/GoogleModel", "title": "Google" @@ -13700,10 +16390,6 @@ "$ref": "#/components/schemas/InflectionAIModel", "title": "InflectionAI" }, - { - "$ref": "#/components/schemas/DeepSeekModel", - "title": "DeepSeek" - }, { "$ref": "#/components/schemas/OpenAIModel", "title": "OpenAI" @@ -13753,13 +16439,17 @@ "$ref": "#/components/schemas/ElevenLabsVoice", "title": "ElevenLabs" }, + { + "$ref": "#/components/schemas/HumeVoice", + "title": "Hume" + }, { "$ref": "#/components/schemas/LMNTVoice", "title": "LMNT" }, { - "$ref": "#/components/schemas/NeetsVoice", - "title": "Neets" + "$ref": "#/components/schemas/NeuphonicVoice", + "title": "Neuphonic" }, { "$ref": "#/components/schemas/OpenAIVoice", @@ -13780,6 +16470,10 @@ { "$ref": "#/components/schemas/TavusVoice", "title": "TavusVoice" + }, + { + "$ref": "#/components/schemas/VapiVoice", + "title": "Vapi" } ], "default": { @@ -13792,6 +16486,10 @@ "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.", "example": "Hello! How can I help you today?" }, + "firstMessageInterruptionsEnabled": { + "type": "boolean", + "default": false + }, "firstMessageMode": { "type": "string", "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'", @@ -13803,8 +16501,21 @@ "example": "assistant-speaks-first" }, "voicemailDetection": { - "type": "object", - "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not." + "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.", + "oneOf": [ + { + "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan", + "title": "Google" + }, + { + "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan", + "title": "OpenAI" + }, + { + "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan", + "title": "Twilio" + } + ] }, "clientMessages": { "type": "array", @@ -13823,7 +16534,8 @@ "tool-calls-result", "transfer-update", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ], "example": [ "conversation-update", @@ -13836,9 +16548,10 @@ "transcript", "tool-calls", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ], - "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input. You can check the shape of the messages in ClientMessage schema.", + "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.", "items": { "type": "string", "enum": [ @@ -13856,7 +16569,8 @@ "tool-calls-result", "transfer-update", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ] } }, @@ -13931,13 +16645,23 @@ "example": 600 }, "backgroundSound": { - "type": "string", - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.", - "enum": [ - "off", - "office" - ], - "example": "office" + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "maxLength": 1000, + "oneOf": [ + { + "type": "enum", + "enum": [ + "off", + "office" + ], + "example": "office" + }, + { + "type": "string", + "format": "uri", + "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3" + } + ] }, "backgroundDenoisingEnabled": { "type": "boolean", @@ -13961,6 +16685,20 @@ ] } }, + "observabilityPlan": { + "description": "This is the plan for observability configuration of assistant's calls.\nCurrently supports Langfuse for tracing and monitoring.", + "oneOf": [ + { + "$ref": "#/components/schemas/LangfuseObservabilityPlan", + "title": "Langfuse" + } + ], + "allOf": [ + { + "$ref": "#/components/schemas/LangfuseObservabilityPlan" + } + ] + }, "credentials": { "type": "array", "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.", @@ -13978,14 +16716,14 @@ "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO", "title": "AssemblyAICredential" }, - { - "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO", - "title": "AzureOpenAICredential" - }, { "$ref": "#/components/schemas/CreateAzureCredentialDTO", "title": "AzureCredential" }, + { + "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO", + "title": "AzureOpenAICredential" + }, { "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO", "title": "ByoSipTrunkCredential" @@ -13994,6 +16732,10 @@ "$ref": "#/components/schemas/CreateCartesiaCredentialDTO", "title": "CartesiaCredential" }, + { + "$ref": "#/components/schemas/CreateCerebrasCredentialDTO", + "title": "CerebrasCredential" + }, { "$ref": "#/components/schemas/CreateCloudflareCredentialDTO", "title": "CloudflareCredential" @@ -14030,10 +16772,22 @@ "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO", "title": "GhlCredential" }, + { + "$ref": "#/components/schemas/CreateGoogleCredentialDTO", + "title": "GoogleCredential" + }, { "$ref": "#/components/schemas/CreateGroqCredentialDTO", "title": "GroqCredential" }, + { + "$ref": "#/components/schemas/CreateHumeCredentialDTO", + "title": "HumeCredential" + }, + { + "$ref": "#/components/schemas/CreateInflectionAICredentialDTO", + "title": "InflectionAICredential" + }, { "$ref": "#/components/schemas/CreateLangfuseCredentialDTO", "title": "LangfuseCredential" @@ -14046,6 +16800,14 @@ "$ref": "#/components/schemas/CreateMakeCredentialDTO", "title": "MakeCredential" }, + { + "$ref": "#/components/schemas/CreateMistralCredentialDTO", + "title": "MistralCredential" + }, + { + "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO", + "title": "NeuphonicCredential" + }, { "$ref": "#/components/schemas/CreateOpenAICredentialDTO", "title": "OpenAICredential" @@ -14074,14 +16836,18 @@ "$ref": "#/components/schemas/CreateS3CredentialDTO", "title": "S3Credential" }, - { - "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", - "title": "SupabaseCredential" - }, { "$ref": "#/components/schemas/CreateSmallestAICredentialDTO", "title": "SmallestAICredential" }, + { + "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO", + "title": "SpeechmaticsCredential" + }, + { + "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", + "title": "SupabaseCredential" + }, { "$ref": "#/components/schemas/CreateTavusCredentialDTO", "title": "TavusCredential" @@ -14090,6 +16856,10 @@ "$ref": "#/components/schemas/CreateTogetherAICredentialDTO", "title": "TogetherAICredential" }, + { + "$ref": "#/components/schemas/CreateTrieveCredentialDTO", + "title": "TrieveCredential" + }, { "$ref": "#/components/schemas/CreateTwilioCredentialDTO", "title": "TwilioCredential" @@ -14104,537 +16874,298 @@ }, { "$ref": "#/components/schemas/CreateXAiCredentialDTO", - "title": "XAiCredential" - } - ] - } - }, - "variableValues": { - "type": "object", - "description": "These are values that will be used to replace the template variables in the assistant messages and other text-based fields.\nThis uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html\n\nSo for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`.\n`{{\"now\" | date: \"%b %d, %Y, %I:%M %p\", \"America/New_York\"}}` will be replaced with the current date and time in New York.\n Some Vapi reserved defaults:\n - *customer* - the customer object" - }, - "name": { - "type": "string", - "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.", - "maxLength": 40 - }, - "voicemailMessage": { - "type": "string", - "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.", - "maxLength": 1000 - }, - "endCallMessage": { - "type": "string", - "description": "This is the message that the assistant will say if it ends the call.\n\nIf unspecified, it will hang up without saying anything.", - "maxLength": 1000 - }, - "endCallPhrases": { - "description": "This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.", - "type": "array", - "items": { - "type": "string", - "maxLength": 140, - "minLength": 2 - } - }, - "compliancePlan": { - "$ref": "#/components/schemas/CompliancePlan" - }, - "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the assistant." - }, - "analysisPlan": { - "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.", - "allOf": [ - { - "$ref": "#/components/schemas/AnalysisPlan" - } - ] - }, - "artifactPlan": { - "description": "This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.\n\nNote: `recordingEnabled` is currently at the root level. It will be moved to `artifactPlan` in the future, but will remain backwards compatible.", - "allOf": [ - { - "$ref": "#/components/schemas/ArtifactPlan" - } - ] - }, - "messagePlan": { - "description": "This is the plan for static predefined messages that can be spoken by the assistant during the call, like `idleMessages`.\n\nNote: `firstMessage`, `voicemailMessage`, and `endCallMessage` are currently at the root level. They will be moved to `messagePlan` in the future, but will remain backwards compatible.", - "allOf": [ - { - "$ref": "#/components/schemas/MessagePlan" - } - ] - }, - "startSpeakingPlan": { - "description": "This is the plan for when the assistant should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.", - "allOf": [ - { - "$ref": "#/components/schemas/StartSpeakingPlan" - } - ] - }, - "stopSpeakingPlan": { - "description": "This is the plan for when assistant should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.", - "allOf": [ - { - "$ref": "#/components/schemas/StopSpeakingPlan" - } - ] - }, - "monitorPlan": { - "description": "This is the plan for real-time monitoring of the assistant's calls.\n\nUsage:\n- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`.\n\nNote, `serverMessages`, `clientMessages`, `serverUrl` and `serverUrlSecret` are currently at the root level but will be moved to `monitorPlan` in the future. Will remain backwards compatible", - "allOf": [ - { - "$ref": "#/components/schemas/MonitorPlan" - } - ] - }, - "credentialIds": { - "description": "These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.", - "type": "array", - "items": { - "type": "string" - } - }, - "server": { - "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] - }, - "hooks": { - "description": "This is a set of actions that will be performed on certain events.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AssistantHooks" + "title": "XAiCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", + "title": "GoogleCalendarOAuth2ClientCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", + "title": "GoogleCalendarOAuth2AuthorizationCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", + "title": "GoogleSheetsOAuth2AuthorizationCredential" + } + ] } }, - "keypadInputPlan": { - "$ref": "#/components/schemas/KeypadInputPlan" - } - } - }, - "SquadMemberDTO": { - "type": "object", - "properties": { - "assistantId": { - "type": "string", - "nullable": true, - "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead." - }, - "assistant": { - "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", - "allOf": [ - { - "$ref": "#/components/schemas/CreateAssistantDTO" - } - ] - }, - "assistantOverrides": { - "description": "This can be used to override the assistant's settings and provide values for it's template variables.", - "allOf": [ - { - "$ref": "#/components/schemas/AssistantOverrides" - } - ] + "variableValues": { + "type": "object", + "description": "These are values that will be used to replace the template variables in the assistant messages and other text-based fields.\nThis uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html\n\nSo for example, `{{ name }}` will be replaced with the value of `name` in `variableValues`.\n`{{\"now\" | date: \"%b %d, %Y, %I:%M %p\", \"America/New_York\"}}` will be replaced with the current date and time in New York.\n Some VAPI reserved defaults:\n - *customer* - the customer object" }, - "assistantDestinations": { - "description": "These are the others assistants that this assistant can transfer to.\n\nIf the assistant already has transfer call tool, these destinations are just appended to existing ones.", - "type": "array", - "items": { - "$ref": "#/components/schemas/TransferDestinationAssistant" - } - } - } - }, - "CreateSquadDTO": { - "type": "object", - "properties": { "name": { "type": "string", - "description": "This is the name of the squad." - }, - "members": { - "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SquadMemberDTO" - } - }, - "membersOverrides": { - "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.", - "allOf": [ - { - "$ref": "#/components/schemas/AssistantOverrides" - } - ] - } - }, - "required": [ - "members" - ] - }, - "ImportTwilioPhoneNumberDTO": { - "type": "object", - "properties": { - "fallbackDestination": { - "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.", - "oneOf": [ - { - "$ref": "#/components/schemas/TransferDestinationNumber", - "title": "NumberTransferDestination" - }, - { - "$ref": "#/components/schemas/TransferDestinationSip", - "title": "SipTransferDestination" - } - ] - }, - "twilioPhoneNumber": { - "type": "string", - "description": "These are the digits of the phone number you own on your Twilio.", - "deprecated": true + "description": "This is the name of the assistant.\n\nThis is required when you want to transfer between assistants in a call.", + "maxLength": 40 }, - "twilioAccountSid": { + "voicemailMessage": { "type": "string", - "description": "This is your Twilio Account SID that will be used to handle this phone number." + "description": "This is the message that the assistant will say if the call is forwarded to voicemail.\n\nIf unspecified, it will hang up.", + "maxLength": 1000 }, - "twilioAuthToken": { + "endCallMessage": { "type": "string", - "description": "This is the Twilio Auth Token that will be used to handle this phone number." + "description": "This is the message that the assistant will say if it ends the call.\n\nIf unspecified, it will hang up without saying anything.", + "maxLength": 1000 }, - "name": { - "type": "string", - "description": "This is the name of the phone number. This is just for your own reference.", - "maxLength": 40 + "endCallPhrases": { + "description": "This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive.", + "type": "array", + "items": { + "type": "string", + "maxLength": 140, + "minLength": 2 + } }, - "assistantId": { - "type": "string", - "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + "compliancePlan": { + "$ref": "#/components/schemas/CompliancePlan" }, - "squadId": { - "type": "string", - "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + "metadata": { + "type": "object", + "description": "This is for metadata you want to store on the assistant." }, - "server": { - "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", + "analysisPlan": { + "description": "This is the plan for analysis of assistant's calls. Stored in `call.analysis`.", "allOf": [ { - "$ref": "#/components/schemas/Server" + "$ref": "#/components/schemas/AnalysisPlan" } ] - } - }, - "required": [ - "twilioPhoneNumber", - "twilioAccountSid", - "twilioAuthToken" - ] - }, - "CreateCustomerDTO": { - "type": "object", - "properties": { - "numberE164CheckEnabled": { - "type": "boolean", - "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)", - "default": true - }, - "extension": { - "type": "string", - "description": "This is the extension that will be dialed after the call is answered.", - "maxLength": 10, - "example": null - }, - "number": { - "type": "string", - "description": "This is the number of the customer.", - "minLength": 3, - "maxLength": 40 - }, - "sipUri": { - "type": "string", - "description": "This is the SIP URI of the customer." - }, - "name": { - "type": "string", - "description": "This is the name of the customer. This is just for your own reference.\n\nFor SIP inbound calls, this is extracted from the `From` SIP header with format `\"Display Name\" `.", - "maxLength": 40 - } - } - }, - "CreateCallDTO": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "This is the name of the call. This is just for your own reference.", - "maxLength": 40 - }, - "assistantId": { - "type": "string", - "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead." }, - "assistant": { - "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", + "artifactPlan": { + "description": "This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`.\n\nNote: `recordingEnabled` is currently at the root level. It will be moved to `artifactPlan` in the future, but will remain backwards compatible.", "allOf": [ { - "$ref": "#/components/schemas/CreateAssistantDTO" + "$ref": "#/components/schemas/ArtifactPlan" } ] }, - "assistantOverrides": { - "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.", + "messagePlan": { + "description": "This is the plan for static predefined messages that can be spoken by the assistant during the call, like `idleMessages`.\n\nNote: `firstMessage`, `voicemailMessage`, and `endCallMessage` are currently at the root level. They will be moved to `messagePlan` in the future, but will remain backwards compatible.", "allOf": [ { - "$ref": "#/components/schemas/AssistantOverrides" + "$ref": "#/components/schemas/MessagePlan" } ] }, - "squadId": { - "type": "string", - "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead." - }, - "squad": { - "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.", + "startSpeakingPlan": { + "description": "This is the plan for when the assistant should start talking.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to start talking after the customer is done speaking.\n- The assistant is too fast to start talking after the customer is done speaking.\n- The assistant is so fast that it's actually interrupting the customer.", "allOf": [ { - "$ref": "#/components/schemas/CreateSquadDTO" + "$ref": "#/components/schemas/StartSpeakingPlan" } ] }, - "phoneNumberId": { - "type": "string", - "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." - }, - "phoneNumber": { - "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", + "stopSpeakingPlan": { + "description": "This is the plan for when assistant should stop talking on customer interruption.\n\nYou should configure this if you're running into these issues:\n- The assistant is too slow to recognize customer's interruption.\n- The assistant is too fast to recognize customer's interruption.\n- The assistant is getting interrupted by phrases that are just acknowledgments.\n- The assistant is getting interrupted by background noises.\n- The assistant is not properly stopping -- it starts talking right after getting interrupted.", "allOf": [ { - "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO" + "$ref": "#/components/schemas/StopSpeakingPlan" } ] }, - "customerId": { - "type": "string", - "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." - }, - "customer": { - "description": "This is the customer that will be called. To call an existing customer, use `customerId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", + "monitorPlan": { + "description": "This is the plan for real-time monitoring of the assistant's calls.\n\nUsage:\n- To enable live listening of the assistant's calls, set `monitorPlan.listenEnabled` to `true`.\n- To enable live control of the assistant's calls, set `monitorPlan.controlEnabled` to `true`.\n\nNote, `serverMessages`, `clientMessages`, `serverUrl` and `serverUrlSecret` are currently at the root level but will be moved to `monitorPlan` in the future. Will remain backwards compatible", "allOf": [ { - "$ref": "#/components/schemas/CreateCustomerDTO" + "$ref": "#/components/schemas/MonitorPlan" } ] - } - } - }, - "AnalysisCostBreakdown": { - "type": "object", - "properties": { - "summary": { - "type": "number", - "description": "This is the cost to summarize the call." - }, - "summaryPromptTokens": { - "type": "number", - "description": "This is the number of prompt tokens used to summarize the call." - }, - "summaryCompletionTokens": { - "type": "number", - "description": "This is the number of completion tokens used to summarize the call." - }, - "structuredData": { - "type": "number", - "description": "This is the cost to extract structured data from the call." - }, - "structuredDataPromptTokens": { - "type": "number", - "description": "This is the number of prompt tokens used to extract structured data from the call." }, - "structuredDataCompletionTokens": { - "type": "number", - "description": "This is the number of completion tokens used to extract structured data from the call." + "credentialIds": { + "description": "These are the credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can provide a subset using this.", + "type": "array", + "items": { + "type": "string" + } }, - "successEvaluation": { - "type": "number", - "description": "This is the cost to evaluate if the call was successful." + "server": { + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server.url\n2. phoneNumber.serverUrl\n3. org.serverUrl", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] }, - "successEvaluationPromptTokens": { - "type": "number", - "description": "This is the number of prompt tokens used to evaluate if the call was successful." + "hooks": { + "description": "This is a set of actions that will be performed on certain events.", + "type": "array", + "items": { + "$ref": "#/components/schemas/AssistantHooks" + } }, - "successEvaluationCompletionTokens": { - "type": "number", - "description": "This is the number of completion tokens used to evaluate if the call was successful." + "keypadInputPlan": { + "$ref": "#/components/schemas/KeypadInputPlan" } } }, - "CostBreakdown": { + "SquadMemberDTO": { "type": "object", "properties": { - "transport": { - "type": "number", - "description": "This is the cost of the transport provider, like Twilio or Vonage." - }, - "stt": { - "type": "number", - "description": "This is the cost of the speech-to-text service." - }, - "llm": { - "type": "number", - "description": "This is the cost of the language model." - }, - "tts": { - "type": "number", - "description": "This is the cost of the text-to-speech service." - }, - "vapi": { - "type": "number", - "description": "This is the cost of Vapi." - }, - "total": { - "type": "number", - "description": "This is the total cost of the call." - }, - "llmPromptTokens": { - "type": "number", - "description": "This is the LLM prompt tokens used for the call." - }, - "llmCompletionTokens": { - "type": "number", - "description": "This is the LLM completion tokens used for the call." + "assistantId": { + "type": "string", + "nullable": true, + "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead." }, - "ttsCharacters": { - "type": "number", - "description": "This is the TTS characters used for the call." + "assistant": { + "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", + "allOf": [ + { + "$ref": "#/components/schemas/CreateAssistantDTO" + } + ] }, - "analysisCostBreakdown": { - "description": "This is the cost of the analysis.", + "assistantOverrides": { + "description": "This can be used to override the assistant's settings and provide values for it's template variables.", "allOf": [ { - "$ref": "#/components/schemas/AnalysisCostBreakdown" + "$ref": "#/components/schemas/AssistantOverrides" } ] + }, + "assistantDestinations": { + "description": "These are the others assistants that this assistant can transfer to.\n\nIf the assistant already has transfer call tool, these destinations are just appended to existing ones.", + "type": "array", + "items": { + "$ref": "#/components/schemas/TransferDestinationAssistant" + } } } }, - "Analysis": { + "CreateSquadDTO": { "type": "object", "properties": { - "summary": { + "name": { "type": "string", - "description": "This is the summary of the call. Customize by setting `assistant.analysisPlan.summaryPrompt`." + "description": "This is the name of the squad." }, - "structuredData": { - "type": "object", - "description": "This is the structured data extracted from the call. Customize by setting `assistant.analysisPlan.structuredDataPrompt` and/or `assistant.analysisPlan.structuredDataSchema`." + "members": { + "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SquadMemberDTO" + } }, - "successEvaluation": { - "type": "string", - "description": "This is the evaluation of the call. Customize by setting `assistant.analysisPlan.successEvaluationPrompt` and/or `assistant.analysisPlan.successEvaluationRubric`." + "membersOverrides": { + "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.", + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] } - } + }, + "required": [ + "members" + ] }, - "Monitor": { + "ImportTwilioPhoneNumberDTO": { "type": "object", "properties": { - "listenUrl": { + "fallbackDestination": { + "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.", + "oneOf": [ + { + "$ref": "#/components/schemas/TransferDestinationNumber", + "title": "NumberTransferDestination" + }, + { + "$ref": "#/components/schemas/TransferDestinationSip", + "title": "SipTransferDestination" + } + ] + }, + "twilioPhoneNumber": { "type": "string", - "description": "This is the URL where the assistant's calls can be listened to in real-time. To enable, set `assistant.monitorPlan.listenEnabled` to `true`." + "description": "These are the digits of the phone number you own on your Twilio.", + "deprecated": true }, - "controlUrl": { + "twilioAccountSid": { "type": "string", - "description": "This is the URL where the assistant's calls can be controlled in real-time. To enable, set `assistant.monitorPlan.controlEnabled` to `true`." - } - } - }, - "Artifact": { - "type": "object", - "properties": { - "messages": { - "type": "array", - "description": "These are the messages that were spoken during the call.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/UserMessage", - "title": "UserMessage" - }, - { - "$ref": "#/components/schemas/SystemMessage", - "title": "SystemMessage" - }, - { - "$ref": "#/components/schemas/BotMessage", - "title": "BotMessage" - }, - { - "$ref": "#/components/schemas/ToolCallMessage", - "title": "ToolCallMessage" - }, - { - "$ref": "#/components/schemas/ToolCallResultMessage", - "title": "ToolCallResultMessage" - } - ] - } + "description": "This is your Twilio Account SID that will be used to handle this phone number." }, - "messagesOpenAIFormatted": { - "description": "These are the messages that were spoken during the call, formatted for OpenAI.", - "type": "array", - "items": { - "$ref": "#/components/schemas/OpenAIMessage" - } + "twilioAuthToken": { + "type": "string", + "description": "This is the Twilio Auth Token that will be used to handle this phone number." }, - "recordingUrl": { + "name": { "type": "string", - "description": "This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`." + "description": "This is the name of the phone number. This is just for your own reference.", + "maxLength": 40 }, - "stereoRecordingUrl": { + "assistantId": { "type": "string", - "description": "This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`." + "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." }, - "videoRecordingUrl": { + "squadId": { "type": "string", - "description": "This is video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`." + "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." }, - "videoRecordingStartDelaySeconds": { - "type": "number", - "description": "This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps." + "server": { + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + } + }, + "required": [ + "twilioPhoneNumber", + "twilioAccountSid", + "twilioAuthToken" + ] + }, + "CreateCustomerDTO": { + "type": "object", + "properties": { + "numberE164CheckEnabled": { + "type": "boolean", + "description": "This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it.\n\nUse cases:\n- `false`: To allow non-E164 numbers like `+001234567890`, `1234`, or `abc`. This is useful for dialing out to non-E164 numbers on your SIP trunks.\n- `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls.\n\nIf `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\\+?[a-zA-Z0-9]+$/`).\n\n@default true (E164 check is enabled)", + "default": true }, - "transcript": { + "extension": { "type": "string", - "description": "This is the transcript of the call. This is derived from `artifact.messages` but provided for convenience." + "description": "This is the extension that will be dialed after the call is answered.", + "maxLength": 10, + "example": null }, - "pcapUrl": { + "number": { "type": "string", - "description": "This is the packet capture url for the call. This is only available for `phone` type calls where phone number's provider is `vapi` or `byo-phone-number`." + "description": "This is the number of the customer.", + "minLength": 3, + "maxLength": 40 + }, + "sipUri": { + "type": "string", + "description": "This is the SIP URI of the customer." + }, + "name": { + "type": "string", + "description": "This is the name of the customer. This is just for your own reference.\n\nFor SIP inbound calls, this is extracted from the `From` SIP header with format `\"Display Name\" `.", + "maxLength": 40 } } }, - "Transport": { + "SchedulePlan": { "type": "object", "properties": { - "provider": { + "earliestAt": { + "format": "date-time", "type": "string", - "description": "This is the provider used for the call.", - "enum": [ - "twilio", - "vonage", - "vapi", - "daily" - ] - }, - "assistantVideoEnabled": { - "type": "boolean", - "description": "This is determines whether the assistant will have video enabled.\n\nOnly relevant for `webCall` type." + "description": "This is the ISO 8601 date-time string of the earliest time the call can be scheduled." + }, + "latestAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of the latest time the call can be scheduled." } - } + }, + "required": [ + "earliestAt" + ] }, "Call": { "type": "object", @@ -14717,7 +17248,8 @@ "enum": [ "twilio", "vonage", - "vapi" + "vapi", + "telnyx" ] }, "phoneCallTransport": { @@ -14732,6 +17264,7 @@ "type": "string", "description": "This is the status of the call.", "enum": [ + "scheduled", "queued", "ringing", "in-progress", @@ -14776,35 +17309,74 @@ "pipeline-error-lmnt-voice-failed", "pipeline-error-azure-voice-failed", "pipeline-error-rime-ai-voice-failed", - "pipeline-error-neets-voice-failed", "pipeline-error-smallest-ai-voice-failed", "pipeline-error-neuphonic-voice-failed", "pipeline-error-hume-voice-failed", - "pipeline-error-deepgram-transcriber-failed", - "pipeline-error-gladia-transcriber-failed", - "pipeline-error-speechmatics-transcriber-failed", - "pipeline-error-assembly-ai-transcriber-failed", - "pipeline-error-talkscriber-transcriber-failed", - "pipeline-error-azure-speech-transcriber-failed", + "pipeline-error-sesame-voice-failed", + "pipeline-error-tavus-video-failed", + "call.in-progress.error-vapifault-openai-voice-failed", + "call.in-progress.error-vapifault-cartesia-voice-failed", + "call.in-progress.error-vapifault-deepgram-voice-failed", + "call.in-progress.error-vapifault-eleven-labs-voice-failed", + "call.in-progress.error-vapifault-playht-voice-failed", + "call.in-progress.error-vapifault-lmnt-voice-failed", + "call.in-progress.error-vapifault-azure-voice-failed", + "call.in-progress.error-vapifault-rime-ai-voice-failed", + "call.in-progress.error-vapifault-smallest-ai-voice-failed", + "call.in-progress.error-vapifault-neuphonic-voice-failed", + "call.in-progress.error-vapifault-hume-voice-failed", + "call.in-progress.error-vapifault-sesame-voice-failed", + "call.in-progress.error-vapifault-tavus-video-failed", "pipeline-error-vapi-llm-failed", "pipeline-error-vapi-400-bad-request-validation-failed", "pipeline-error-vapi-401-unauthorized", "pipeline-error-vapi-403-model-access-denied", "pipeline-error-vapi-429-exceeded-quota", "pipeline-error-vapi-500-server-error", + "call.in-progress.error-vapifault-vapi-llm-failed", + "call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-vapi-401-unauthorized", + "call.in-progress.error-vapifault-vapi-403-model-access-denied", + "call.in-progress.error-vapifault-vapi-429-exceeded-quota", + "call.in-progress.error-vapifault-vapi-500-server-error", + "pipeline-error-deepgram-transcriber-failed", + "call.in-progress.error-vapifault-deepgram-transcriber-failed", + "pipeline-error-gladia-transcriber-failed", + "call.in-progress.error-vapifault-gladia-transcriber-failed", + "pipeline-error-speechmatics-transcriber-failed", + "call.in-progress.error-vapifault-speechmatics-transcriber-failed", + "pipeline-error-assembly-ai-transcriber-failed", + "call.in-progress.error-vapifault-assembly-ai-transcriber-failed", + "pipeline-error-talkscriber-transcriber-failed", + "call.in-progress.error-vapifault-talkscriber-transcriber-failed", + "pipeline-error-azure-speech-transcriber-failed", + "call.in-progress.error-vapifault-azure-speech-transcriber-failed", "pipeline-no-available-model", "worker-shutdown", "unknown-error", "vonage-disconnected", "vonage-failed-to-connect-call", + "vonage-completed", "phone-call-provider-bypass-enabled-but-no-call-received", "vapifault-phone-call-worker-setup-socket-error", "vapifault-phone-call-worker-worker-setup-socket-timeout", - "vapifault-phone-call-worker-could-not-find-call", "vapifault-transport-never-connected", - "vapifault-web-call-worker-setup-failed", "vapifault-transport-connected-but-call-not-active", "vapifault-call-started-but-connection-to-transport-missing", + "call.in-progress.error-vapifault-phone-call-worker-setup-socket-error", + "call.in-progress.error-vapifault-phone-call-worker-worker-setup-socket-timeout", + "call.in-progress.error-vapifault-transport-never-connected", + "call.in-progress.error-vapifault-transport-connected-but-call-not-active", + "call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing", + "call.in-progress.error-vapifault-openai-llm-failed", + "call.in-progress.error-vapifault-azure-openai-llm-failed", + "call.in-progress.error-vapifault-groq-llm-failed", + "call.in-progress.error-vapifault-google-llm-failed", + "call.in-progress.error-vapifault-xai-llm-failed", + "call.in-progress.error-vapifault-mistral-llm-failed", + "call.in-progress.error-vapifault-inflection-ai-llm-failed", + "call.in-progress.error-vapifault-cerebras-llm-failed", + "call.in-progress.error-vapifault-deep-seek-llm-failed", "pipeline-error-openai-llm-failed", "pipeline-error-azure-openai-llm-failed", "pipeline-error-groq-llm-failed", @@ -14819,100 +17391,198 @@ "pipeline-error-openai-403-model-access-denied", "pipeline-error-openai-429-exceeded-quota", "pipeline-error-openai-500-server-error", + "call.in-progress.error-vapifault-openai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-openai-401-unauthorized", + "call.in-progress.error-vapifault-openai-403-model-access-denied", + "call.in-progress.error-vapifault-openai-429-exceeded-quota", + "call.in-progress.error-vapifault-openai-500-server-error", "pipeline-error-google-400-bad-request-validation-failed", "pipeline-error-google-401-unauthorized", "pipeline-error-google-403-model-access-denied", "pipeline-error-google-429-exceeded-quota", "pipeline-error-google-500-server-error", + "call.in-progress.error-vapifault-google-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-google-401-unauthorized", + "call.in-progress.error-vapifault-google-403-model-access-denied", + "call.in-progress.error-vapifault-google-429-exceeded-quota", + "call.in-progress.error-vapifault-google-500-server-error", "pipeline-error-xai-400-bad-request-validation-failed", "pipeline-error-xai-401-unauthorized", "pipeline-error-xai-403-model-access-denied", "pipeline-error-xai-429-exceeded-quota", "pipeline-error-xai-500-server-error", + "call.in-progress.error-vapifault-xai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-xai-401-unauthorized", + "call.in-progress.error-vapifault-xai-403-model-access-denied", + "call.in-progress.error-vapifault-xai-429-exceeded-quota", + "call.in-progress.error-vapifault-xai-500-server-error", "pipeline-error-mistral-400-bad-request-validation-failed", "pipeline-error-mistral-401-unauthorized", "pipeline-error-mistral-403-model-access-denied", "pipeline-error-mistral-429-exceeded-quota", "pipeline-error-mistral-500-server-error", + "call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-mistral-401-unauthorized", + "call.in-progress.error-vapifault-mistral-403-model-access-denied", + "call.in-progress.error-vapifault-mistral-429-exceeded-quota", + "call.in-progress.error-vapifault-mistral-500-server-error", "pipeline-error-inflection-ai-400-bad-request-validation-failed", "pipeline-error-inflection-ai-401-unauthorized", "pipeline-error-inflection-ai-403-model-access-denied", "pipeline-error-inflection-ai-429-exceeded-quota", "pipeline-error-inflection-ai-500-server-error", + "call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-inflection-ai-401-unauthorized", + "call.in-progress.error-vapifault-inflection-ai-403-model-access-denied", + "call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota", + "call.in-progress.error-vapifault-inflection-ai-500-server-error", "pipeline-error-deep-seek-400-bad-request-validation-failed", "pipeline-error-deep-seek-401-unauthorized", "pipeline-error-deep-seek-403-model-access-denied", "pipeline-error-deep-seek-429-exceeded-quota", "pipeline-error-deep-seek-500-server-error", + "call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-deep-seek-401-unauthorized", + "call.in-progress.error-vapifault-deep-seek-403-model-access-denied", + "call.in-progress.error-vapifault-deep-seek-429-exceeded-quota", + "call.in-progress.error-vapifault-deep-seek-500-server-error", "pipeline-error-azure-openai-400-bad-request-validation-failed", "pipeline-error-azure-openai-401-unauthorized", "pipeline-error-azure-openai-403-model-access-denied", "pipeline-error-azure-openai-429-exceeded-quota", "pipeline-error-azure-openai-500-server-error", + "call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-azure-openai-401-unauthorized", + "call.in-progress.error-vapifault-azure-openai-403-model-access-denied", + "call.in-progress.error-vapifault-azure-openai-429-exceeded-quota", + "call.in-progress.error-vapifault-azure-openai-500-server-error", "pipeline-error-groq-400-bad-request-validation-failed", "pipeline-error-groq-401-unauthorized", "pipeline-error-groq-403-model-access-denied", "pipeline-error-groq-429-exceeded-quota", "pipeline-error-groq-500-server-error", + "call.in-progress.error-vapifault-groq-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-groq-401-unauthorized", + "call.in-progress.error-vapifault-groq-403-model-access-denied", + "call.in-progress.error-vapifault-groq-429-exceeded-quota", + "call.in-progress.error-vapifault-groq-500-server-error", "pipeline-error-cerebras-400-bad-request-validation-failed", "pipeline-error-cerebras-401-unauthorized", "pipeline-error-cerebras-403-model-access-denied", "pipeline-error-cerebras-429-exceeded-quota", "pipeline-error-cerebras-500-server-error", + "call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-cerebras-401-unauthorized", + "call.in-progress.error-vapifault-cerebras-403-model-access-denied", + "call.in-progress.error-vapifault-cerebras-429-exceeded-quota", + "call.in-progress.error-vapifault-cerebras-500-server-error", "pipeline-error-anthropic-400-bad-request-validation-failed", "pipeline-error-anthropic-401-unauthorized", "pipeline-error-anthropic-403-model-access-denied", "pipeline-error-anthropic-429-exceeded-quota", "pipeline-error-anthropic-500-server-error", "pipeline-error-anthropic-llm-failed", + "call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-anthropic-401-unauthorized", + "call.in-progress.error-vapifault-anthropic-403-model-access-denied", + "call.in-progress.error-vapifault-anthropic-429-exceeded-quota", + "call.in-progress.error-vapifault-anthropic-500-server-error", + "call.in-progress.error-vapifault-anthropic-llm-failed", "pipeline-error-together-ai-400-bad-request-validation-failed", "pipeline-error-together-ai-401-unauthorized", "pipeline-error-together-ai-403-model-access-denied", "pipeline-error-together-ai-429-exceeded-quota", "pipeline-error-together-ai-500-server-error", "pipeline-error-together-ai-llm-failed", + "call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-together-ai-401-unauthorized", + "call.in-progress.error-vapifault-together-ai-403-model-access-denied", + "call.in-progress.error-vapifault-together-ai-429-exceeded-quota", + "call.in-progress.error-vapifault-together-ai-500-server-error", + "call.in-progress.error-vapifault-together-ai-llm-failed", "pipeline-error-anyscale-400-bad-request-validation-failed", "pipeline-error-anyscale-401-unauthorized", "pipeline-error-anyscale-403-model-access-denied", "pipeline-error-anyscale-429-exceeded-quota", "pipeline-error-anyscale-500-server-error", "pipeline-error-anyscale-llm-failed", + "call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-anyscale-401-unauthorized", + "call.in-progress.error-vapifault-anyscale-403-model-access-denied", + "call.in-progress.error-vapifault-anyscale-429-exceeded-quota", + "call.in-progress.error-vapifault-anyscale-500-server-error", + "call.in-progress.error-vapifault-anyscale-llm-failed", "pipeline-error-openrouter-400-bad-request-validation-failed", "pipeline-error-openrouter-401-unauthorized", "pipeline-error-openrouter-403-model-access-denied", "pipeline-error-openrouter-429-exceeded-quota", "pipeline-error-openrouter-500-server-error", "pipeline-error-openrouter-llm-failed", + "call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-openrouter-401-unauthorized", + "call.in-progress.error-vapifault-openrouter-403-model-access-denied", + "call.in-progress.error-vapifault-openrouter-429-exceeded-quota", + "call.in-progress.error-vapifault-openrouter-500-server-error", + "call.in-progress.error-vapifault-openrouter-llm-failed", "pipeline-error-perplexity-ai-400-bad-request-validation-failed", "pipeline-error-perplexity-ai-401-unauthorized", "pipeline-error-perplexity-ai-403-model-access-denied", "pipeline-error-perplexity-ai-429-exceeded-quota", "pipeline-error-perplexity-ai-500-server-error", "pipeline-error-perplexity-ai-llm-failed", + "call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-perplexity-ai-401-unauthorized", + "call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied", + "call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota", + "call.in-progress.error-vapifault-perplexity-ai-500-server-error", + "call.in-progress.error-vapifault-perplexity-ai-llm-failed", "pipeline-error-deepinfra-400-bad-request-validation-failed", "pipeline-error-deepinfra-401-unauthorized", "pipeline-error-deepinfra-403-model-access-denied", "pipeline-error-deepinfra-429-exceeded-quota", "pipeline-error-deepinfra-500-server-error", "pipeline-error-deepinfra-llm-failed", + "call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-deepinfra-401-unauthorized", + "call.in-progress.error-vapifault-deepinfra-403-model-access-denied", + "call.in-progress.error-vapifault-deepinfra-429-exceeded-quota", + "call.in-progress.error-vapifault-deepinfra-500-server-error", + "call.in-progress.error-vapifault-deepinfra-llm-failed", "pipeline-error-runpod-400-bad-request-validation-failed", "pipeline-error-runpod-401-unauthorized", "pipeline-error-runpod-403-model-access-denied", "pipeline-error-runpod-429-exceeded-quota", "pipeline-error-runpod-500-server-error", "pipeline-error-runpod-llm-failed", + "call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-runpod-401-unauthorized", + "call.in-progress.error-vapifault-runpod-403-model-access-denied", + "call.in-progress.error-vapifault-runpod-429-exceeded-quota", + "call.in-progress.error-vapifault-runpod-500-server-error", + "call.in-progress.error-vapifault-runpod-llm-failed", "pipeline-error-custom-llm-400-bad-request-validation-failed", "pipeline-error-custom-llm-401-unauthorized", "pipeline-error-custom-llm-403-model-access-denied", "pipeline-error-custom-llm-429-exceeded-quota", "pipeline-error-custom-llm-500-server-error", "pipeline-error-custom-llm-llm-failed", + "call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-custom-llm-401-unauthorized", + "call.in-progress.error-vapifault-custom-llm-403-model-access-denied", + "call.in-progress.error-vapifault-custom-llm-429-exceeded-quota", + "call.in-progress.error-vapifault-custom-llm-500-server-error", + "call.in-progress.error-vapifault-custom-llm-llm-failed", "pipeline-error-custom-voice-failed", "pipeline-error-cartesia-socket-hang-up", "pipeline-error-cartesia-requested-payment", "pipeline-error-cartesia-500-server-error", "pipeline-error-cartesia-503-server-error", "pipeline-error-cartesia-522-server-error", + "call.in-progress.error-vapifault-cartesia-socket-hang-up", + "call.in-progress.error-vapifault-cartesia-requested-payment", + "call.in-progress.error-vapifault-cartesia-500-server-error", + "call.in-progress.error-vapifault-cartesia-503-server-error", + "call.in-progress.error-vapifault-cartesia-522-server-error", "pipeline-error-eleven-labs-voice-not-found", "pipeline-error-eleven-labs-quota-exceeded", "pipeline-error-eleven-labs-unauthorized-access", @@ -14934,6 +17604,27 @@ "pipeline-error-eleven-labs-500-server-error", "pipeline-error-eleven-labs-max-character-limit-exceeded", "pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification", + "call.in-progress.error-vapifault-eleven-labs-voice-not-found", + "call.in-progress.error-vapifault-eleven-labs-quota-exceeded", + "call.in-progress.error-vapifault-eleven-labs-unauthorized-access", + "call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model", + "call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus", + "call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned", + "call.in-progress.error-vapifault-eleven-labs-invalid-api-key", + "call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples", + "call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner", + "call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation", + "call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy", + "call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone", + "call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used", + "call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users", + "call.in-progress.error-vapifault-eleven-labs-500-server-error", + "call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded", + "call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification", "pipeline-error-playht-request-timed-out", "pipeline-error-playht-invalid-voice", "pipeline-error-playht-unexpected-error", @@ -14946,9 +17637,22 @@ "pipeline-error-playht-429-exceeded-quota", "pipeline-error-playht-502-gateway-error", "pipeline-error-playht-504-gateway-error", - "pipeline-error-tavus-video-failed", + "call.in-progress.error-vapifault-playht-request-timed-out", + "call.in-progress.error-vapifault-playht-invalid-voice", + "call.in-progress.error-vapifault-playht-unexpected-error", + "call.in-progress.error-vapifault-playht-out-of-credits", + "call.in-progress.error-vapifault-playht-invalid-emotion", + "call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri", + "call.in-progress.error-vapifault-playht-401-unauthorized", + "call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters", + "call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available", + "call.in-progress.error-vapifault-playht-429-exceeded-quota", + "call.in-progress.error-vapifault-playht-502-gateway-error", + "call.in-progress.error-vapifault-playht-504-gateway-error", "pipeline-error-custom-transcriber-failed", + "call.in-progress.error-vapifault-custom-transcriber-failed", "pipeline-error-11labs-transcriber-failed", + "call.in-progress.error-vapifault-11labs-transcriber-failed", "pipeline-error-deepgram-returning-403-model-access-denied", "pipeline-error-deepgram-returning-401-invalid-credentials", "pipeline-error-deepgram-returning-404-not-found", @@ -14956,6 +17660,26 @@ "pipeline-error-deepgram-returning-500-invalid-json", "pipeline-error-deepgram-returning-502-network-error", "pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach", + "call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied", + "call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials", + "call.in-progress.error-vapifault-deepgram-returning-404-not-found", + "call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination", + "call.in-progress.error-vapifault-deepgram-returning-500-invalid-json", + "call.in-progress.error-vapifault-deepgram-returning-502-network-error", + "call.in-progress.error-vapifault-deepgram-returning-502-bad-gateway-ehostunreach", + "pipeline-error-google-transcriber-failed", + "call.in-progress.error-vapifault-google-transcriber-failed", + "pipeline-error-openai-transcriber-failed", + "call.in-progress.error-vapifault-openai-transcriber-failed", + "call.start.error-get-org", + "call.start.error-get-subscription", + "call.start.error-get-assistant", + "call.start.error-get-phone-number", + "call.start.error-get-customer", + "call.start.error-get-resources-validation", + "call.start.error-vapi-number-international", + "call.start.error-vapi-number-outbound-daily-limit", + "call.start.error-get-transport", "silence-timed-out", "sip-gateway-failed-to-connect-call", "twilio-failed-to-connect-call", @@ -15041,26 +17765,282 @@ } ] }, - "artifact": { - "description": "These are the artifacts created from the call. Configure in `assistant.artifactPlan`.", - "allOf": [ - { - "$ref": "#/components/schemas/Artifact" - } - ] + "artifact": { + "description": "These are the artifacts created from the call. Configure in `assistant.artifactPlan`.", + "allOf": [ + { + "$ref": "#/components/schemas/Artifact" + } + ] + }, + "transport": { + "description": "This is the transport used for the call.", + "allOf": [ + { + "$ref": "#/components/schemas/Transport" + } + ] + }, + "phoneCallProviderId": { + "type": "string", + "description": "The ID of the call as provided by the phone number service. callSid in Twilio. conversationUuid in Vonage. callControlId in Telnyx.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." + }, + "assistantId": { + "type": "string", + "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead." + }, + "assistant": { + "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", + "allOf": [ + { + "$ref": "#/components/schemas/CreateAssistantDTO" + } + ] + }, + "assistantOverrides": { + "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.", + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] + }, + "squadId": { + "type": "string", + "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead." + }, + "squad": { + "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.", + "allOf": [ + { + "$ref": "#/components/schemas/CreateSquadDTO" + } + ] + }, + "phoneNumberId": { + "type": "string", + "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." + }, + "phoneNumber": { + "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", + "allOf": [ + { + "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO" + } + ] + }, + "customerId": { + "type": "string", + "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." + }, + "customer": { + "description": "This is the customer that will be called. To call an existing customer, use `customerId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", + "allOf": [ + { + "$ref": "#/components/schemas/CreateCustomerDTO" + } + ] + }, + "name": { + "type": "string", + "description": "This is the name of the call. This is just for your own reference.", + "maxLength": 40 + }, + "schedulePlan": { + "description": "This is the schedule plan of the call.", + "allOf": [ + { + "$ref": "#/components/schemas/SchedulePlan" + } + ] + } + }, + "required": [ + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, + "CallBatchError": { + "type": "object", + "properties": { + "customer": { + "$ref": "#/components/schemas/CreateCustomerDTO" + }, + "error": { + "type": "string" + } + }, + "required": [ + "customer", + "error" + ] + }, + "CallBatchResponse": { + "type": "object", + "properties": { + "results": { + "description": "This is the list of calls that were created.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Call" + } + }, + "errors": { + "description": "This is the list of calls that failed to be created.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CallBatchError" + } + } + }, + "required": [ + "results", + "errors" + ] + }, + "CreateCallDTO": { + "type": "object", + "properties": { + "customers": { + "description": "This is used to issue batch calls to multiple customers.\n\nOnly relevant for `outboundPhoneCall`. To call a single customer, use `customer` instead.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CreateCustomerDTO" + } + }, + "name": { + "type": "string", + "description": "This is the name of the call. This is just for your own reference.", + "maxLength": 40 + }, + "schedulePlan": { + "description": "This is the schedule plan of the call.", + "allOf": [ + { + "$ref": "#/components/schemas/SchedulePlan" + } + ] + }, + "assistantId": { + "type": "string", + "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead." + }, + "assistant": { + "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", + "allOf": [ + { + "$ref": "#/components/schemas/CreateAssistantDTO" + } + ] + }, + "assistantOverrides": { + "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.", + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] + }, + "squadId": { + "type": "string", + "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead." + }, + "squad": { + "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.", + "allOf": [ + { + "$ref": "#/components/schemas/CreateSquadDTO" + } + ] + }, + "phoneNumberId": { + "type": "string", + "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." + }, + "phoneNumber": { + "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", + "allOf": [ + { + "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO" + } + ] + }, + "customerId": { + "type": "string", + "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." + }, + "customer": { + "description": "This is the customer that will be called. To call an existing customer, use `customerId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", + "allOf": [ + { + "$ref": "#/components/schemas/CreateCustomerDTO" + } + ] + } + } + }, + "PaginationMeta": { + "type": "object", + "properties": { + "itemsPerPage": { + "type": "number" + }, + "totalItems": { + "type": "number" + }, + "currentPage": { + "type": "number" + } + }, + "required": [ + "itemsPerPage", + "totalItems", + "currentPage" + ] + }, + "CallPaginatedResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Call" + } + }, + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" + } + }, + "required": [ + "results", + "metadata" + ] + }, + "CreateOutboundCallDTO": { + "type": "object", + "properties": { + "customers": { + "description": "This is used to issue batch calls to multiple customers.\n\nOnly relevant for `outboundPhoneCall`. To call a single customer, use `customer` instead.", + "type": "array", + "items": { + "$ref": "#/components/schemas/CreateCustomerDTO" + } + }, + "name": { + "type": "string", + "description": "This is the name of the call. This is just for your own reference.", + "maxLength": 40 }, - "transport": { - "description": "This is the transport used for the call.", + "schedulePlan": { + "description": "This is the schedule plan of the call.", "allOf": [ { - "$ref": "#/components/schemas/Transport" + "$ref": "#/components/schemas/SchedulePlan" } ] }, - "phoneCallProviderId": { - "type": "string", - "description": "The ID of the call as provided by the phone number service. callSid in Twilio. conversationUuid in Vonage.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." - }, "assistantId": { "type": "string", "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead." @@ -15116,169 +18096,426 @@ "$ref": "#/components/schemas/CreateCustomerDTO" } ] + } + } + }, + "CreateWebCallDTO": { + "type": "object", + "properties": { + "assistantId": { + "type": "string", + "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead." + }, + "assistant": { + "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", + "allOf": [ + { + "$ref": "#/components/schemas/CreateAssistantDTO" + } + ] + }, + "assistantOverrides": { + "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.", + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] + }, + "squadId": { + "type": "string", + "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead." }, + "squad": { + "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.", + "allOf": [ + { + "$ref": "#/components/schemas/CreateSquadDTO" + } + ] + } + } + }, + "UpdateCallDTO": { + "type": "object", + "properties": { "name": { "type": "string", "description": "This is the name of the call. This is just for your own reference.", "maxLength": 40 } + } + }, + "ChatServiceResponse": { + "type": "object", + "properties": {} + }, + "ChatCompletionMessageMetadata": { + "type": "object", + "properties": { + "taskName": { + "type": "string" + }, + "taskType": { + "type": "string" + }, + "taskOutput": { + "type": "string" + }, + "taskState": { + "type": "object" + }, + "nodeTrace": { + "type": "array", + "items": { + "type": "string" + } + } }, "required": [ - "id", - "orgId", - "createdAt", - "updatedAt" + "taskName", + "taskType", + "taskOutput" ] }, - "PaginationMeta": { + "ChatCompletionMessageWorkflows": { "type": "object", "properties": { - "itemsPerPage": { - "type": "number" + "role": { + "type": "object" }, - "totalItems": { - "type": "number" + "content": { + "type": "string", + "nullable": true }, - "currentPage": { - "type": "number" + "metadata": { + "$ref": "#/components/schemas/ChatCompletionMessageMetadata" } }, "required": [ - "itemsPerPage", - "totalItems", - "currentPage" + "role", + "content" ] }, - "CallPaginatedResponse": { + "Say": { "type": "object", "properties": { - "results": { + "type": { + "type": "string", + "enum": [ + "say" + ] + }, + "exact": { + "type": "string", + "maxLength": 1000 + }, + "prompt": { + "type": "string", + "maxLength": 1000 + }, + "name": { + "type": "string", + "maxLength": 80 + }, + "metadata": { + "type": "object", + "description": "This is for metadata you want to store on the task." + } + }, + "required": [ + "type", + "name" + ] + }, + "SayHook": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "say" + ] + }, + "metadata": { + "type": "object", + "description": "This is for metadata you want to store on the task." + }, + "exact": { + "type": "string", + "maxLength": 1000 + }, + "prompt": { + "type": "string", + "maxLength": 1000 + } + }, + "required": [ + "type" + ] + }, + "Hook": { + "type": "object", + "properties": { + "on": { + "type": "string", + "enum": [ + "task.start", + "task.output.confirmation", + "task.delayed" + ], + "maxLength": 80 + }, + "do": { "type": "array", "items": { - "$ref": "#/components/schemas/Call" + "$ref": "#/components/schemas/SayHook" + } + } + }, + "required": [ + "on", + "do" + ] + }, + "Gather": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "gather" + ] + }, + "output": { + "$ref": "#/components/schemas/JsonSchema" + }, + "confirmContent": { + "type": "boolean", + "description": "This is whether or not the workflow should read back the gathered data to the user, and ask about its correctness." + }, + "hooks": { + "description": "This is a list of hooks for a task.\nEach hook is a list of tasks to run on a trigger (such as on start, on failure, etc).\nOnly Say is supported for now.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Hook" } }, + "maxRetries": { + "type": "number", + "description": "This is the number of times we should try to gather the information from the user before we failover to the fail path. An example of this would be a user refusing to give their phone number for privacy reasons, and then going down a different path on account of this" + }, + "literalTemplate": { + "type": "string", + "description": "This is a liquid templating string. On the first call to Gather, the template will be filled out with variables from the context, and will be spoken verbatim to the user. An example would be \"Base on your zipcode, it looks like you could be in one of these counties: {{ counties | join: \", \" }}. Which one do you live in?\"" + }, + "name": { + "type": "string", + "maxLength": 80 + }, "metadata": { - "$ref": "#/components/schemas/PaginationMeta" + "type": "object", + "description": "This is for metadata you want to store on the task." } }, "required": [ - "results", - "metadata" + "type", + "output", + "name" ] }, - "CreateOutboundCallDTO": { + "ApiRequest": { "type": "object", "properties": { - "name": { + "type": { "type": "string", - "description": "This is the name of the call. This is just for your own reference.", - "maxLength": 40 + "enum": [ + "apiRequest" + ] + }, + "method": { + "type": "string", + "enum": [ + "POST", + "GET" + ] }, - "assistantId": { + "url": { "type": "string", - "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead." + "description": "Api endpoint to send requests to." }, - "assistant": { - "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", + "headers": { + "description": "These are the custom headers to include in the Api Request sent.\n\nEach key-value pair represents a header name and its value.", "allOf": [ { - "$ref": "#/components/schemas/CreateAssistantDTO" + "$ref": "#/components/schemas/JsonSchema" } ] }, - "assistantOverrides": { - "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.", + "body": { + "description": "This defined the JSON body of your Api Request. For example, if `body_schema`\nincluded \"my_field\": \"my_gather_statement.user_age\", then the json body sent to the server would have that particular value assign to it.\nRight now, only data from gather statements are supported.", "allOf": [ { - "$ref": "#/components/schemas/AssistantOverrides" + "$ref": "#/components/schemas/JsonSchema" } ] }, - "squadId": { + "mode": { "type": "string", - "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead." + "description": "This is the mode of the Api Request.\nWe only support BLOCKING and BACKGROUND for now.", + "enum": [ + "blocking", + "background" + ] }, - "squad": { - "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.", + "hooks": { + "description": "This is a list of hooks for a task.\nEach hook is a list of tasks to run on a trigger (such as on start, on failure, etc).\nOnly Say is supported for now.", + "type": "array", + "items": { + "$ref": "#/components/schemas/Hook" + } + }, + "output": { + "description": "This is the schema for the outputs of the Api Request.", "allOf": [ { - "$ref": "#/components/schemas/CreateSquadDTO" + "$ref": "#/components/schemas/JsonSchema" } ] }, - "phoneNumberId": { + "name": { "type": "string", - "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." + "maxLength": 80 }, - "phoneNumber": { - "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", - "allOf": [ - { - "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO" - } + "metadata": { + "type": "object", + "description": "This is for metadata you want to store on the task." + } + }, + "required": [ + "type", + "method", + "url", + "mode", + "name" + ] + }, + "Hangup": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "hangup" ] }, - "customerId": { + "name": { "type": "string", - "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." + "maxLength": 80 }, - "customer": { - "description": "This is the customer that will be called. To call an existing customer, use `customerId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", - "allOf": [ - { - "$ref": "#/components/schemas/CreateCustomerDTO" - } - ] + "metadata": { + "type": "object", + "description": "This is for metadata you want to store on the task." } - } + }, + "required": [ + "type", + "name" + ] }, - "CreateWebCallDTO": { + "Transfer": { "type": "object", "properties": { - "assistantId": { + "type": { "type": "string", - "description": "This is the assistant that will be used for the call. To use a transient assistant, use `assistant` instead." - }, - "assistant": { - "description": "This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead.", - "allOf": [ - { - "$ref": "#/components/schemas/CreateAssistantDTO" - } + "enum": [ + "transfer" ] }, - "assistantOverrides": { - "description": "These are the overrides for the `assistant` or `assistantId`'s settings and template variables.", - "allOf": [ - { - "$ref": "#/components/schemas/AssistantOverrides" - } - ] + "destination": { + "type": "object" }, - "squadId": { + "name": { "type": "string", - "description": "This is the squad that will be used for the call. To use a transient squad, use `squad` instead." + "maxLength": 80 }, - "squad": { - "description": "This is a squad that will be used for the call. To use an existing squad, use `squadId` instead.", - "allOf": [ - { - "$ref": "#/components/schemas/CreateSquadDTO" - } - ] + "metadata": { + "type": "object", + "description": "This is for metadata you want to store on the task." } - } + }, + "required": [ + "type", + "destination", + "name" + ] }, - "UpdateCallDTO": { + "CreateWorkflowDTO": { "type": "object", "properties": { + "nodes": { + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/Say", + "title": "Say" + }, + { + "$ref": "#/components/schemas/Gather", + "title": "Gather" + }, + { + "$ref": "#/components/schemas/ApiRequest", + "title": "ApiRequest" + }, + { + "$ref": "#/components/schemas/Hangup", + "title": "Hangup" + }, + { + "$ref": "#/components/schemas/Transfer", + "title": "Transfer" + } + ] + } + }, "name": { "type": "string", - "description": "This is the name of the call. This is just for your own reference.", - "maxLength": 40 + "maxLength": 80 + }, + "edges": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Edge" + } } - } + }, + "required": [ + "nodes", + "name", + "edges" + ] + }, + "ChatCompletionsDTO": { + "type": "object", + "properties": { + "messages": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatCompletionMessageWorkflows" + } + }, + "workflowId": { + "type": "string" + }, + "workflow": { + "$ref": "#/components/schemas/CreateWorkflowDTO" + } + }, + "required": [ + "messages" + ] }, "Assistant": { "type": "object", @@ -15302,13 +18539,29 @@ "$ref": "#/components/schemas/DeepgramTranscriber", "title": "Deepgram" }, + { + "$ref": "#/components/schemas/ElevenLabsTranscriber", + "title": "ElevenLabs" + }, { "$ref": "#/components/schemas/GladiaTranscriber", "title": "Gladia" }, + { + "$ref": "#/components/schemas/SpeechmaticsTranscriber", + "title": "Speechmatics" + }, { "$ref": "#/components/schemas/TalkscriberTranscriber", "title": "Talkscriber" + }, + { + "$ref": "#/components/schemas/GoogleTranscriber", + "title": "Google" + }, + { + "$ref": "#/components/schemas/OpenAITranscriber", + "title": "OpenAI" } ] }, @@ -15323,6 +18576,10 @@ "$ref": "#/components/schemas/AnthropicModel", "title": "Anthropic" }, + { + "$ref": "#/components/schemas/CerebrasModel", + "title": "Cerebras" + }, { "$ref": "#/components/schemas/CustomLLMModel", "title": "CustomLLM" @@ -15331,6 +18588,10 @@ "$ref": "#/components/schemas/DeepInfraModel", "title": "DeepInfra" }, + { + "$ref": "#/components/schemas/DeepSeekModel", + "title": "DeepSeek" + }, { "$ref": "#/components/schemas/GoogleModel", "title": "Google" @@ -15343,10 +18604,6 @@ "$ref": "#/components/schemas/InflectionAIModel", "title": "InflectionAI" }, - { - "$ref": "#/components/schemas/DeepSeekModel", - "title": "DeepSeek" - }, { "$ref": "#/components/schemas/OpenAIModel", "title": "OpenAI" @@ -15396,13 +18653,17 @@ "$ref": "#/components/schemas/ElevenLabsVoice", "title": "ElevenLabs" }, + { + "$ref": "#/components/schemas/HumeVoice", + "title": "Hume" + }, { "$ref": "#/components/schemas/LMNTVoice", "title": "LMNT" }, { - "$ref": "#/components/schemas/NeetsVoice", - "title": "Neets" + "$ref": "#/components/schemas/NeuphonicVoice", + "title": "Neuphonic" }, { "$ref": "#/components/schemas/OpenAIVoice", @@ -15423,6 +18684,10 @@ { "$ref": "#/components/schemas/TavusVoice", "title": "TavusVoice" + }, + { + "$ref": "#/components/schemas/VapiVoice", + "title": "Vapi" } ], "default": { @@ -15435,6 +18700,10 @@ "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.", "example": "Hello! How can I help you today?" }, + "firstMessageInterruptionsEnabled": { + "type": "boolean", + "default": false + }, "firstMessageMode": { "type": "string", "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'", @@ -15446,8 +18715,21 @@ "example": "assistant-speaks-first" }, "voicemailDetection": { - "type": "object", - "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not." + "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.", + "oneOf": [ + { + "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan", + "title": "Google" + }, + { + "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan", + "title": "OpenAI" + }, + { + "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan", + "title": "Twilio" + } + ] }, "clientMessages": { "type": "array", @@ -15466,7 +18748,8 @@ "tool-calls-result", "transfer-update", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ], "example": [ "conversation-update", @@ -15479,9 +18762,10 @@ "transcript", "tool-calls", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ], - "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input. You can check the shape of the messages in ClientMessage schema.", + "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.", "items": { "type": "string", "enum": [ @@ -15499,7 +18783,8 @@ "tool-calls-result", "transfer-update", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ] } }, @@ -15574,13 +18859,23 @@ "example": 600 }, "backgroundSound": { - "type": "string", - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.", - "enum": [ - "off", - "office" - ], - "example": "office" + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "maxLength": 1000, + "oneOf": [ + { + "type": "enum", + "enum": [ + "off", + "office" + ], + "example": "office" + }, + { + "type": "string", + "format": "uri", + "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3" + } + ] }, "backgroundDenoisingEnabled": { "type": "boolean", @@ -15604,6 +18899,20 @@ ] } }, + "observabilityPlan": { + "description": "This is the plan for observability configuration of assistant's calls.\nCurrently supports Langfuse for tracing and monitoring.", + "oneOf": [ + { + "$ref": "#/components/schemas/LangfuseObservabilityPlan", + "title": "Langfuse" + } + ], + "allOf": [ + { + "$ref": "#/components/schemas/LangfuseObservabilityPlan" + } + ] + }, "credentials": { "type": "array", "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.", @@ -15621,14 +18930,14 @@ "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO", "title": "AssemblyAICredential" }, - { - "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO", - "title": "AzureOpenAICredential" - }, { "$ref": "#/components/schemas/CreateAzureCredentialDTO", "title": "AzureCredential" }, + { + "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO", + "title": "AzureOpenAICredential" + }, { "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO", "title": "ByoSipTrunkCredential" @@ -15637,6 +18946,10 @@ "$ref": "#/components/schemas/CreateCartesiaCredentialDTO", "title": "CartesiaCredential" }, + { + "$ref": "#/components/schemas/CreateCerebrasCredentialDTO", + "title": "CerebrasCredential" + }, { "$ref": "#/components/schemas/CreateCloudflareCredentialDTO", "title": "CloudflareCredential" @@ -15673,10 +18986,22 @@ "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO", "title": "GhlCredential" }, + { + "$ref": "#/components/schemas/CreateGoogleCredentialDTO", + "title": "GoogleCredential" + }, { "$ref": "#/components/schemas/CreateGroqCredentialDTO", "title": "GroqCredential" }, + { + "$ref": "#/components/schemas/CreateHumeCredentialDTO", + "title": "HumeCredential" + }, + { + "$ref": "#/components/schemas/CreateInflectionAICredentialDTO", + "title": "InflectionAICredential" + }, { "$ref": "#/components/schemas/CreateLangfuseCredentialDTO", "title": "LangfuseCredential" @@ -15689,6 +19014,14 @@ "$ref": "#/components/schemas/CreateMakeCredentialDTO", "title": "MakeCredential" }, + { + "$ref": "#/components/schemas/CreateMistralCredentialDTO", + "title": "MistralCredential" + }, + { + "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO", + "title": "NeuphonicCredential" + }, { "$ref": "#/components/schemas/CreateOpenAICredentialDTO", "title": "OpenAICredential" @@ -15717,14 +19050,18 @@ "$ref": "#/components/schemas/CreateS3CredentialDTO", "title": "S3Credential" }, - { - "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", - "title": "SupabaseCredential" - }, { "$ref": "#/components/schemas/CreateSmallestAICredentialDTO", "title": "SmallestAICredential" }, + { + "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO", + "title": "SpeechmaticsCredential" + }, + { + "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", + "title": "SupabaseCredential" + }, { "$ref": "#/components/schemas/CreateTavusCredentialDTO", "title": "TavusCredential" @@ -15733,6 +19070,10 @@ "$ref": "#/components/schemas/CreateTogetherAICredentialDTO", "title": "TogetherAICredential" }, + { + "$ref": "#/components/schemas/CreateTrieveCredentialDTO", + "title": "TrieveCredential" + }, { "$ref": "#/components/schemas/CreateTwilioCredentialDTO", "title": "TwilioCredential" @@ -15748,6 +19089,18 @@ { "$ref": "#/components/schemas/CreateXAiCredentialDTO", "title": "XAiCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", + "title": "GoogleCalendarOAuth2ClientCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", + "title": "GoogleCalendarOAuth2AuthorizationCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", + "title": "GoogleSheetsOAuth2AuthorizationCredential" } ] } @@ -15882,6 +19235,24 @@ "updatedAt" ] }, + "AssistantPaginatedResponse": { + "type": "object", + "properties": { + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Assistant" + } + }, + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" + } + }, + "required": [ + "results", + "metadata" + ] + }, "UpdateAssistantDTO": { "type": "object", "properties": { @@ -15904,13 +19275,29 @@ "$ref": "#/components/schemas/DeepgramTranscriber", "title": "Deepgram" }, + { + "$ref": "#/components/schemas/ElevenLabsTranscriber", + "title": "ElevenLabs" + }, { "$ref": "#/components/schemas/GladiaTranscriber", "title": "Gladia" }, + { + "$ref": "#/components/schemas/SpeechmaticsTranscriber", + "title": "Speechmatics" + }, { "$ref": "#/components/schemas/TalkscriberTranscriber", "title": "Talkscriber" + }, + { + "$ref": "#/components/schemas/GoogleTranscriber", + "title": "Google" + }, + { + "$ref": "#/components/schemas/OpenAITranscriber", + "title": "OpenAI" } ] }, @@ -15925,6 +19312,10 @@ "$ref": "#/components/schemas/AnthropicModel", "title": "Anthropic" }, + { + "$ref": "#/components/schemas/CerebrasModel", + "title": "Cerebras" + }, { "$ref": "#/components/schemas/CustomLLMModel", "title": "CustomLLM" @@ -15933,6 +19324,10 @@ "$ref": "#/components/schemas/DeepInfraModel", "title": "DeepInfra" }, + { + "$ref": "#/components/schemas/DeepSeekModel", + "title": "DeepSeek" + }, { "$ref": "#/components/schemas/GoogleModel", "title": "Google" @@ -15945,10 +19340,6 @@ "$ref": "#/components/schemas/InflectionAIModel", "title": "InflectionAI" }, - { - "$ref": "#/components/schemas/DeepSeekModel", - "title": "DeepSeek" - }, { "$ref": "#/components/schemas/OpenAIModel", "title": "OpenAI" @@ -15998,13 +19389,17 @@ "$ref": "#/components/schemas/ElevenLabsVoice", "title": "ElevenLabs" }, + { + "$ref": "#/components/schemas/HumeVoice", + "title": "Hume" + }, { "$ref": "#/components/schemas/LMNTVoice", "title": "LMNT" }, { - "$ref": "#/components/schemas/NeetsVoice", - "title": "Neets" + "$ref": "#/components/schemas/NeuphonicVoice", + "title": "Neuphonic" }, { "$ref": "#/components/schemas/OpenAIVoice", @@ -16025,6 +19420,10 @@ { "$ref": "#/components/schemas/TavusVoice", "title": "TavusVoice" + }, + { + "$ref": "#/components/schemas/VapiVoice", + "title": "Vapi" } ], "default": { @@ -16037,6 +19436,10 @@ "description": "This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.).\n\nIf unspecified, assistant will wait for user to speak and use the model to respond once they speak.", "example": "Hello! How can I help you today?" }, + "firstMessageInterruptionsEnabled": { + "type": "boolean", + "default": false + }, "firstMessageMode": { "type": "string", "description": "This is the mode for the first message. Default is 'assistant-speaks-first'.\n\nUse:\n- 'assistant-speaks-first' to have the assistant speak first.\n- 'assistant-waits-for-user' to have the assistant wait for the user to speak first.\n- 'assistant-speaks-first-with-model-generated-message' to have the assistant speak first with a message generated by the model based on the conversation state. (`assistant.model.messages` at call start, `call.messages` at squad transfer points).\n\n@default 'assistant-speaks-first'", @@ -16048,8 +19451,21 @@ "example": "assistant-speaks-first" }, "voicemailDetection": { - "type": "object", - "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not." + "description": "These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool].\nThis uses Twilio's built-in detection while the VoicemailTool relies on the model to detect if a voicemail was reached.\nYou can use neither of them, one of them, or both of them. By default, Twilio built-in detection is enabled while VoicemailTool is not.", + "oneOf": [ + { + "$ref": "#/components/schemas/GoogleVoicemailDetectionPlan", + "title": "Google" + }, + { + "$ref": "#/components/schemas/OpenAIVoicemailDetectionPlan", + "title": "OpenAI" + }, + { + "$ref": "#/components/schemas/TwilioVoicemailDetectionPlan", + "title": "Twilio" + } + ] }, "clientMessages": { "type": "array", @@ -16068,7 +19484,8 @@ "tool-calls-result", "transfer-update", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ], "example": [ "conversation-update", @@ -16081,9 +19498,10 @@ "transcript", "tool-calls", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ], - "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input. You can check the shape of the messages in ClientMessage schema.", + "description": "These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started. You can check the shape of the messages in ClientMessage schema.", "items": { "type": "string", "enum": [ @@ -16101,7 +19519,8 @@ "tool-calls-result", "transfer-update", "user-interrupted", - "voice-input" + "voice-input", + "workflow.node.started" ] } }, @@ -16176,13 +19595,23 @@ "example": 600 }, "backgroundSound": { - "type": "string", - "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.", - "enum": [ - "off", - "office" - ], - "example": "office" + "description": "This is the background sound in the call. Default for phone calls is 'office' and default for web calls is 'off'.\nYou can also provide a custom sound by providing a URL to an audio file.", + "maxLength": 1000, + "oneOf": [ + { + "type": "enum", + "enum": [ + "off", + "office" + ], + "example": "office" + }, + { + "type": "string", + "format": "uri", + "example": "https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3" + } + ] }, "backgroundDenoisingEnabled": { "type": "boolean", @@ -16206,6 +19635,20 @@ ] } }, + "observabilityPlan": { + "description": "This is the plan for observability configuration of assistant's calls.\nCurrently supports Langfuse for tracing and monitoring.", + "oneOf": [ + { + "$ref": "#/components/schemas/LangfuseObservabilityPlan", + "title": "Langfuse" + } + ], + "allOf": [ + { + "$ref": "#/components/schemas/LangfuseObservabilityPlan" + } + ] + }, "credentials": { "type": "array", "description": "These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials.", @@ -16223,14 +19666,14 @@ "$ref": "#/components/schemas/CreateAssemblyAICredentialDTO", "title": "AssemblyAICredential" }, - { - "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO", - "title": "AzureOpenAICredential" - }, { "$ref": "#/components/schemas/CreateAzureCredentialDTO", "title": "AzureCredential" }, + { + "$ref": "#/components/schemas/CreateAzureOpenAICredentialDTO", + "title": "AzureOpenAICredential" + }, { "$ref": "#/components/schemas/CreateByoSipTrunkCredentialDTO", "title": "ByoSipTrunkCredential" @@ -16239,6 +19682,10 @@ "$ref": "#/components/schemas/CreateCartesiaCredentialDTO", "title": "CartesiaCredential" }, + { + "$ref": "#/components/schemas/CreateCerebrasCredentialDTO", + "title": "CerebrasCredential" + }, { "$ref": "#/components/schemas/CreateCloudflareCredentialDTO", "title": "CloudflareCredential" @@ -16275,10 +19722,22 @@ "$ref": "#/components/schemas/CreateGoHighLevelCredentialDTO", "title": "GhlCredential" }, + { + "$ref": "#/components/schemas/CreateGoogleCredentialDTO", + "title": "GoogleCredential" + }, { "$ref": "#/components/schemas/CreateGroqCredentialDTO", "title": "GroqCredential" }, + { + "$ref": "#/components/schemas/CreateHumeCredentialDTO", + "title": "HumeCredential" + }, + { + "$ref": "#/components/schemas/CreateInflectionAICredentialDTO", + "title": "InflectionAICredential" + }, { "$ref": "#/components/schemas/CreateLangfuseCredentialDTO", "title": "LangfuseCredential" @@ -16291,6 +19750,14 @@ "$ref": "#/components/schemas/CreateMakeCredentialDTO", "title": "MakeCredential" }, + { + "$ref": "#/components/schemas/CreateMistralCredentialDTO", + "title": "MistralCredential" + }, + { + "$ref": "#/components/schemas/CreateNeuphonicCredentialDTO", + "title": "NeuphonicCredential" + }, { "$ref": "#/components/schemas/CreateOpenAICredentialDTO", "title": "OpenAICredential" @@ -16319,14 +19786,18 @@ "$ref": "#/components/schemas/CreateS3CredentialDTO", "title": "S3Credential" }, - { - "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", - "title": "SupabaseCredential" - }, { "$ref": "#/components/schemas/CreateSmallestAICredentialDTO", "title": "SmallestAICredential" }, + { + "$ref": "#/components/schemas/CreateSpeechmaticsCredentialDTO", + "title": "SpeechmaticsCredential" + }, + { + "$ref": "#/components/schemas/CreateSupabaseCredentialDTO", + "title": "SupabaseCredential" + }, { "$ref": "#/components/schemas/CreateTavusCredentialDTO", "title": "TavusCredential" @@ -16335,6 +19806,10 @@ "$ref": "#/components/schemas/CreateTogetherAICredentialDTO", "title": "TogetherAICredential" }, + { + "$ref": "#/components/schemas/CreateTrieveCredentialDTO", + "title": "TrieveCredential" + }, { "$ref": "#/components/schemas/CreateTwilioCredentialDTO", "title": "TwilioCredential" @@ -16350,6 +19825,18 @@ { "$ref": "#/components/schemas/CreateXAiCredentialDTO", "title": "XAiCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO", + "title": "GoogleCalendarOAuth2ClientCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO", + "title": "GoogleCalendarOAuth2AuthorizationCredential" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO", + "title": "GoogleSheetsOAuth2AuthorizationCredential" } ] } @@ -16728,7 +20215,7 @@ }, "credentialId": { "type": "string", - "description": "This is the credential that is used to make outgoing calls, and do operations like call transfer and hang up." + "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups." } }, "required": [ @@ -16754,19 +20241,121 @@ "minLength": 20, "maxLength": 40 }, - "password": { + "password": { + "type": "string", + "description": "This will be expected to generate the `response` field of the `authorization` header of the SIP INVITE, through digest authentication.", + "minLength": 20, + "maxLength": 40 + } + }, + "required": [ + "username", + "password" + ] + }, + "VapiPhoneNumber": { + "type": "object", + "properties": { + "fallbackDestination": { + "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.", + "oneOf": [ + { + "$ref": "#/components/schemas/TransferDestinationNumber", + "title": "NumberTransferDestination" + }, + { + "$ref": "#/components/schemas/TransferDestinationSip", + "title": "SipTransferDestination" + } + ] + }, + "provider": { + "type": "string", + "description": "This is to create free SIP phone numbers on Vapi.", + "enum": [ + "vapi" + ] + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the phone number." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this phone number belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the phone number was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the phone number was last updated." + }, + "status": { + "type": "string", + "description": "This is the status of the phone number.", + "enum": [ + "active", + "activating", + "blocked" + ] + }, + "number": { + "type": "string", + "description": "These are the digits of the phone number you purchased from Vapi." + }, + "name": { + "type": "string", + "description": "This is the name of the phone number. This is just for your own reference.", + "maxLength": 40 + }, + "assistantId": { + "type": "string", + "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "squadId": { + "type": "string", + "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "server": { + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + }, + "numberDesiredAreaCode": { + "type": "string", + "description": "This is the area code of the phone number to purchase.", + "minLength": 3, + "maxLength": 3 + }, + "sipUri": { "type": "string", - "description": "This will be expected to generate the `response` field of the `authorization` header of the SIP INVITE, through digest authentication.", - "minLength": 20, - "maxLength": 40 + "description": "This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer.\n\nThis is case-insensitive." + }, + "authentication": { + "description": "This enables authentication for incoming SIP INVITE requests to the `sipUri`.\n\nIf not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.", + "allOf": [ + { + "$ref": "#/components/schemas/SipAuthentication" + } + ] } }, "required": [ - "username", - "password" + "provider", + "id", + "orgId", + "createdAt", + "updatedAt" ] }, - "VapiPhoneNumber": { + "TelnyxPhoneNumber": { "type": "object", "properties": { "fallbackDestination": { @@ -16784,9 +20373,9 @@ }, "provider": { "type": "string", - "description": "This is to create free SIP phone numbers on Vapi.", + "description": "This is to use numbers bought on Telnyx.", "enum": [ - "vapi" + "telnyx" ] }, "id": { @@ -16816,10 +20405,6 @@ "blocked" ] }, - "number": { - "type": "string", - "description": "These are the digits of the phone number you purchased from Vapi." - }, "name": { "type": "string", "description": "This is the name of the phone number. This is just for your own reference.", @@ -16841,23 +20426,13 @@ } ] }, - "numberDesiredAreaCode": { + "number": { "type": "string", - "description": "This is the area code of the phone number to purchase.", - "minLength": 3, - "maxLength": 3 + "description": "These are the digits of the phone number you own on your Telnyx." }, - "sipUri": { + "credentialId": { "type": "string", - "description": "This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer.\n\nThis is case-insensitive." - }, - "authentication": { - "description": "This enables authentication for incoming SIP INVITE requests to the `sipUri`.\n\nIf not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.", - "allOf": [ - { - "$ref": "#/components/schemas/SipAuthentication" - } - ] + "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups." } }, "required": [ @@ -16865,7 +20440,9 @@ "id", "orgId", "createdAt", - "updatedAt" + "updatedAt", + "number", + "credentialId" ] }, "CreateByoPhoneNumberDTO": { @@ -17026,7 +20603,7 @@ }, "credentialId": { "type": "string", - "description": "This is the credential that is used to make outgoing calls, and do operations like call transfer and hang up." + "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups." }, "name": { "type": "string", @@ -17123,6 +20700,65 @@ "provider" ] }, + "CreateTelnyxPhoneNumberDTO": { + "type": "object", + "properties": { + "fallbackDestination": { + "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.", + "oneOf": [ + { + "$ref": "#/components/schemas/TransferDestinationNumber", + "title": "NumberTransferDestination" + }, + { + "$ref": "#/components/schemas/TransferDestinationSip", + "title": "SipTransferDestination" + } + ] + }, + "provider": { + "type": "string", + "description": "This is to use numbers bought on Telnyx.", + "enum": [ + "telnyx" + ] + }, + "number": { + "type": "string", + "description": "These are the digits of the phone number you own on your Telnyx." + }, + "credentialId": { + "type": "string", + "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups." + }, + "name": { + "type": "string", + "description": "This is the name of the phone number. This is just for your own reference.", + "maxLength": 40 + }, + "assistantId": { + "type": "string", + "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "squadId": { + "type": "string", + "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "server": { + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + } + }, + "required": [ + "provider", + "number", + "credentialId" + ] + }, "UpdateByoPhoneNumberDTO": { "type": "object", "properties": { @@ -17271,7 +20907,7 @@ }, "credentialId": { "type": "string", - "description": "This is the credential that is used to make outgoing calls, and do operations like call transfer and hang up." + "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups." } } }, @@ -17326,7 +20962,7 @@ } } }, - "ImportVonagePhoneNumberDTO": { + "UpdateTelnyxPhoneNumberDTO": { "type": "object", "properties": { "fallbackDestination": { @@ -17342,15 +20978,6 @@ } ] }, - "vonagePhoneNumber": { - "type": "string", - "description": "These are the digits of the phone number you own on your Vonage.", - "deprecated": true - }, - "credentialId": { - "type": "string", - "description": "This is the credential that is used to make outgoing calls, and do operations like call transfer and hang up.\n\nYou can add the Vonage Credential in the Provider Credentials page on the dashboard to get the credentialId." - }, "name": { "type": "string", "description": "This is the name of the phone number. This is just for your own reference.", @@ -17371,456 +20998,430 @@ "$ref": "#/components/schemas/Server" } ] - } - }, - "required": [ - "vonagePhoneNumber", - "credentialId" - ] - }, - "PhoneNumberPaginatedResponse": { - "type": "object", - "properties": { - "results": { - "type": "array", - "description": "A list of phone numbers, which can be of any provider type.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ByoPhoneNumber" - }, - { - "$ref": "#/components/schemas/TwilioPhoneNumber" - }, - { - "$ref": "#/components/schemas/VonagePhoneNumber" - }, - { - "$ref": "#/components/schemas/VapiPhoneNumber" - } - ] - } }, - "metadata": { - "description": "Metadata about the pagination.", - "allOf": [ - { - "$ref": "#/components/schemas/PaginationMeta" - } - ] + "number": { + "type": "string", + "description": "These are the digits of the phone number you own on your Telnyx." + }, + "credentialId": { + "type": "string", + "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups." } - }, - "required": [ - "results", - "metadata" - ] + } }, - "Squad": { + "ImportVonagePhoneNumberDTO": { "type": "object", "properties": { - "name": { - "type": "string", - "description": "This is the name of the squad." - }, - "members": { - "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SquadMemberDTO" - } - }, - "membersOverrides": { - "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.", - "allOf": [ + "fallbackDestination": { + "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.", + "oneOf": [ { - "$ref": "#/components/schemas/AssistantOverrides" + "$ref": "#/components/schemas/TransferDestinationNumber", + "title": "NumberTransferDestination" + }, + { + "$ref": "#/components/schemas/TransferDestinationSip", + "title": "SipTransferDestination" } ] }, - "id": { - "type": "string", - "description": "This is the unique identifier for the squad." - }, - "orgId": { + "vonagePhoneNumber": { "type": "string", - "description": "This is the unique identifier for the org that this squad belongs to." + "description": "These are the digits of the phone number you own on your Vonage.", + "deprecated": true }, - "createdAt": { - "format": "date-time", + "credentialId": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the squad was created." + "description": "This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups." }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the squad was last updated." - } - }, - "required": [ - "members", - "id", - "orgId", - "createdAt", - "updatedAt" - ] - }, - "UpdateSquadDTO": { - "type": "object", - "properties": { "name": { "type": "string", - "description": "This is the name of the squad." - }, - "members": { - "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SquadMemberDTO" - } - }, - "membersOverrides": { - "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.", - "allOf": [ - { - "$ref": "#/components/schemas/AssistantOverrides" - } - ] - } - }, - "required": [ - "members" - ] - }, - "TrieveKnowledgeBaseSearchPlan": { - "type": "object", - "properties": { - "topK": { - "type": "number", - "description": "Specifies the number of top chunks to return. This corresponds to the `page_size` parameter in Trieve." - }, - "removeStopWords": { - "type": "boolean", - "description": "If true, stop words (specified in server/src/stop-words.txt in the git repo) will be removed. This will preserve queries that are entirely stop words." + "description": "This is the name of the phone number. This is just for your own reference.", + "maxLength": 40 }, - "scoreThreshold": { - "type": "number", - "description": "This is the score threshold to filter out chunks with a score below the threshold for cosine distance metric. For Manhattan Distance, Euclidean Distance, and Dot Product, it will filter out scores above the threshold distance. This threshold applies before weight and bias modifications. If not specified, this defaults to no threshold. A threshold of 0 will default to no threshold." + "assistantId": { + "type": "string", + "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." }, - "searchType": { + "squadId": { "type": "string", - "description": "This is the search method used when searching for relevant chunks from the vector store.", - "enum": [ - "fulltext", - "semantic", - "hybrid", - "bm25" + "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId` nor `squadId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "server": { + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } ] } }, "required": [ - "searchType" + "vonagePhoneNumber", + "credentialId" ] }, - "TrieveKnowledgeBase": { + "PhoneNumberPaginatedResponse": { "type": "object", "properties": { - "provider": { - "type": "string", - "description": "This knowledge base is provided by Trieve.\n\nTo learn more about Trieve, visit https://trieve.ai.", - "enum": [ - "trieve" - ] - }, - "name": { - "type": "string", - "description": "This is the name of the knowledge base." + "results": { + "type": "array", + "description": "A list of phone numbers, which can be of any provider type.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ByoPhoneNumber" + }, + { + "$ref": "#/components/schemas/TwilioPhoneNumber" + }, + { + "$ref": "#/components/schemas/VonagePhoneNumber" + }, + { + "$ref": "#/components/schemas/VapiPhoneNumber" + }, + { + "$ref": "#/components/schemas/TelnyxPhoneNumber" + } + ] + } }, - "searchPlan": { - "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.", + "metadata": { + "description": "Metadata about the pagination.", "allOf": [ { - "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan" - } - ] - }, - "createPlan": { - "description": "This is the plan if you want us to create/import a new vector store using Trieve.", - "oneOf": [ - { - "$ref": "#/components/schemas/TrieveKnowledgeBaseImport", - "title": "Import" + "$ref": "#/components/schemas/PaginationMeta" } ] - }, - "id": { - "type": "string", - "description": "This is the id of the knowledge base." - }, - "orgId": { - "type": "string", - "description": "This is the org id of the knowledge base." } }, "required": [ - "provider", - "id", - "orgId" + "results", + "metadata" ] }, - "CustomKnowledgeBase": { + "DtmfTool": { "type": "object", "properties": { - "provider": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } + }, + "type": { "type": "string", - "description": "This knowledge base is bring your own knowledge base implementation.", "enum": [ - "custom-knowledge-base" - ] - }, - "server": { - "description": "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n \"messsage\": {\n \"type\": \"knowledge-base-request\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Why is ocean blue?\"\n }\n ],\n ...other metadata about the call...\n }\n}\n\nResponse Expected:\n```\n{\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK\n \"documents\": [\n {\n \"content\": \"The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.\",\n \"similarity\": 1\n },\n {\n \"content\": \"Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n \"similarity\": .5\n }\n ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] + "dtmf" + ], + "description": "The type of tool. \"dtmf\" for DTMF tool." }, "id": { "type": "string", - "description": "This is the id of the knowledge base." + "description": "This is the unique identifier for the tool." }, "orgId": { "type": "string", - "description": "This is the org id of the knowledge base." - } - }, - "required": [ - "provider", - "server", - "id", - "orgId" - ] - }, - "CreateTrieveKnowledgeBaseDTO": { - "type": "object", - "properties": { - "provider": { + "description": "This is the unique identifier for the organization that this tool belongs to." + }, + "createdAt": { + "format": "date-time", "type": "string", - "description": "This knowledge base is provided by Trieve.\n\nTo learn more about Trieve, visit https://trieve.ai.", - "enum": [ - "trieve" - ] + "description": "This is the ISO 8601 date-time string of when the tool was created." }, - "name": { + "updatedAt": { + "format": "date-time", "type": "string", - "description": "This is the name of the knowledge base." + "description": "This is the ISO 8601 date-time string of when the tool was last updated." }, - "searchPlan": { - "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.", + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ { - "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan" + "$ref": "#/components/schemas/OpenAIFunction" } ] }, - "createPlan": { - "description": "This is the plan if you want us to create/import a new vector store using Trieve.", - "oneOf": [ + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ { - "$ref": "#/components/schemas/TrieveKnowledgeBaseImport", - "title": "Import" + "$ref": "#/components/schemas/Server" } ] } }, "required": [ - "provider" + "type", + "id", + "orgId", + "createdAt", + "updatedAt" ] }, - "UpdateTrieveKnowledgeBaseDTO": { + "EndCallTool": { "type": "object", "properties": { - "name": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } + }, + "type": { "type": "string", - "description": "This is the name of the knowledge base." + "enum": [ + "endCall" + ], + "description": "The type of tool. \"endCall\" for End Call tool." }, - "searchPlan": { - "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.", + "id": { + "type": "string", + "description": "This is the unique identifier for the tool." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the organization that this tool belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was last updated." + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ { - "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan" + "$ref": "#/components/schemas/OpenAIFunction" } ] }, - "createPlan": { - "description": "This is the plan if you want us to create/import a new vector store using Trieve.", - "oneOf": [ - { - "$ref": "#/components/schemas/TrieveKnowledgeBaseImport", - "title": "Import" - } - ] - } - } - }, - "UpdateCustomKnowledgeBaseDTO": { - "type": "object", - "properties": { "server": { - "description": "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n \"messsage\": {\n \"type\": \"knowledge-base-request\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Why is ocean blue?\"\n }\n ],\n ...other metadata about the call...\n }\n}\n\nResponse Expected:\n```\n{\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK\n \"documents\": [\n {\n \"content\": \"The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.\",\n \"similarity\": 1\n },\n {\n \"content\": \"Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n \"similarity\": .5\n }\n ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```", + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", "allOf": [ { "$ref": "#/components/schemas/Server" } ] } - } + }, + "required": [ + "type", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "TrieveKnowledgeBaseChunkPlan": { + "FunctionTool": { "type": "object", "properties": { - "fileIds": { - "description": "These are the file ids that will be used to create the vector store. To upload files, use the `POST /files` endpoint.", - "type": "array", - "items": { - "type": "string" - } - }, - "websites": { - "description": "These are the websites that will be used to create the vector store.", - "type": "array", - "items": { - "type": "string" - } - }, - "targetSplitsPerChunk": { - "type": "number", - "description": "This is an optional field which allows you to specify the number of splits you want per chunk. If not specified, the default 20 is used. However, you may want to use a different number." + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false }, - "splitDelimiters": { - "description": "This is an optional field which allows you to specify the delimiters to use when splitting the file before chunking the text. If not specified, the default [.!?\\n] are used to split into sentences. However, you may want to use spaces or other delimiters.", + "messages": { "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", "items": { - "type": "string" + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] } }, - "rebalanceChunks": { - "type": "boolean", - "description": "This is an optional field which allows you to specify whether or not to rebalance the chunks created from the file. If not specified, the default true is used. If true, Trieve will evenly distribute remainder splits across chunks such that 66 splits with a target_splits_per_chunk of 20 will result in 3 chunks with 22 splits each." - } - } - }, - "TrieveKnowledgeBaseCreate": { - "type": "object", - "properties": { "type": { "type": "string", - "description": "This is to create a new dataset on Trieve.", "enum": [ - "create" - ] + "function" + ], + "description": "The type of tool. \"function\" for Function tool." }, - "chunkPlans": { - "description": "These are the chunk plans used to create the dataset.", - "type": "array", - "items": { - "$ref": "#/components/schemas/TrieveKnowledgeBaseChunkPlan" - } - } - }, - "required": [ - "type", - "chunkPlans" - ] - }, - "TrieveKnowledgeBaseImport": { - "type": "object", - "properties": { - "type": { + "id": { "type": "string", - "description": "This is to import an existing dataset from Trieve.", - "enum": [ - "import" - ] + "description": "This is the unique identifier for the tool." }, - "providerId": { + "orgId": { "type": "string", - "description": "This is the `datasetId` of the dataset on your Trieve account." + "description": "This is the unique identifier for the organization that this tool belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was last updated." + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] + }, + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] } }, "required": [ "type", - "providerId" + "id", + "orgId", + "createdAt", + "updatedAt" ] }, - "ConversationBlock": { + "GhlTool": { "type": "object", "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, "messages": { "type": "array", - "description": "These are the pre-configured messages that will be spoken to the user while the block is running.", + "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/BlockStartMessage", - "title": "BlockStartMessage" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/BlockCompleteMessage", - "title": "BlockCompleteMessage" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "inputSchema": { - "description": "This is the input schema for the block. This is the input the block needs to run. It's given to the block as `steps[0].input`\n\nThese are accessible as variables:\n- ({{input.propertyName}}) in context of the block execution (step)\n- ({{stepName.input.propertyName}}) in context of the workflow", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, - "outputSchema": { - "description": "This is the output schema for the block. This is the output the block will return to the workflow (`{{stepName.output}}`).\n\nThese are accessible as variables:\n- ({{output.propertyName}}) in context of the block execution (step)\n- ({{stepName.output.propertyName}}) in context of the workflow (read caveat #1)\n- ({{blockName.output.propertyName}}) in context of the workflow (read caveat #2)\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, "type": { "type": "string", - "description": "This block is used for conversation. This can be a free flow conversation or a conversation with a specific goal like collecting some information.\n\nFor free block conversation, put clearly in the `instruction` when the block can be considered done.\n```\n{\n \"type\": \"conversation\",\n \"instruction\": \"Chit chat with the user asking them about their day. When user asks a specific question or once you have talked to the user for a couple of turns of conversation, move on.\"\n}\n```\n\nFor conversation with a specific goal, you can define an `outputSchema` with required fields. The block won't be considered done until the user has provided all the required fields in the `outputSchema`.\n```\n{\n \"type\": \"conversation\",\n \"instruction\": \"Ask the user about their hobbies, hopes and dreams.\",\n \"outputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"hobbies\": {\n \"type\": \"string\"\n },\n \"hopes\": {\n \"type\": \"string\"\n },\n \"dreams\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\"hobbies\"]\n }\n}\n```\nFor the above example, the conversation block will be considered done once the user has provided the `hobbies` (even if they have not provided the `hopes` and `dreams`).", "enum": [ - "conversation" - ] + "ghl" + ], + "description": "The type of tool. \"ghl\" for GHL tool." }, "id": { "type": "string", - "description": "This is the unique identifier for the block." + "description": "This is the unique identifier for the tool." }, "orgId": { "type": "string", - "description": "This is the unique identifier for the organization that this block belongs to." + "description": "This is the unique identifier for the organization that this tool belongs to." }, "createdAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the block was created." + "description": "This is the ISO 8601 date-time string of when the tool was created." }, "updatedAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the block was last updated." + "description": "This is the ISO 8601 date-time string of when the tool was last updated." }, - "name": { - "type": "string", - "description": "This is the name of the block. This is just for your reference." + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] }, - "instruction": { - "type": "string", - "description": "This is the instruction to the model.\n\nYou can reference any variable in the context of the current block execution (step):\n- \"{{input.your-property-name}}\" for the current step's input\n- \"{{your-step-name.output.your-property-name}}\" for another step's output (in the same workflow; read caveat #1)\n- \"{{your-step-name.input.your-property-name}}\" for another step's input (in the same workflow; read caveat #1)\n- \"{{your-block-name.output.your-property-name}}\" for another block's output (in the same workflow; read caveat #2)\n- \"{{your-block-name.input.your-property-name}}\" for another block's input (in the same workflow; read caveat #2)\n- \"{{workflow.input.your-property-name}}\" for the current workflow's input\n- \"{{global.your-property-name}}\" for the global context\n\nThis can be as simple or as complex as you want it to be.\n- \"say hello and ask the user about their day!\"\n- \"collect the user's first and last name\"\n- \"user is {{input.firstName}} {{input.lastName}}. their age is {{input.age}}. ask them about their salary and if they might be interested in buying a house. we offer {{input.offer}}\"\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output/input.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output/input.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", - "minLength": 1 + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + }, + "metadata": { + "$ref": "#/components/schemas/GhlToolMetadata" } }, "required": [ @@ -17829,109 +21430,84 @@ "orgId", "createdAt", "updatedAt", - "instruction" + "metadata" ] }, - "ToolCallBlock": { + "MakeTool": { "type": "object", "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, "messages": { "type": "array", - "description": "These are the pre-configured messages that will be spoken to the user while the block is running.", + "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/BlockStartMessage", - "title": "BlockStartMessage" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/BlockCompleteMessage", - "title": "BlockCompleteMessage" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "inputSchema": { - "description": "This is the input schema for the block. This is the input the block needs to run. It's given to the block as `steps[0].input`\n\nThese are accessible as variables:\n- ({{input.propertyName}}) in context of the block execution (step)\n- ({{stepName.input.propertyName}}) in context of the workflow", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, - "outputSchema": { - "description": "This is the output schema for the block. This is the output the block will return to the workflow (`{{stepName.output}}`).\n\nThese are accessible as variables:\n- ({{output.propertyName}}) in context of the block execution (step)\n- ({{stepName.output.propertyName}}) in context of the workflow (read caveat #1)\n- ({{blockName.output.propertyName}}) in context of the workflow (read caveat #2)\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, "type": { "type": "string", - "description": "This block makes a tool call.", "enum": [ - "tool-call" - ] - }, - "tool": { - "description": "This is the tool that the block will call. To use an existing tool, use `toolId`.", - "oneOf": [ - { - "$ref": "#/components/schemas/CreateDtmfToolDTO", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/CreateEndCallToolDTO", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/CreateVoicemailToolDTO", - "title": "VoicemailTool" - }, - { - "$ref": "#/components/schemas/CreateFunctionToolDTO", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/CreateGhlToolDTO", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/CreateMakeToolDTO", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/CreateTransferCallToolDTO", - "title": "TransferCallTool" - } - ] + "make" + ], + "description": "The type of tool. \"make\" for Make tool." }, "id": { "type": "string", - "description": "This is the unique identifier for the block." + "description": "This is the unique identifier for the tool." }, "orgId": { "type": "string", - "description": "This is the unique identifier for the organization that this block belongs to." + "description": "This is the unique identifier for the organization that this tool belongs to." }, "createdAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the block was created." + "description": "This is the ISO 8601 date-time string of when the tool was created." }, "updatedAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the block was last updated." + "description": "This is the ISO 8601 date-time string of when the tool was last updated." }, - "name": { - "type": "string", - "description": "This is the name of the block. This is just for your reference." + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] }, - "toolId": { - "type": "string", - "description": "This is the id of the tool that the block will call. To use a transient tool, use `tool`." + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + }, + "metadata": { + "$ref": "#/components/schemas/MakeToolMetadata" } }, "required": [ @@ -17939,88 +21515,105 @@ "id", "orgId", "createdAt", - "updatedAt" + "updatedAt", + "metadata" ] }, - "WorkflowBlock": { + "TransferCallTool": { "type": "object", "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, "messages": { "type": "array", - "description": "These are the pre-configured messages that will be spoken to the user while the block is running.", + "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/BlockStartMessage", - "title": "BlockStartMessage" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/BlockCompleteMessage", - "title": "BlockCompleteMessage" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "inputSchema": { - "description": "This is the input schema for the block. This is the input the block needs to run. It's given to the block as `steps[0].input`\n\nThese are accessible as variables:\n- ({{input.propertyName}}) in context of the block execution (step)\n- ({{stepName.input.propertyName}}) in context of the workflow", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, - "outputSchema": { - "description": "This is the output schema for the block. This is the output the block will return to the workflow (`{{stepName.output}}`).\n\nThese are accessible as variables:\n- ({{output.propertyName}}) in context of the block execution (step)\n- ({{stepName.output.propertyName}}) in context of the workflow (read caveat #1)\n- ({{blockName.output.propertyName}}) in context of the workflow (read caveat #2)\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, "type": { "type": "string", - "description": "This creates a workflow which can contain any number of steps (block executions).", "enum": [ - "workflow" + "transferCall" ] }, - "steps": { + "destinations": { "type": "array", - "description": "These are the steps in the workflow.", + "description": "These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called.", "items": { "oneOf": [ { - "$ref": "#/components/schemas/HandoffStep", - "title": "HandoffStep" + "$ref": "#/components/schemas/TransferDestinationAssistant", + "title": "Assistant" + }, + { + "$ref": "#/components/schemas/TransferDestinationStep", + "title": "Step" + }, + { + "$ref": "#/components/schemas/TransferDestinationNumber", + "title": "Number" }, { - "$ref": "#/components/schemas/CallbackStep", - "title": "CallbackStep" + "$ref": "#/components/schemas/TransferDestinationSip", + "title": "Sip" } ] } }, "id": { "type": "string", - "description": "This is the unique identifier for the block." + "description": "This is the unique identifier for the tool." }, "orgId": { "type": "string", - "description": "This is the unique identifier for the organization that this block belongs to." + "description": "This is the unique identifier for the organization that this tool belongs to." }, "createdAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the block was created." + "description": "This is the ISO 8601 date-time string of when the tool was created." }, "updatedAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the block was last updated." + "description": "This is the ISO 8601 date-time string of when the tool was last updated." }, - "name": { - "type": "string", - "description": "This is the name of the block. This is just for your reference." + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] + }, + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] } }, "required": [ @@ -18031,557 +21624,768 @@ "updatedAt" ] }, - "RuleBasedCondition": { + "OutputTool": { "type": "object", "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } + }, "type": { "type": "string", - "description": "This condition is based on a strict rule.", "enum": [ - "rule-based" - ] + "output" + ], + "description": "The type of tool. \"output\" for Output tool." }, - "operator": { + "id": { "type": "string", - "description": "This is the operator you want to use to compare the left side and right side.\n\nThe operation becomes `(leftSide) operator (rightSide)`.", - "enum": [ - "eq", - "neq", - "gt", - "gte", - "lt", - "lte" - ] + "description": "This is the unique identifier for the tool." }, - "leftSide": { + "orgId": { "type": "string", - "description": "This is the left side of the operation.\n\nYou can reference any variable in the context of the current block execution (step):\n- \"{{output.your-property-name}}\" for current step's output\n- \"{{input.your-property-name}}\" for current step's input\n- \"{{your-step-name.output.your-property-name}}\" for another step's output (in the same workflow; read caveat #1)\n- \"{{your-step-name.input.your-property-name}}\" for another step's input (in the same workflow; read caveat #1)\n- \"{{your-block-name.output.your-property-name}}\" for another block's output (in the same workflow; read caveat #2)\n- \"{{your-block-name.input.your-property-name}}\" for another block's input (in the same workflow; read caveat #2)\n- \"{{workflow.input.your-property-name}}\" for the current workflow's input\n- \"{{global.your-property-name}}\" for the global context\n\nOr, you can use a constant:\n- \"1\"\n- \"text\"\n- \"true\"\n- \"false\"\n\nOr, you can mix and match with string interpolation:\n- \"{{your-property-name}}-{{input.your-property-name-2}}-1\"\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.input/output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.input/output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", - "maxLength": 1000 + "description": "This is the unique identifier for the organization that this tool belongs to." }, - "rightSide": { + "createdAt": { + "format": "date-time", "type": "string", - "description": "This is the right side of the operation.\n\nYou can reference any variable in the context of the current block execution (step):\n- \"{{output.your-property-name}}\" for current step's output\n- \"{{input.your-property-name}}\" for current step's input\n- \"{{your-step-name.output.your-property-name}}\" for another step's output (in the same workflow; read caveat #1)\n- \"{{your-step-name.input.your-property-name}}\" for another step's input (in the same workflow; read caveat #1)\n- \"{{your-block-name.output.your-property-name}}\" for another block's output (in the same workflow; read caveat #2)\n- \"{{your-block-name.input.your-property-name}}\" for another block's input (in the same workflow; read caveat #2)\n- \"{{workflow.input.your-property-name}}\" for the current workflow's input\n- \"{{global.your-property-name}}\" for the global context\n\nOr, you can use a constant:\n- \"1\"\n- \"text\"\n- \"true\"\n- \"false\"\n\nOr, you can mix and match with string interpolation:\n- \"{{your-property-name}}-{{input.your-property-name-2}}-1\"\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.input/output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.input/output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", - "maxLength": 1000 - } - }, - "required": [ - "type", - "operator", - "leftSide", - "rightSide" - ] - }, - "ModelBasedCondition": { - "type": "object", - "properties": { - "type": { + "description": "This is the ISO 8601 date-time string of when the tool was created." + }, + "updatedAt": { + "format": "date-time", "type": "string", - "description": "This condition is based on a model.", - "enum": [ - "model-based" + "description": "This is the ISO 8601 date-time string of when the tool was last updated." + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } ] }, - "instruction": { - "type": "string", - "description": "This is the instruction which should output a boolean value when passed to a model.\n\nYou can reference any variable in the context of the current block execution (step):\n- \"{{output.your-property-name}}\" for current step's output\n- \"{{input.your-property-name}}\" for current step's input\n- \"{{your-step-name.output.your-property-name}}\" for another step's output (in the same workflow; read caveat #1)\n- \"{{your-step-name.input.your-property-name}}\" for another step's input (in the same workflow; read caveat #1)\n- \"{{your-block-name.output.your-property-name}}\" for another block's output (in the same workflow; read caveat #2)\n- \"{{your-block-name.input.your-property-name}}\" for another block's input (in the same workflow; read caveat #2)\n- \"{{workflow.input.your-property-name}}\" for the current workflow's input\n- \"{{global.your-property-name}}\" for the global context\n\nYou can also talk about the current step's output or input directly:\n- \"{{output.your-property-name}} is greater than 10\"\n- \"{{input.your-property-name}} is greater than 10\"\n\nExamples:\n - \"{{input.age}} is greater than 10\"\n - \"{{input.age}} is greater than {{input.age2}}\"\n - \"{{output.age}} is greater than 10\"\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.input/output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.input/output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", - "minLength": 1 + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] } }, "required": [ "type", - "instruction" + "id", + "orgId", + "createdAt", + "updatedAt" ] }, - "BlockStartMessage": { + "BashTool": { "type": "object", "properties": { - "contents": { - "type": "array", - "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TextContent", - "title": "Text" - } - ] - } + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false }, - "conditions": { + "messages": { "type": "array", - "description": "This is an optional array of conditions that must be met for this message to be triggered.", + "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/ModelBasedCondition", - "title": "ModelBasedCondition" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/RuleBasedCondition", - "title": "RuleBasedCondition" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "type": { + "type": { + "type": "string", + "enum": [ + "bash" + ], + "description": "The type of tool. \"bash\" for Bash tool." + }, + "subType": { + "type": "string", + "enum": [ + "bash_20241022" + ], + "description": "The sub type of tool." + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the tool." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the organization that this tool belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was last updated." + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] + }, + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + }, + "name": { "type": "string", - "description": "This is the message type that is triggered when the block starts.", + "description": "The name of the tool, fixed to 'bash'", + "default": "bash", "enum": [ - "block-start" + "bash" ] - }, - "content": { - "type": "string", - "description": "This is the content that the assistant will say when this message is triggered.", - "maxLength": 1000 } }, "required": [ - "type" + "type", + "subType", + "id", + "orgId", + "createdAt", + "updatedAt", + "name" ] }, - "BlockCompleteMessage": { + "ComputerTool": { "type": "object", "properties": { - "contents": { - "type": "array", - "description": "This is an alternative to the `content` property. It allows to specify variants of the same content, one per language.\n\nUsage:\n- If your assistants are multilingual, you can provide content for each language.\n- If you don't provide content for a language, the first item in the array will be automatically translated to the active language at that moment.\n\nThis will override the `content` property.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TextContent", - "title": "Text" - } - ] - } + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false }, - "conditions": { + "messages": { "type": "array", - "description": "This is an optional array of conditions that must be met for this message to be triggered.", + "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/ModelBasedCondition", - "title": "ModelBasedCondition" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/RuleBasedCondition", - "title": "RuleBasedCondition" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, "type": { "type": "string", - "description": "This is the message type that is triggered when the block completes.", "enum": [ - "block-complete" - ] + "computer" + ], + "description": "The type of tool. \"computer\" for Computer tool." }, - "content": { + "subType": { "type": "string", - "description": "This is the content that the assistant will say when this message is triggered.", - "maxLength": 1000 - } - }, - "required": [ - "type" - ] - }, - "CreateConversationBlockDTO": { - "type": "object", - "properties": { - "messages": { - "type": "array", - "description": "These are the pre-configured messages that will be spoken to the user while the block is running.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/BlockStartMessage", - "title": "BlockStartMessage" - }, - { - "$ref": "#/components/schemas/BlockCompleteMessage", - "title": "BlockCompleteMessage" - } - ] - } + "enum": [ + "computer_20241022" + ], + "description": "The sub type of tool." + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the tool." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the organization that this tool belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was last updated." }, - "inputSchema": { - "description": "This is the input schema for the block. This is the input the block needs to run. It's given to the block as `steps[0].input`\n\nThese are accessible as variables:\n- ({{input.propertyName}}) in context of the block execution (step)\n- ({{stepName.input.propertyName}}) in context of the workflow", + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ { - "$ref": "#/components/schemas/JsonSchema" + "$ref": "#/components/schemas/OpenAIFunction" } ] }, - "outputSchema": { - "description": "This is the output schema for the block. This is the output the block will return to the workflow (`{{stepName.output}}`).\n\nThese are accessible as variables:\n- ({{output.propertyName}}) in context of the block execution (step)\n- ({{stepName.output.propertyName}}) in context of the workflow (read caveat #1)\n- ({{blockName.output.propertyName}}) in context of the workflow (read caveat #2)\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", "allOf": [ { - "$ref": "#/components/schemas/JsonSchema" + "$ref": "#/components/schemas/Server" } ] }, - "type": { + "name": { "type": "string", - "description": "This block is used for conversation. This can be a free flow conversation or a conversation with a specific goal like collecting some information.\n\nFor free block conversation, put clearly in the `instruction` when the block can be considered done.\n```\n{\n \"type\": \"conversation\",\n \"instruction\": \"Chit chat with the user asking them about their day. When user asks a specific question or once you have talked to the user for a couple of turns of conversation, move on.\"\n}\n```\n\nFor conversation with a specific goal, you can define an `outputSchema` with required fields. The block won't be considered done until the user has provided all the required fields in the `outputSchema`.\n```\n{\n \"type\": \"conversation\",\n \"instruction\": \"Ask the user about their hobbies, hopes and dreams.\",\n \"outputSchema\": {\n \"type\": \"object\",\n \"properties\": {\n \"hobbies\": {\n \"type\": \"string\"\n },\n \"hopes\": {\n \"type\": \"string\"\n },\n \"dreams\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\"hobbies\"]\n }\n}\n```\nFor the above example, the conversation block will be considered done once the user has provided the `hobbies` (even if they have not provided the `hopes` and `dreams`).", + "description": "The name of the tool, fixed to 'computer'", + "default": "computer", "enum": [ - "conversation" + "computer" ] }, - "instruction": { - "type": "string", - "description": "This is the instruction to the model.\n\nYou can reference any variable in the context of the current block execution (step):\n- \"{{input.your-property-name}}\" for the current step's input\n- \"{{your-step-name.output.your-property-name}}\" for another step's output (in the same workflow; read caveat #1)\n- \"{{your-step-name.input.your-property-name}}\" for another step's input (in the same workflow; read caveat #1)\n- \"{{your-block-name.output.your-property-name}}\" for another block's output (in the same workflow; read caveat #2)\n- \"{{your-block-name.input.your-property-name}}\" for another block's input (in the same workflow; read caveat #2)\n- \"{{workflow.input.your-property-name}}\" for the current workflow's input\n- \"{{global.your-property-name}}\" for the global context\n\nThis can be as simple or as complex as you want it to be.\n- \"say hello and ask the user about their day!\"\n- \"collect the user's first and last name\"\n- \"user is {{input.firstName}} {{input.lastName}}. their age is {{input.age}}. ask them about their salary and if they might be interested in buying a house. we offer {{input.offer}}\"\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output/input.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output/input.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", - "minLength": 1 + "displayWidthPx": { + "type": "number", + "description": "The display width in pixels" }, - "name": { - "type": "string", - "description": "This is the name of the block. This is just for your reference." + "displayHeightPx": { + "type": "number", + "description": "The display height in pixels" + }, + "displayNumber": { + "type": "number", + "description": "Optional display number" } }, "required": [ "type", - "instruction" + "subType", + "id", + "orgId", + "createdAt", + "updatedAt", + "name", + "displayWidthPx", + "displayHeightPx" ] }, - "CreateToolCallBlockDTO": { + "TextEditorTool": { "type": "object", "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, "messages": { "type": "array", - "description": "These are the pre-configured messages that will be spoken to the user while the block is running.", + "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/BlockStartMessage", - "title": "BlockStartMessage" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/BlockCompleteMessage", - "title": "BlockCompleteMessage" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "inputSchema": { - "description": "This is the input schema for the block. This is the input the block needs to run. It's given to the block as `steps[0].input`\n\nThese are accessible as variables:\n- ({{input.propertyName}}) in context of the block execution (step)\n- ({{stepName.input.propertyName}}) in context of the workflow", + "type": { + "type": "string", + "enum": [ + "textEditor" + ], + "description": "The type of tool. \"textEditor\" for Text Editor tool." + }, + "subType": { + "type": "string", + "enum": [ + "text_editor_20241022" + ], + "description": "The sub type of tool." + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the tool." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the organization that this tool belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was last updated." + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ { - "$ref": "#/components/schemas/JsonSchema" + "$ref": "#/components/schemas/OpenAIFunction" } ] }, - "outputSchema": { - "description": "This is the output schema for the block. This is the output the block will return to the workflow (`{{stepName.output}}`).\n\nThese are accessible as variables:\n- ({{output.propertyName}}) in context of the block execution (step)\n- ({{stepName.output.propertyName}}) in context of the workflow (read caveat #1)\n- ({{blockName.output.propertyName}}) in context of the workflow (read caveat #2)\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", "allOf": [ { - "$ref": "#/components/schemas/JsonSchema" + "$ref": "#/components/schemas/Server" } ] }, - "type": { + "name": { "type": "string", - "description": "This block makes a tool call.", + "description": "The name of the tool, fixed to 'str_replace_editor'", + "default": "str_replace_editor", "enum": [ - "tool-call" + "str_replace_editor" ] + } + }, + "required": [ + "type", + "subType", + "id", + "orgId", + "createdAt", + "updatedAt", + "name" + ] + }, + "KnowledgeBase": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the knowledge base", + "example": "My Knowledge Base" }, - "tool": { - "description": "This is the tool that the block will call. To use an existing tool, use `toolId`.", - "oneOf": [ - { - "$ref": "#/components/schemas/CreateDtmfToolDTO", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/CreateEndCallToolDTO", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/CreateVoicemailToolDTO", - "title": "VoicemailTool" - }, - { - "$ref": "#/components/schemas/CreateFunctionToolDTO", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/CreateGhlToolDTO", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/CreateMakeToolDTO", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/CreateTransferCallToolDTO", - "title": "TransferCallTool" - } - ] + "provider": { + "type": "string", + "description": "The provider of the knowledge base", + "enum": [ + "google" + ], + "example": "google" + }, + "model": { + "type": "object", + "description": "The model to use for the knowledge base", + "enum": [ + "gemini-2.0-flash-thinking-exp", + "gemini-2.0-pro-exp-02-05", + "gemini-2.0-flash", + "gemini-2.0-flash-lite", + "gemini-2.0-flash-lite-preview-02-05", + "gemini-2.0-flash-exp", + "gemini-2.0-flash-realtime-exp", + "gemini-1.5-flash", + "gemini-1.5-flash-002", + "gemini-1.5-pro", + "gemini-1.5-pro-002", + "gemini-1.0-pro" + ], + "example": "gemini-1.5-flash" }, - "toolId": { + "description": { "type": "string", - "description": "This is the id of the tool that the block will call. To use a transient tool, use `tool`." + "description": "A description of the knowledge base" }, - "name": { - "type": "string", - "description": "This is the name of the block. This is just for your reference." + "fileIds": { + "description": "The file IDs associated with this knowledge base", + "type": "array", + "items": { + "type": "string" + } } }, "required": [ - "type" + "name", + "provider", + "model", + "description", + "fileIds" ] }, - "CreateWorkflowBlockDTO": { + "QueryTool": { "type": "object", "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, "messages": { "type": "array", - "description": "These are the pre-configured messages that will be spoken to the user while the block is running.", + "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/BlockStartMessage", - "title": "BlockStartMessage" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/BlockCompleteMessage", - "title": "BlockCompleteMessage" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "inputSchema": { - "description": "This is the input schema for the block. This is the input the block needs to run. It's given to the block as `steps[0].input`\n\nThese are accessible as variables:\n- ({{input.propertyName}}) in context of the block execution (step)\n- ({{stepName.input.propertyName}}) in context of the workflow", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, - "outputSchema": { - "description": "This is the output schema for the block. This is the output the block will return to the workflow (`{{stepName.output}}`).\n\nThese are accessible as variables:\n- ({{output.propertyName}}) in context of the block execution (step)\n- ({{stepName.output.propertyName}}) in context of the workflow (read caveat #1)\n- ({{blockName.output.propertyName}}) in context of the workflow (read caveat #2)\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, "type": { "type": "string", - "description": "This creates a workflow which can contain any number of steps (block executions).", "enum": [ - "workflow" - ] + "query" + ], + "description": "The type of tool. \"query\" for Query tool." }, - "steps": { + "knowledgeBases": { + "description": "The knowledge bases to query", "type": "array", - "description": "These are the steps in the workflow.", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/HandoffStep", - "title": "HandoffStep" - }, - { - "$ref": "#/components/schemas/CallbackStep", - "title": "CallbackStep" - } - ] + "$ref": "#/components/schemas/KnowledgeBase" } }, - "name": { + "id": { + "type": "string", + "description": "This is the unique identifier for the tool." + }, + "orgId": { "type": "string", - "description": "This is the name of the block. This is just for your reference." + "description": "This is the unique identifier for the organization that this tool belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was last updated." + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] + }, + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] } }, "required": [ - "type" + "type", + "id", + "orgId", + "createdAt", + "updatedAt" ] }, - "UpdateConversationBlockDTO": { + "GoogleCalendarCreateEventTool": { "type": "object", "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, "messages": { "type": "array", - "description": "These are the pre-configured messages that will be spoken to the user while the block is running.", + "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/BlockStartMessage", - "title": "BlockStartMessage" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/BlockCompleteMessage", - "title": "BlockCompleteMessage" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "inputSchema": { - "description": "This is the input schema for the block. This is the input the block needs to run. It's given to the block as `steps[0].input`\n\nThese are accessible as variables:\n- ({{input.propertyName}}) in context of the block execution (step)\n- ({{stepName.input.propertyName}}) in context of the workflow", + "type": { + "type": "string", + "enum": [ + "google.calendar.event.create" + ], + "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool." + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the tool." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the organization that this tool belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was last updated." + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ { - "$ref": "#/components/schemas/JsonSchema" + "$ref": "#/components/schemas/OpenAIFunction" } ] }, - "outputSchema": { - "description": "This is the output schema for the block. This is the output the block will return to the workflow (`{{stepName.output}}`).\n\nThese are accessible as variables:\n- ({{output.propertyName}}) in context of the block execution (step)\n- ({{stepName.output.propertyName}}) in context of the workflow (read caveat #1)\n- ({{blockName.output.propertyName}}) in context of the workflow (read caveat #2)\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", "allOf": [ { - "$ref": "#/components/schemas/JsonSchema" + "$ref": "#/components/schemas/Server" } ] - }, - "name": { - "type": "string", - "description": "This is the name of the block. This is just for your reference." - }, - "instruction": { - "type": "string", - "description": "This is the instruction to the model.\n\nYou can reference any variable in the context of the current block execution (step):\n- \"{{input.your-property-name}}\" for the current step's input\n- \"{{your-step-name.output.your-property-name}}\" for another step's output (in the same workflow; read caveat #1)\n- \"{{your-step-name.input.your-property-name}}\" for another step's input (in the same workflow; read caveat #1)\n- \"{{your-block-name.output.your-property-name}}\" for another block's output (in the same workflow; read caveat #2)\n- \"{{your-block-name.input.your-property-name}}\" for another block's input (in the same workflow; read caveat #2)\n- \"{{workflow.input.your-property-name}}\" for the current workflow's input\n- \"{{global.your-property-name}}\" for the global context\n\nThis can be as simple or as complex as you want it to be.\n- \"say hello and ask the user about their day!\"\n- \"collect the user's first and last name\"\n- \"user is {{input.firstName}} {{input.lastName}}. their age is {{input.age}}. ask them about their salary and if they might be interested in buying a house. we offer {{input.offer}}\"\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output/input.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output/input.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", - "minLength": 1 } - } + }, + "required": [ + "type", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateToolCallBlockDTO": { + "GoogleSheetsRowAppendTool": { "type": "object", "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, "messages": { "type": "array", - "description": "These are the pre-configured messages that will be spoken to the user while the block is running.", + "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/BlockStartMessage", - "title": "BlockStartMessage" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/BlockCompleteMessage", - "title": "BlockCompleteMessage" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "inputSchema": { - "description": "This is the input schema for the block. This is the input the block needs to run. It's given to the block as `steps[0].input`\n\nThese are accessible as variables:\n- ({{input.propertyName}}) in context of the block execution (step)\n- ({{stepName.input.propertyName}}) in context of the workflow", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] + "type": { + "type": "string", + "enum": [ + "google.sheets.row.append" + ], + "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool." + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the tool." + }, + "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." }, - "outputSchema": { - "description": "This is the output schema for the block. This is the output the block will return to the workflow (`{{stepName.output}}`).\n\nThese are accessible as variables:\n- ({{output.propertyName}}) in context of the block execution (step)\n- ({{stepName.output.propertyName}}) in context of the workflow (read caveat #1)\n- ({{blockName.output.propertyName}}) in context of the workflow (read caveat #2)\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the tool was last updated." + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ { - "$ref": "#/components/schemas/JsonSchema" + "$ref": "#/components/schemas/OpenAIFunction" } ] }, - "tool": { - "description": "This is the tool that the block will call. To use an existing tool, use `toolId`.", - "oneOf": [ - { - "$ref": "#/components/schemas/CreateDtmfToolDTO", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/CreateEndCallToolDTO", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/CreateVoicemailToolDTO", - "title": "VoicemailTool" - }, - { - "$ref": "#/components/schemas/CreateFunctionToolDTO", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/CreateGhlToolDTO", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/CreateMakeToolDTO", - "title": "MakeTool" - }, + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ { - "$ref": "#/components/schemas/CreateTransferCallToolDTO", - "title": "TransferCallTool" + "$ref": "#/components/schemas/Server" } ] - }, - "name": { - "type": "string", - "description": "This is the name of the block. This is just for your reference." - }, - "toolId": { - "type": "string", - "description": "This is the id of the tool that the block will call. To use a transient tool, use `tool`." } - } + }, + "required": [ + "type", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateWorkflowBlockDTO": { + "CreateOutputToolDTO": { "type": "object", "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, "messages": { "type": "array", - "description": "These are the pre-configured messages that will be spoken to the user while the block is running.", + "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/BlockStartMessage", - "title": "BlockStartMessage" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/BlockCompleteMessage", - "title": "BlockCompleteMessage" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "inputSchema": { - "description": "This is the input schema for the block. This is the input the block needs to run. It's given to the block as `steps[0].input`\n\nThese are accessible as variables:\n- ({{input.propertyName}}) in context of the block execution (step)\n- ({{stepName.input.propertyName}}) in context of the workflow", + "type": { + "type": "string", + "enum": [ + "output" + ], + "description": "The type of tool. \"output\" for Output tool." + }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ { - "$ref": "#/components/schemas/JsonSchema" + "$ref": "#/components/schemas/OpenAIFunction" } ] }, - "outputSchema": { - "description": "This is the output schema for the block. This is the output the block will return to the workflow (`{{stepName.output}}`).\n\nThese are accessible as variables:\n- ({{output.propertyName}}) in context of the block execution (step)\n- ({{stepName.output.propertyName}}) in context of the workflow (read caveat #1)\n- ({{blockName.output.propertyName}}) in context of the workflow (read caveat #2)\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow with steps.", + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", "allOf": [ { - "$ref": "#/components/schemas/JsonSchema" + "$ref": "#/components/schemas/Server" } ] - }, - "steps": { - "type": "array", - "description": "These are the steps in the workflow.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/HandoffStep", - "title": "HandoffStep" - }, - { - "$ref": "#/components/schemas/CallbackStep", - "title": "CallbackStep" - } - ] - } - }, - "name": { - "type": "string", - "description": "This is the name of the block. This is just for your reference." } - } + }, + "required": [ + "type" + ] }, - "DtmfTool": { + "CreateBashToolDTO": { "type": "object", "properties": { "async": { @@ -18616,27 +22420,24 @@ "type": { "type": "string", "enum": [ - "dtmf" + "bash" ], - "description": "The type of tool. \"dtmf\" for DTMF tool." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." + "description": "The type of tool. \"bash\" for Bash tool." }, - "createdAt": { - "format": "date-time", + "subType": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." + "enum": [ + "bash_20241022" + ], + "description": "The sub type of tool." }, - "updatedAt": { - "format": "date-time", + "name": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." + "description": "The name of the tool, fixed to 'bash'", + "default": "bash", + "enum": [ + "bash" + ] }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", @@ -18657,13 +22458,11 @@ }, "required": [ "type", - "id", - "orgId", - "createdAt", - "updatedAt" + "subType", + "name" ] }, - "EndCallTool": { + "CreateComputerToolDTO": { "type": "object", "properties": { "async": { @@ -18698,27 +22497,36 @@ "type": { "type": "string", "enum": [ - "endCall" + "computer" ], - "description": "The type of tool. \"endCall\" for End Call tool." + "description": "The type of tool. \"computer\" for Computer tool." }, - "id": { + "subType": { "type": "string", - "description": "This is the unique identifier for the tool." + "enum": [ + "computer_20241022" + ], + "description": "The sub type of tool." }, - "orgId": { + "name": { "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." + "description": "The name of the tool, fixed to 'computer'", + "default": "computer", + "enum": [ + "computer" + ] }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." + "displayWidthPx": { + "type": "number", + "description": "The display width in pixels" }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." + "displayHeightPx": { + "type": "number", + "description": "The display height in pixels" + }, + "displayNumber": { + "type": "number", + "description": "Optional display number" }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", @@ -18739,13 +22547,13 @@ }, "required": [ "type", - "id", - "orgId", - "createdAt", - "updatedAt" + "subType", + "name", + "displayWidthPx", + "displayHeightPx" ] }, - "FunctionTool": { + "CreateTextEditorToolDTO": { "type": "object", "properties": { "async": { @@ -18780,27 +22588,24 @@ "type": { "type": "string", "enum": [ - "function" + "textEditor" ], - "description": "The type of tool. \"function\" for Function tool." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." + "description": "The type of tool. \"textEditor\" for Text Editor tool." }, - "createdAt": { - "format": "date-time", + "subType": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." + "enum": [ + "text_editor_20241022" + ], + "description": "The sub type of tool." }, - "updatedAt": { - "format": "date-time", + "name": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." + "description": "The name of the tool, fixed to 'str_replace_editor'", + "default": "str_replace_editor", + "enum": [ + "str_replace_editor" + ] }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", @@ -18821,13 +22626,11 @@ }, "required": [ "type", - "id", - "orgId", - "createdAt", - "updatedAt" + "subType", + "name" ] }, - "GhlTool": { + "CreateQueryToolDTO": { "type": "object", "properties": { "async": { @@ -18862,27 +22665,76 @@ "type": { "type": "string", "enum": [ - "ghl" + "query" ], - "description": "The type of tool. \"ghl\" for GHL tool." + "description": "The type of tool. \"query\" for Query tool." }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." + "knowledgeBases": { + "description": "The knowledge bases to query", + "type": "array", + "items": { + "$ref": "#/components/schemas/KnowledgeBase" + } }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + } + }, + "required": [ + "type" + ] + }, + "CreateGoogleCalendarCreateEventToolDTO": { + "type": "object", + "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, + "messages": { + "type": "array", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" + }, + { + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } }, - "updatedAt": { - "format": "date-time", + "type": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." + "enum": [ + "google.calendar.event.create" + ], + "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool." }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", @@ -18899,21 +22751,13 @@ "$ref": "#/components/schemas/Server" } ] - }, - "metadata": { - "$ref": "#/components/schemas/GhlToolMetadata" } }, "required": [ - "type", - "id", - "orgId", - "createdAt", - "updatedAt", - "metadata" + "type" ] }, - "MakeTool": { + "CreateGoogleSheetsRowAppendToolDTO": { "type": "object", "properties": { "async": { @@ -18948,27 +22792,9 @@ "type": { "type": "string", "enum": [ - "make" + "google.sheets.row.append" ], - "description": "The type of tool. \"make\" for Make tool." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." + "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool." }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", @@ -18985,21 +22811,13 @@ "$ref": "#/components/schemas/Server" } ] - }, - "metadata": { - "$ref": "#/components/schemas/MakeToolMetadata" } }, "required": [ - "type", - "id", - "orgId", - "createdAt", - "updatedAt", - "metadata" + "type" ] }, - "TransferCallTool": { + "UpdateDtmfToolDTO": { "type": "object", "properties": { "async": { @@ -19031,54 +22849,56 @@ ] } }, - "type": { - "type": "string", - "enum": [ - "transferCall" + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } ] }, - "destinations": { + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + } + } + }, + "UpdateEndCallToolDTO": { + "type": "object", + "properties": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, + "messages": { "type": "array", - "description": "These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called.", + "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", "items": { "oneOf": [ { - "$ref": "#/components/schemas/TransferDestinationAssistant", - "title": "Assistant" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" }, { - "$ref": "#/components/schemas/TransferDestinationStep", - "title": "Step" + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" }, { - "$ref": "#/components/schemas/TransferDestinationNumber", - "title": "Number" + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/TransferDestinationSip", - "title": "Sip" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." - }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ @@ -19095,16 +22915,9 @@ } ] } - }, - "required": [ - "type", - "id", - "orgId", - "createdAt", - "updatedAt" - ] + } }, - "OutputTool": { + "UpdateFunctionToolDTO": { "type": "object", "properties": { "async": { @@ -19136,31 +22949,6 @@ ] } }, - "type": { - "type": "string", - "enum": [ - "output" - ], - "description": "The type of tool. \"output\" for Output tool." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." - }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ @@ -19177,16 +22965,9 @@ } ] } - }, - "required": [ - "type", - "id", - "orgId", - "createdAt", - "updatedAt" - ] + } }, - "BashTool": { + "UpdateGhlToolDTO": { "type": "object", "properties": { "async": { @@ -19218,38 +22999,6 @@ ] } }, - "type": { - "type": "string", - "enum": [ - "bash" - ], - "description": "The type of tool. \"bash\" for Bash tool." - }, - "subType": { - "type": "string", - "enum": [ - "bash_20241022" - ], - "description": "The sub type of tool." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." - }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ @@ -19266,26 +23015,12 @@ } ] }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'bash'", - "default": "bash", - "enum": [ - "bash" - ] + "metadata": { + "$ref": "#/components/schemas/GhlToolMetadata" } - }, - "required": [ - "type", - "subType", - "id", - "orgId", - "createdAt", - "updatedAt", - "name" - ] + } }, - "ComputerTool": { + "UpdateMakeToolDTO": { "type": "object", "properties": { "async": { @@ -19311,43 +23046,11 @@ "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] - } - }, - "type": { - "type": "string", - "enum": [ - "computer" - ], - "description": "The type of tool. \"computer\" for Computer tool." - }, - "subType": { - "type": "string", - "enum": [ - "computer_20241022" - ], - "description": "The sub type of tool." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" + } + ] + } }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", @@ -19365,40 +23068,12 @@ } ] }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'computer'", - "default": "computer", - "enum": [ - "computer" - ] - }, - "displayWidthPx": { - "type": "number", - "description": "The display width in pixels" - }, - "displayHeightPx": { - "type": "number", - "description": "The display height in pixels" - }, - "displayNumber": { - "type": "number", - "description": "Optional display number" + "metadata": { + "$ref": "#/components/schemas/MakeToolMetadata" } - }, - "required": [ - "type", - "subType", - "id", - "orgId", - "createdAt", - "updatedAt", - "name", - "displayWidthPx", - "displayHeightPx" - ] + } }, - "TextEditorTool": { + "UpdateTransferCallToolDTO": { "type": "object", "properties": { "async": { @@ -19430,37 +23105,29 @@ ] } }, - "type": { - "type": "string", - "enum": [ - "textEditor" - ], - "description": "The type of tool. \"textEditor\" for Text Editor tool." - }, - "subType": { - "type": "string", - "enum": [ - "text_editor_20241022" - ], - "description": "The sub type of tool." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "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." + "destinations": { + "type": "array", + "description": "These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TransferDestinationAssistant", + "title": "Assistant" + }, + { + "$ref": "#/components/schemas/TransferDestinationStep", + "title": "Step" + }, + { + "$ref": "#/components/schemas/TransferDestinationNumber", + "title": "Number" + }, + { + "$ref": "#/components/schemas/TransferDestinationSip", + "title": "Sip" + } + ] + } }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", @@ -19477,81 +23144,10 @@ "$ref": "#/components/schemas/Server" } ] - }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'str_replace_editor'", - "default": "str_replace_editor", - "enum": [ - "str_replace_editor" - ] - } - }, - "required": [ - "type", - "subType", - "id", - "orgId", - "createdAt", - "updatedAt", - "name" - ] - }, - "KnowledgeBase": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "The name of the knowledge base", - "example": "My Knowledge Base" - }, - "provider": { - "type": "string", - "description": "The provider of the knowledge base", - "enum": [ - "google" - ], - "example": "google" - }, - "model": { - "type": "object", - "description": "The model to use for the knowledge base", - "enum": [ - "gemini-2.0-flash-thinking-exp", - "gemini-2.0-pro-exp-02-05", - "gemini-2.0-flash", - "gemini-2.0-flash-lite-preview-02-05", - "gemini-2.0-flash-exp", - "gemini-2.0-flash-realtime-exp", - "gemini-1.5-flash", - "gemini-1.5-flash-002", - "gemini-1.5-pro", - "gemini-1.5-pro-002", - "gemini-1.0-pro" - ], - "example": "gemini-1.5-flash" - }, - "description": { - "type": "string", - "description": "A description of the knowledge base" - }, - "fileIds": { - "description": "The file IDs associated with this knowledge base", - "type": "array", - "items": { - "type": "string" - } } - }, - "required": [ - "name", - "provider", - "model", - "description", - "fileIds" - ] + } }, - "QueryTool": { + "UpdateOutputToolDTO": { "type": "object", "properties": { "async": { @@ -19583,38 +23179,6 @@ ] } }, - "type": { - "type": "string", - "enum": [ - "query" - ], - "description": "The type of tool. \"query\" for Query tool." - }, - "knowledgeBases": { - "description": "The knowledge bases to query", - "type": "array", - "items": { - "$ref": "#/components/schemas/KnowledgeBase" - } - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the tool." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization that this tool belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the tool was last updated." - }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ @@ -19631,16 +23195,9 @@ } ] } - }, - "required": [ - "type", - "id", - "orgId", - "createdAt", - "updatedAt" - ] + } }, - "CreateOutputToolDTO": { + "UpdateBashToolDTO": { "type": "object", "properties": { "async": { @@ -19672,12 +23229,12 @@ ] } }, - "type": { + "subType": { "type": "string", "enum": [ - "output" + "bash_20241022" ], - "description": "The type of tool. \"output\" for Output tool." + "description": "The sub type of tool." }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", @@ -19694,13 +23251,18 @@ "$ref": "#/components/schemas/Server" } ] + }, + "name": { + "type": "string", + "description": "The name of the tool, fixed to 'bash'", + "default": "bash", + "enum": [ + "bash" + ] } - }, - "required": [ - "type" - ] + } }, - "CreateBashToolDTO": { + "UpdateComputerToolDTO": { "type": "object", "properties": { "async": { @@ -19732,28 +23294,13 @@ ] } }, - "type": { - "type": "string", - "enum": [ - "bash" - ], - "description": "The type of tool. \"bash\" for Bash tool." - }, "subType": { "type": "string", "enum": [ - "bash_20241022" + "computer_20241022" ], "description": "The sub type of tool." }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'bash'", - "default": "bash", - "enum": [ - "bash" - ] - }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ @@ -19769,15 +23316,30 @@ "$ref": "#/components/schemas/Server" } ] + }, + "name": { + "type": "string", + "description": "The name of the tool, fixed to 'computer'", + "default": "computer", + "enum": [ + "computer" + ] + }, + "displayWidthPx": { + "type": "number", + "description": "The display width in pixels" + }, + "displayHeightPx": { + "type": "number", + "description": "The display height in pixels" + }, + "displayNumber": { + "type": "number", + "description": "Optional display number" } - }, - "required": [ - "type", - "subType", - "name" - ] + } }, - "CreateComputerToolDTO": { + "UpdateTextEditorToolDTO": { "type": "object", "properties": { "async": { @@ -19809,40 +23371,13 @@ ] } }, - "type": { - "type": "string", - "enum": [ - "computer" - ], - "description": "The type of tool. \"computer\" for Computer tool." - }, "subType": { "type": "string", "enum": [ - "computer_20241022" + "text_editor_20241022" ], "description": "The sub type of tool." }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'computer'", - "default": "computer", - "enum": [ - "computer" - ] - }, - "displayWidthPx": { - "type": "number", - "description": "The display width in pixels" - }, - "displayHeightPx": { - "type": "number", - "description": "The display height in pixels" - }, - "displayNumber": { - "type": "number", - "description": "Optional display number" - }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ @@ -19858,17 +23393,18 @@ "$ref": "#/components/schemas/Server" } ] + }, + "name": { + "type": "string", + "description": "The name of the tool, fixed to 'str_replace_editor'", + "default": "str_replace_editor", + "enum": [ + "str_replace_editor" + ] } - }, - "required": [ - "type", - "subType", - "name", - "displayWidthPx", - "displayHeightPx" - ] + } }, - "CreateTextEditorToolDTO": { + "UpdateQueryToolDTO": { "type": "object", "properties": { "async": { @@ -19900,27 +23436,12 @@ ] } }, - "type": { - "type": "string", - "enum": [ - "textEditor" - ], - "description": "The type of tool. \"textEditor\" for Text Editor tool." - }, - "subType": { - "type": "string", - "enum": [ - "text_editor_20241022" - ], - "description": "The sub type of tool." - }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'str_replace_editor'", - "default": "str_replace_editor", - "enum": [ - "str_replace_editor" - ] + "knowledgeBases": { + "description": "The knowledge bases to query", + "type": "array", + "items": { + "$ref": "#/components/schemas/KnowledgeBase" + } }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", @@ -19938,14 +23459,9 @@ } ] } - }, - "required": [ - "type", - "subType", - "name" - ] + } }, - "CreateQueryToolDTO": { + "UpdateGoogleCalendarCreateEventToolDTO": { "type": "object", "properties": { "async": { @@ -19977,20 +23493,6 @@ ] } }, - "type": { - "type": "string", - "enum": [ - "query" - ], - "description": "The type of tool. \"query\" for Query tool." - }, - "knowledgeBases": { - "description": "The knowledge bases to query", - "type": "array", - "items": { - "$ref": "#/components/schemas/KnowledgeBase" - } - }, "function": { "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", "allOf": [ @@ -20007,12 +23509,9 @@ } ] } - }, - "required": [ - "type" - ] + } }, - "UpdateDtmfToolDTO": { + "UpdateGoogleSheetsRowAppendToolDTO": { "type": "object", "properties": { "async": { @@ -20052,1008 +23551,1245 @@ } ] }, - "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + } + } + }, + "CreateFileDTO": { + "type": "object", + "properties": { + "file": { + "type": "string", + "description": "This is the File you want to upload for use with the Knowledge Base.", + "format": "binary" + } + }, + "required": [ + "file" + ] + }, + "File": { + "type": "object", + "properties": { + "object": { + "type": "string", + "enum": [ + "file" + ] + }, + "status": { + "enum": [ + "processing", + "done", + "failed" + ], + "type": "string" + }, + "name": { + "type": "string", + "description": "This is the name of the file. This is just for your own reference.", + "maxLength": 40 + }, + "originalName": { + "type": "string" + }, + "bytes": { + "type": "number" + }, + "purpose": { + "type": "string" + }, + "mimetype": { + "type": "string" + }, + "key": { + "type": "string" + }, + "path": { + "type": "string" + }, + "bucket": { + "type": "string" + }, + "url": { + "type": "string" + }, + "parsedTextUrl": { + "type": "string" + }, + "parsedTextBytes": { + "type": "number" + }, + "metadata": { + "type": "object" + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the file." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this file belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the file was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the file was last updated." + } + }, + "required": [ + "id", + "orgId", + "createdAt", + "updatedAt" + ] + }, + "UpdateFileDTO": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of the file. This is just for your own reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "TrieveKnowledgeBaseSearchPlan": { + "type": "object", + "properties": { + "topK": { + "type": "number", + "description": "Specifies the number of top chunks to return. This corresponds to the `page_size` parameter in Trieve." + }, + "removeStopWords": { + "type": "boolean", + "description": "If true, stop words (specified in server/src/stop-words.txt in the git repo) will be removed. This will preserve queries that are entirely stop words." + }, + "scoreThreshold": { + "type": "number", + "description": "This is the score threshold to filter out chunks with a score below the threshold for cosine distance metric. For Manhattan Distance, Euclidean Distance, and Dot Product, it will filter out scores above the threshold distance. This threshold applies before weight and bias modifications. If not specified, this defaults to no threshold. A threshold of 0 will default to no threshold." + }, + "searchType": { + "type": "string", + "description": "This is the search method used when searching for relevant chunks from the vector store.", + "enum": [ + "fulltext", + "semantic", + "hybrid", + "bm25" ] } - } + }, + "required": [ + "searchType" + ] }, - "UpdateEndCallToolDTO": { + "TrieveKnowledgeBase": { "type": "object", "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false + "provider": { + "type": "string", + "description": "This knowledge base is provided by Trieve.\n\nTo learn more about Trieve, visit https://trieve.ai.", + "enum": [ + "trieve" + ] }, - "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" - } - ] - } + "name": { + "type": "string", + "description": "This is the name of the knowledge base." }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "searchPlan": { + "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.", "allOf": [ { - "$ref": "#/components/schemas/OpenAIFunction" + "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan" } ] }, - "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", - "allOf": [ + "createPlan": { + "description": "This is the plan if you want us to create/import a new vector store using Trieve.", + "oneOf": [ { - "$ref": "#/components/schemas/Server" + "$ref": "#/components/schemas/TrieveKnowledgeBaseImport", + "title": "Import" } ] + }, + "id": { + "type": "string", + "description": "This is the id of the knowledge base." + }, + "orgId": { + "type": "string", + "description": "This is the org id of the knowledge base." } - } + }, + "required": [ + "provider", + "id", + "orgId" + ] }, - "UpdateFunctionToolDTO": { + "CustomKnowledgeBase": { "type": "object", "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false - }, - "messages": { - "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] - } - }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", - "allOf": [ - { - "$ref": "#/components/schemas/OpenAIFunction" - } + "provider": { + "type": "string", + "description": "This knowledge base is bring your own knowledge base implementation.", + "enum": [ + "custom-knowledge-base" ] }, "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "description": "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n \"messsage\": {\n \"type\": \"knowledge-base-request\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Why is ocean blue?\"\n }\n ],\n ...other metadata about the call...\n }\n}\n\nResponse Expected:\n```\n{\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK\n \"documents\": [\n {\n \"content\": \"The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.\",\n \"similarity\": 1\n },\n {\n \"content\": \"Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n \"similarity\": .5\n }\n ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```", "allOf": [ { "$ref": "#/components/schemas/Server" } ] + }, + "id": { + "type": "string", + "description": "This is the id of the knowledge base." + }, + "orgId": { + "type": "string", + "description": "This is the org id of the knowledge base." } - } + }, + "required": [ + "provider", + "server", + "id", + "orgId" + ] }, - "UpdateGhlToolDTO": { + "CreateTrieveKnowledgeBaseDTO": { "type": "object", "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false + "provider": { + "type": "string", + "description": "This knowledge base is provided by Trieve.\n\nTo learn more about Trieve, visit https://trieve.ai.", + "enum": [ + "trieve" + ] }, - "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" - } - ] - } + "name": { + "type": "string", + "description": "This is the name of the knowledge base." }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "searchPlan": { + "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.", "allOf": [ { - "$ref": "#/components/schemas/OpenAIFunction" + "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan" } ] }, - "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", - "allOf": [ + "createPlan": { + "description": "This is the plan if you want us to create/import a new vector store using Trieve.", + "oneOf": [ { - "$ref": "#/components/schemas/Server" + "$ref": "#/components/schemas/TrieveKnowledgeBaseImport", + "title": "Import" } ] - }, - "metadata": { - "$ref": "#/components/schemas/GhlToolMetadata" } - } + }, + "required": [ + "provider" + ] }, - "UpdateMakeToolDTO": { + "UpdateTrieveKnowledgeBaseDTO": { "type": "object", "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false - }, - "messages": { - "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] - } + "name": { + "type": "string", + "description": "This is the name of the knowledge base." }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "searchPlan": { + "description": "This is the searching plan used when searching for relevant chunks from the vector store.\n\nYou should configure this if you're running into these issues:\n- Too much unnecessary context is being fed as knowledge base context.\n- Not enough relevant context is being fed as knowledge base context.", "allOf": [ { - "$ref": "#/components/schemas/OpenAIFunction" + "$ref": "#/components/schemas/TrieveKnowledgeBaseSearchPlan" + } + ] + }, + "createPlan": { + "description": "This is the plan if you want us to create/import a new vector store using Trieve.", + "oneOf": [ + { + "$ref": "#/components/schemas/TrieveKnowledgeBaseImport", + "title": "Import" } ] - }, + } + } + }, + "UpdateCustomKnowledgeBaseDTO": { + "type": "object", + "properties": { "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "description": "This is where the knowledge base request will be sent.\n\nRequest Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\n{\n \"messsage\": {\n \"type\": \"knowledge-base-request\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"Why is ocean blue?\"\n }\n ],\n ...other metadata about the call...\n }\n}\n\nResponse Expected:\n```\n{\n \"message\": {\n \"role\": \"assistant\",\n \"content\": \"The ocean is blue because water absorbs everything but blue.\",\n }, // YOU CAN RETURN THE EXACT RESPONSE TO SPEAK\n \"documents\": [\n {\n \"content\": \"The ocean is blue primarily because water absorbs colors in the red part of the light spectrum and scatters the blue light, making it more visible to our eyes.\",\n \"similarity\": 1\n },\n {\n \"content\": \"Blue light is scattered more by the water molecules than other colors, enhancing the blue appearance of the ocean.\",\n \"similarity\": .5\n }\n ] // OR, YOU CAN RETURN AN ARRAY OF DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```", "allOf": [ { "$ref": "#/components/schemas/Server" } ] - }, - "metadata": { - "$ref": "#/components/schemas/MakeToolMetadata" } } }, - "UpdateTransferCallToolDTO": { + "TrieveKnowledgeBaseChunkPlan": { "type": "object", "properties": { - "async": { + "fileIds": { + "description": "These are the file ids that will be used to create the vector store. To upload files, use the `POST /files` endpoint.", + "type": "array", + "items": { + "type": "string" + } + }, + "websites": { + "description": "These are the websites that will be used to create the vector store.", + "type": "array", + "items": { + "type": "string" + } + }, + "targetSplitsPerChunk": { + "type": "number", + "description": "This is an optional field which allows you to specify the number of splits you want per chunk. If not specified, the default 20 is used. However, you may want to use a different number." + }, + "splitDelimiters": { + "description": "This is an optional field which allows you to specify the delimiters to use when splitting the file before chunking the text. If not specified, the default [.!?\\n] are used to split into sentences. However, you may want to use spaces or other delimiters.", + "type": "array", + "items": { + "type": "string" + } + }, + "rebalanceChunks": { "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false + "description": "This is an optional field which allows you to specify whether or not to rebalance the chunks created from the file. If not specified, the default true is used. If true, Trieve will evenly distribute remainder splits across chunks such that 66 splits with a target_splits_per_chunk of 20 will result in 3 chunks with 22 splits each." + } + } + }, + "TrieveKnowledgeBaseCreate": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "This is to create a new dataset on Trieve.", + "enum": [ + "create" + ] }, - "messages": { + "chunkPlans": { + "description": "These are the chunk plans used to create the dataset.", "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] + "$ref": "#/components/schemas/TrieveKnowledgeBaseChunkPlan" } + } + }, + "required": [ + "type", + "chunkPlans" + ] + }, + "TrieveKnowledgeBaseImport": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "This is to import an existing dataset from Trieve.", + "enum": [ + "import" + ] }, - "destinations": { + "providerId": { + "type": "string", + "description": "This is the `datasetId` of the dataset on your Trieve account." + } + }, + "required": [ + "type", + "providerId" + ] + }, + "UpdateWorkflowDTO": { + "type": "object", + "properties": { + "nodes": { "type": "array", - "description": "These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called.", "items": { "oneOf": [ { - "$ref": "#/components/schemas/TransferDestinationAssistant", - "title": "Assistant" + "$ref": "#/components/schemas/Say", + "title": "Say" }, { - "$ref": "#/components/schemas/TransferDestinationStep", - "title": "Step" + "$ref": "#/components/schemas/Gather", + "title": "Gather" }, { - "$ref": "#/components/schemas/TransferDestinationNumber", - "title": "Number" + "$ref": "#/components/schemas/ApiRequest", + "title": "ApiRequest" }, { - "$ref": "#/components/schemas/TransferDestinationSip", - "title": "Sip" + "$ref": "#/components/schemas/Hangup", + "title": "Hangup" + }, + { + "$ref": "#/components/schemas/Transfer", + "title": "Transfer" } ] } }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", - "allOf": [ - { - "$ref": "#/components/schemas/OpenAIFunction" - } - ] + "name": { + "type": "string", + "maxLength": 80 }, - "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] + "edges": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Edge" + } } } }, - "UpdateOutputToolDTO": { + "Squad": { "type": "object", "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false + "name": { + "type": "string", + "description": "This is the name of the squad." }, - "messages": { + "members": { + "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.", "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] + "$ref": "#/components/schemas/SquadMemberDTO" } }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "membersOverrides": { + "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.", "allOf": [ { - "$ref": "#/components/schemas/OpenAIFunction" + "$ref": "#/components/schemas/AssistantOverrides" } ] }, - "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] + "id": { + "type": "string", + "description": "This is the unique identifier for the squad." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this squad belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the squad was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the squad was last updated." } - } + }, + "required": [ + "members", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateBashToolDTO": { + "UpdateSquadDTO": { "type": "object", "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false + "name": { + "type": "string", + "description": "This is the name of the squad." }, - "messages": { + "members": { + "description": "This is the list of assistants that make up the squad.\n\nThe call will start with the first assistant in the list.", "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] + "items": { + "$ref": "#/components/schemas/SquadMemberDTO" } }, - "subType": { - "type": "string", - "enum": [ - "bash_20241022" - ], - "description": "The sub type of tool." - }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "membersOverrides": { + "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.", "allOf": [ { - "$ref": "#/components/schemas/OpenAIFunction" + "$ref": "#/components/schemas/AssistantOverrides" } ] - }, - "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + } + }, + "required": [ + "members" + ] + }, + "TesterPlan": { + "type": "object", + "properties": { + "assistant": { + "description": "Pass a transient assistant to use for the test assistant.\n\nMake sure to write a detailed system prompt for a test assistant, and use the {{test.script}} variable to access the test script.", "allOf": [ { - "$ref": "#/components/schemas/Server" + "$ref": "#/components/schemas/CreateAssistantDTO" } ] }, - "name": { + "assistantId": { "type": "string", - "description": "The name of the tool, fixed to 'bash'", - "default": "bash", - "enum": [ - "bash" + "description": "Pass an assistant id that can be access\n\nMake sure to write a detailed system prompt for the test assistant, and use the {{test.script}} variable to access the test script." + }, + "assistantOverrides": { + "description": "Add any assistant overrides to the test assistant.\n\nOne use case is if you want to pass custom variables into the test using variableValues, that you can then access in the script\nand rubric using {{varName}}.", + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } ] } } }, - "UpdateComputerToolDTO": { + "TestSuitePhoneNumber": { "type": "object", "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false - }, - "messages": { - "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] - } - }, - "subType": { + "provider": { "type": "string", + "description": "This is the provider of the phone number.", "enum": [ - "computer_20241022" - ], - "description": "The sub type of tool." - }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", - "allOf": [ - { - "$ref": "#/components/schemas/OpenAIFunction" - } + "test-suite" ] }, - "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "number": { + "type": "string", + "description": "This is the phone number that is being tested.", + "maxLength": 50 + } + }, + "required": [ + "provider", + "number" + ] + }, + "TargetPlan": { + "type": "object", + "properties": { + "phoneNumberId": { + "type": "string", + "description": "This is the phoneNumberId that is being tested." + }, + "phoneNumber": { + "description": "This is the phone number that is being tested. Only use this if you have not imported the phone number to Vapi.", "allOf": [ { - "$ref": "#/components/schemas/Server" + "$ref": "#/components/schemas/TestSuitePhoneNumber" } ] - }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'computer'", - "default": "computer", - "enum": [ - "computer" - ] - }, - "displayWidthPx": { - "type": "number", - "description": "The display width in pixels" - }, - "displayHeightPx": { - "type": "number", - "description": "The display height in pixels" - }, - "displayNumber": { - "type": "number", - "description": "Optional display number" } } }, - "UpdateTextEditorToolDTO": { + "TestSuite": { "type": "object", "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false + "id": { + "type": "string", + "description": "This is the unique identifier for the test suite." }, - "messages": { - "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] - } + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this test suite belongs to." }, - "subType": { + "createdAt": { + "format": "date-time", "type": "string", - "enum": [ - "text_editor_20241022" - ], - "description": "The sub type of tool." + "description": "This is the ISO 8601 date-time string of when the test suite was created." }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the test suite was last updated." + }, + "name": { + "type": "string", + "description": "This is the name of the test suite.", + "maxLength": 80 + }, + "phoneNumberId": { + "type": "string", + "description": "This is the phone number ID associated with this test suite.", + "deprecated": true + }, + "testerPlan": { + "description": "Override the default tester plan by providing custom assistant configuration for the test agent.\n\nWe recommend only using this if you are confident, as we have already set sensible defaults on the tester plan.", "allOf": [ { - "$ref": "#/components/schemas/OpenAIFunction" + "$ref": "#/components/schemas/TesterPlan" } ] }, - "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "targetPlan": { + "description": "These are the configuration for the assistant / phone number that is being tested.", "allOf": [ { - "$ref": "#/components/schemas/Server" + "$ref": "#/components/schemas/TargetPlan" } ] - }, - "name": { - "type": "string", - "description": "The name of the tool, fixed to 'str_replace_editor'", - "default": "str_replace_editor", - "enum": [ - "str_replace_editor" - ] } - } + }, + "required": [ + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateQueryToolDTO": { + "TestSuitesPaginatedResponse": { "type": "object", "properties": { - "async": { - "type": "boolean", - "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", - "example": false - }, - "messages": { + "results": { "type": "array", - "description": "These are the messages that will be spoken to the user as the tool is running.\n\nFor some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/ToolMessageStart", - "title": "ToolMessageStart" - }, - { - "$ref": "#/components/schemas/ToolMessageComplete", - "title": "ToolMessageComplete" - }, - { - "$ref": "#/components/schemas/ToolMessageFailed", - "title": "ToolMessageFailed" - }, - { - "$ref": "#/components/schemas/ToolMessageDelayed", - "title": "ToolMessageDelayed" - } - ] + "$ref": "#/components/schemas/TestSuite" } }, - "knowledgeBases": { - "description": "The knowledge bases to query", - "type": "array", - "items": { - "$ref": "#/components/schemas/KnowledgeBase" - } + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" + } + }, + "required": [ + "results", + "metadata" + ] + }, + "CreateTestSuiteDto": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of the test suite.", + "maxLength": 80 }, - "function": { - "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "phoneNumberId": { + "type": "string", + "description": "This is the phone number ID associated with this test suite.", + "deprecated": true + }, + "testerPlan": { + "description": "Override the default tester plan by providing custom assistant configuration for the test agent.\n\nWe recommend only using this if you are confident, as we have already set sensible defaults on the tester plan.", "allOf": [ { - "$ref": "#/components/schemas/OpenAIFunction" + "$ref": "#/components/schemas/TesterPlan" } ] }, - "server": { - "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "targetPlan": { + "description": "These are the configuration for the assistant / phone number that is being tested.", "allOf": [ { - "$ref": "#/components/schemas/Server" + "$ref": "#/components/schemas/TargetPlan" } ] } } }, - "CreateFileDTO": { + "UpdateTestSuiteDto": { "type": "object", "properties": { - "file": { + "name": { "type": "string", - "description": "This is the File you want to upload for use with the Knowledge Base.", - "format": "binary" + "description": "This is the name of the test suite.", + "maxLength": 80 + }, + "phoneNumberId": { + "type": "string", + "description": "This is the phone number ID associated with this test suite.", + "deprecated": true + }, + "testerPlan": { + "description": "Override the default tester plan by providing custom assistant configuration for the test agent.\n\nWe recommend only using this if you are confident, as we have already set sensible defaults on the tester plan.", + "allOf": [ + { + "$ref": "#/components/schemas/TesterPlan" + } + ] + }, + "targetPlan": { + "description": "These are the configuration for the assistant / phone number that is being tested.", + "allOf": [ + { + "$ref": "#/components/schemas/TargetPlan" + } + ] } - }, - "required": [ - "file" - ] + } }, - "File": { + "TestSuiteTestVoice": { "type": "object", "properties": { - "object": { - "type": "string", - "enum": [ - "file" - ] + "scorers": { + "type": "array", + "description": "These are the scorers used to evaluate the test.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestScorerAI", + "title": "AI" + } + ] + } }, - "status": { + "type": { + "type": "string", + "description": "This is the type of the test, which must be voice.", "enum": [ - "processing", - "done", - "failed" + "voice" ], - "type": "string" + "maxLength": 100 }, - "name": { + "id": { "type": "string", - "description": "This is the name of the file. This is just for your own reference.", - "maxLength": 40 - }, - "originalName": { - "type": "string" - }, - "bytes": { - "type": "number" - }, - "purpose": { - "type": "string" + "description": "This is the unique identifier for the test." }, - "mimetype": { - "type": "string" + "testSuiteId": { + "type": "string", + "description": "This is the unique identifier for the test suite this test belongs to." }, - "key": { - "type": "string" + "orgId": { + "type": "string", + "description": "This is the unique identifier for the organization this test belongs to." }, - "path": { - "type": "string" + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the test was created." }, - "bucket": { - "type": "string" + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the test was last updated." }, - "url": { - "type": "string" + "name": { + "type": "string", + "description": "This is the name of the test.", + "maxLength": 80 }, - "parsedTextUrl": { - "type": "string" + "script": { + "type": "string", + "description": "This is the script to be used for the voice test.", + "maxLength": 10000 }, - "parsedTextBytes": { - "type": "number" + "numAttempts": { + "type": "number", + "description": "This is the number of attempts allowed for the test.", + "minimum": 1, + "maximum": 10 + } + }, + "required": [ + "scorers", + "type", + "id", + "testSuiteId", + "orgId", + "createdAt", + "updatedAt", + "script" + ] + }, + "TestSuiteTestChat": { + "type": "object", + "properties": { + "scorers": { + "type": "array", + "description": "These are the scorers used to evaluate the test.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestScorerAI", + "title": "AI" + } + ] + } }, - "metadata": { - "type": "object" + "type": { + "type": "string", + "description": "This is the type of the test, which must be chat.", + "enum": [ + "chat" + ], + "maxLength": 100 }, "id": { "type": "string", - "description": "This is the unique identifier for the file." + "description": "This is the unique identifier for the test." + }, + "testSuiteId": { + "type": "string", + "description": "This is the unique identifier for the test suite this test belongs to." }, "orgId": { "type": "string", - "description": "This is the unique identifier for the org that this file belongs to." + "description": "This is the unique identifier for the organization this test belongs to." }, "createdAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the file was created." + "description": "This is the ISO 8601 date-time string of when the test was created." }, "updatedAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the file was last updated." + "description": "This is the ISO 8601 date-time string of when the test was last updated." + }, + "name": { + "type": "string", + "description": "This is the name of the test.", + "maxLength": 80 + }, + "script": { + "type": "string", + "description": "This is the script to be used for the chat test.", + "maxLength": 10000 + }, + "numAttempts": { + "type": "number", + "description": "This is the number of attempts allowed for the test.", + "minimum": 1, + "maximum": 10 } }, "required": [ + "scorers", + "type", "id", + "testSuiteId", "orgId", "createdAt", - "updatedAt" + "updatedAt", + "script" ] }, - "UpdateFileDTO": { + "CreateTestSuiteTestVoiceDto": { "type": "object", "properties": { + "scorers": { + "type": "array", + "description": "These are the scorers used to evaluate the test.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestScorerAI", + "title": "AI" + } + ] + } + }, + "type": { + "type": "string", + "description": "This is the type of the test, which must be voice.", + "enum": [ + "voice" + ], + "maxLength": 100 + }, + "script": { + "type": "string", + "description": "This is the script to be used for the voice test.", + "maxLength": 10000 + }, + "numAttempts": { + "type": "number", + "description": "This is the number of attempts allowed for the test.", + "minimum": 1, + "maximum": 10 + }, "name": { "type": "string", - "description": "This is the name of the file. This is just for your own reference.", - "minLength": 1, - "maxLength": 40 + "description": "This is the name of the test.", + "maxLength": 80 } - } + }, + "required": [ + "scorers", + "type", + "script" + ] }, - "Metrics": { + "CreateTestSuiteTestChatDto": { "type": "object", "properties": { - "orgId": { - "type": "string" - }, - "rangeStart": { - "type": "string" - }, - "rangeEnd": { - "type": "string" - }, - "bill": { - "type": "number" - }, - "billWithinBillingLimit": { - "type": "boolean" - }, - "billDailyBreakdown": { - "type": "object" - }, - "callActive": { - "type": "number" - }, - "callActiveWithinConcurrencyLimit": { - "type": "boolean" - }, - "callMinutes": { - "type": "number" - }, - "callMinutesDailyBreakdown": { - "type": "object" + "scorers": { + "type": "array", + "description": "These are the scorers used to evaluate the test.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestScorerAI", + "title": "AI" + } + ] + } }, - "callMinutesAverage": { - "type": "number" + "type": { + "type": "string", + "description": "This is the type of the test, which must be chat.", + "enum": [ + "chat" + ], + "maxLength": 100 }, - "callMinutesAverageDailyBreakdown": { - "type": "object" + "script": { + "type": "string", + "description": "This is the script to be used for the chat test.", + "maxLength": 10000 }, - "callCount": { - "type": "number" + "numAttempts": { + "type": "number", + "description": "This is the number of attempts allowed for the test.", + "minimum": 1, + "maximum": 10 }, - "callCountDailyBreakdown": { - "type": "object" + "name": { + "type": "string", + "description": "This is the name of the test.", + "maxLength": 80 } }, "required": [ - "orgId", - "rangeStart", - "rangeEnd", - "bill", - "billWithinBillingLimit", - "billDailyBreakdown", - "callActive", - "callActiveWithinConcurrencyLimit", - "callMinutes", - "callMinutesDailyBreakdown", - "callMinutesAverage", - "callMinutesAverageDailyBreakdown", - "callCount", - "callCountDailyBreakdown" + "scorers", + "type", + "script" ] }, - "TimeRange": { + "UpdateTestSuiteTestVoiceDto": { "type": "object", "properties": { - "step": { + "scorers": { + "type": "array", + "description": "These are the scorers used to evaluate the test.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestScorerAI", + "title": "AI" + } + ] + } + }, + "type": { "type": "string", - "description": "This is the time step for aggregations.\n\nIf not provided, defaults to returning for the entire time range.", + "description": "This is the type of the test, which must be voice.", "enum": [ - "second", - "minute", - "hour", - "day", - "week", - "month", - "quarter", - "year", - "decade", - "century", - "millennium" - ] + "voice" + ], + "maxLength": 100 }, - "start": { - "format": "date-time", + "name": { "type": "string", - "description": "This is the start date for the time range.\n\nIf not provided, defaults to the 7 days ago." + "description": "This is the name of the test.", + "maxLength": 80 }, - "end": { - "format": "date-time", + "script": { "type": "string", - "description": "This is the end date for the time range.\n\nIf not provided, defaults to now." + "description": "This is the script to be used for the voice test.", + "maxLength": 10000 }, - "timezone": { - "type": "string", - "description": "This is the timezone you want to set for the query.\n\nIf not provided, defaults to UTC." + "numAttempts": { + "type": "number", + "description": "This is the number of attempts allowed for the test.", + "minimum": 1, + "maximum": 10 } } }, - "AnalyticsOperation": { + "UpdateTestSuiteTestChatDto": { "type": "object", "properties": { - "operation": { + "scorers": { + "type": "array", + "description": "These are the scorers used to evaluate the test.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestScorerAI", + "title": "AI" + } + ] + } + }, + "type": { "type": "string", - "description": "This is the aggregation operation you want to perform.", + "description": "This is the type of the test, which must be chat.", "enum": [ - "sum", - "avg", - "count", - "min", - "max", - "history" - ] + "chat" + ], + "maxLength": 100 }, - "column": { + "name": { "type": "string", - "description": "This is the columns you want to perform the aggregation operation on.", + "description": "This is the name of the test.", + "maxLength": 80 + }, + "script": { + "type": "string", + "description": "This is the script to be used for the chat test.", + "maxLength": 10000 + }, + "numAttempts": { + "type": "number", + "description": "This is the number of attempts allowed for the test.", + "minimum": 1, + "maximum": 10 + } + } + }, + "TestSuiteTestScorerAI": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "This is the type of the scorer, which must be AI.", "enum": [ - "id", - "cost", - "costBreakdown.llm", - "costBreakdown.stt", - "costBreakdown.tts", - "costBreakdown.vapi", - "costBreakdown.ttsCharacters", - "costBreakdown.llmPromptTokens", - "costBreakdown.llmCompletionTokens", - "duration", - "concurrency", - "minutesUsed" - ] + "ai" + ], + "maxLength": 100 }, - "alias": { + "rubric": { "type": "string", - "description": "This is the alias for column name returned. Defaults to `${operation}${column}`.", - "maxLength": 40 + "description": "This is the rubric used by the AI scorer.", + "maxLength": 1000 } }, "required": [ - "operation", - "column" + "type", + "rubric" ] }, - "AnalyticsQuery": { + "TestSuiteTestsPaginatedResponse": { "type": "object", "properties": { - "table": { - "type": "string", - "description": "This is the table you want to query.", - "enum": [ - "call", - "subscription" - ] - }, - "groupBy": { + "results": { "type": "array", - "description": "This is the list of columns you want to group by.", - "enum": [ - "type", - "assistantId", - "endedReason", - "analysis.successEvaluation", - "status" - ], + "description": "A list of test suite tests.", "items": { - "type": "string", - "enum": [ - "type", - "assistantId", - "endedReason", - "analysis.successEvaluation", - "status" + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteTestVoice" + }, + { + "$ref": "#/components/schemas/TestSuiteTestChat" + } ] } }, - "name": { + "metadata": { + "description": "Metadata about the pagination.", + "allOf": [ + { + "$ref": "#/components/schemas/PaginationMeta" + } + ] + } + }, + "required": [ + "results", + "metadata" + ] + }, + "TestSuiteRunScorerAI": { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "This is the name of the query. This will be used to identify the query in the response.", - "maxLength": 40 + "description": "This is the type of the scorer, which must be AI.", + "enum": [ + "ai" + ], + "maxLength": 100 }, - "timeRange": { - "description": "This is the time range for the query.", + "result": { + "type": "string", + "description": "This is the result of the test suite.", + "enum": [ + "pass", + "fail" + ], + "maxLength": 100 + }, + "reasoning": { + "type": "string", + "description": "This is the reasoning provided by the AI scorer.", + "maxLength": 10000 + }, + "rubric": { + "type": "string", + "description": "This is the rubric used by the AI scorer.", + "maxLength": 1000 + } + }, + "required": [ + "type", + "result", + "reasoning", + "rubric" + ] + }, + "TestSuiteRunTestAttemptCall": { + "type": "object", + "properties": { + "artifact": { + "description": "This is the artifact associated with the call.", "allOf": [ { - "$ref": "#/components/schemas/TimeRange" + "$ref": "#/components/schemas/Artifact" } ] - }, - "operations": { - "description": "This is the list of operations you want to perform.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AnalyticsOperation" - } } }, "required": [ - "table", - "name", - "operations" + "artifact" ] }, - "AnalyticsQueryDTO": { + "TestSuiteRunTestAttempt": { "type": "object", "properties": { - "queries": { - "description": "This is the list of metric queries you want to perform.", + "scorerResults": { "type": "array", + "description": "These are the results of the scorers used to evaluate the test attempt.", "items": { - "$ref": "#/components/schemas/AnalyticsQuery" + "oneOf": [ + { + "$ref": "#/components/schemas/TestSuiteRunScorerAI", + "title": "AI" + } + ] } + }, + "call": { + "description": "This is the call made during the test attempt.", + "allOf": [ + { + "$ref": "#/components/schemas/TestSuiteRunTestAttemptCall" + } + ] } }, "required": [ - "queries" + "scorerResults", + "call" ] }, - "AnalyticsQueryResult": { + "TestSuiteRunTestResult": { "type": "object", "properties": { - "name": { - "type": "string", - "description": "This is the unique key for the query." - }, - "timeRange": { - "description": "This is the time range for the query.", - "allOf": [ + "test": { + "description": "This is the test that was run.", + "oneOf": [ { - "$ref": "#/components/schemas/TimeRange" + "$ref": "#/components/schemas/TestSuiteTestVoice", + "title": "TestSuiteTestVoice" } ] }, - "result": { - "description": "This is the result of the query, a list of unique groups with result of their aggregations.\n\nExample:\n\"result\": [\n { \"date\": \"2023-01-01\", \"assistantId\": \"123\", \"endedReason\": \"customer-ended-call\", \"sumDuration\": 120, \"avgCost\": 10.5 },\n { \"date\": \"2023-01-02\", \"assistantId\": \"123\", \"endedReason\": \"customer-did-not-give-microphone-permission\", \"sumDuration\": 0, \"avgCost\": 0 },\n // Additional results\n]", + "attempts": { + "description": "These are the attempts made for this test.", "type": "array", "items": { - "type": "object" + "$ref": "#/components/schemas/TestSuiteRunTestAttempt" } } }, "required": [ - "name", - "timeRange", - "result" + "test", + "attempts" ] }, - "CallLogPrivileged": { + "TestSuiteRun": { "type": "object", "properties": { - "callId": { + "status": { "type": "string", - "description": "This is the unique identifier for the call." + "description": "This is the current status of the test suite run.", + "enum": [ + "queued", + "in-progress", + "completed", + "failed" + ] + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the test suite run." }, "orgId": { "type": "string", - "description": "This is the unique identifier for the org that this call log belongs to." + "description": "This is the unique identifier for the organization this run belongs to." }, - "log": { + "testSuiteId": { "type": "string", - "description": "This is the log message associated with the call." + "description": "This is the unique identifier for the test suite this run belongs to." }, - "level": { + "createdAt": { + "format": "date-time", "type": "string", - "description": "This is the level of the log message.", - "enum": [ - "INFO", - "LOG", - "WARN", - "ERROR", - "CHECKPOINT" - ] + "description": "This is the ISO 8601 date-time string of when the test suite run was created." }, - "time": { + "updatedAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the log was created." + "description": "This is the ISO 8601 date-time string of when the test suite run was last updated." + }, + "testResults": { + "description": "These are the results of the tests in this test suite run.", + "type": "array", + "items": { + "$ref": "#/components/schemas/TestSuiteRunTestResult" + } + }, + "name": { + "type": "string", + "description": "This is the name of the test suite run.", + "maxLength": 80 } }, "required": [ - "callId", + "status", + "id", "orgId", - "log", - "level", - "time" + "testSuiteId", + "createdAt", + "updatedAt", + "testResults" ] }, - "CallLogsPaginatedResponse": { + "TestSuiteRunsPaginatedResponse": { "type": "object", "properties": { "results": { "type": "array", "items": { - "$ref": "#/components/schemas/CallLogPrivileged" + "$ref": "#/components/schemas/TestSuiteRun" } }, "metadata": { @@ -21065,1244 +24801,1194 @@ "metadata" ] }, - "Error": { + "CreateTestSuiteRunDto": { "type": "object", "properties": { - "message": { - "type": "string" + "name": { + "type": "string", + "description": "This is the name of the test suite run.", + "maxLength": 80 } - }, - "required": [ - "message" - ] + } }, - "Log": { + "UpdateTestSuiteRunDto": { "type": "object", "properties": { - "time": { + "name": { "type": "string", - "description": "This is the timestamp at which the log was written." - }, + "description": "This is the name of the test suite run.", + "maxLength": 80 + } + } + }, + "Metrics": { + "type": "object", + "properties": { "orgId": { - "type": "string", - "description": "This is the unique identifier for the org that this log belongs to." - }, - "type": { - "type": "string", - "description": "This is the type of the log.", - "enum": [ - "API", - "Webhook", - "Call", - "Provider" - ] - }, - "webhookType": { - "type": "string", - "description": "This is the type of the webhook, given the log is from a webhook." - }, - "resource": { - "type": "string", - "description": "This is the specific resource, relevant only to API logs.", - "enum": [ - "org", - "assistant", - "analytics", - "credential", - "phone-number", - "block", - "voice-library", - "provider", - "tool", - "token", - "template", - "squad", - "call", - "file", - "metric", - "log" - ] - }, - "requestDurationSeconds": { - "type": "number", - "description": "'This is how long the request took.", - "minimum": 0 - }, - "requestStartedAt": { - "type": "string", - "description": "This is the timestamp at which the request began." - }, - "requestFinishedAt": { - "type": "string", - "description": "This is the timestamp at which the request finished." + "type": "string" }, - "requestBody": { - "type": "object", - "description": "This is the body of the request." + "rangeStart": { + "type": "string" }, - "requestHttpMethod": { - "type": "string", - "description": "This is the request method.", - "enum": [ - "POST", - "GET", - "PUT", - "PATCH", - "DELETE" - ] + "rangeEnd": { + "type": "string" }, - "requestUrl": { - "type": "string", - "description": "This is the request URL." + "bill": { + "type": "number" }, - "requestPath": { - "type": "string", - "description": "This is the request path." + "billWithinBillingLimit": { + "type": "boolean" }, - "requestQuery": { - "type": "string", - "description": "This is the request query." + "billDailyBreakdown": { + "type": "object" }, - "responseHttpCode": { - "type": "number", - "description": "This the HTTP status code of the response." + "callActive": { + "type": "number" }, - "requestIpAddress": { - "type": "string", - "description": "This is the request IP address." + "callActiveWithinConcurrencyLimit": { + "type": "boolean" }, - "requestOrigin": { - "type": "string", - "description": "This is the origin of the request" + "callMinutes": { + "type": "number" }, - "responseBody": { - "type": "object", - "description": "This is the body of the response." + "callMinutesDailyBreakdown": { + "type": "object" }, - "requestHeaders": { - "type": "object", - "description": "These are the headers of the request." + "callMinutesAverage": { + "type": "number" }, - "error": { - "description": "This is the error, if one occurred.", - "allOf": [ - { - "$ref": "#/components/schemas/Error" - } - ] + "callMinutesAverageDailyBreakdown": { + "type": "object" }, - "assistantId": { - "type": "string", - "description": "This is the ID of the assistant." + "callCount": { + "type": "number" }, - "phoneNumberId": { + "callCountDailyBreakdown": { + "type": "object" + } + }, + "required": [ + "orgId", + "rangeStart", + "rangeEnd", + "bill", + "billWithinBillingLimit", + "billDailyBreakdown", + "callActive", + "callActiveWithinConcurrencyLimit", + "callMinutes", + "callMinutesDailyBreakdown", + "callMinutesAverage", + "callMinutesAverageDailyBreakdown", + "callCount", + "callCountDailyBreakdown" + ] + }, + "TimeRange": { + "type": "object", + "properties": { + "step": { "type": "string", - "description": "This is the ID of the phone number." + "description": "This is the time step for aggregations.\n\nIf not provided, defaults to returning for the entire time range.", + "enum": [ + "second", + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "year", + "decade", + "century", + "millennium" + ] }, - "customerId": { + "start": { + "format": "date-time", "type": "string", - "description": "This is the ID of the customer." + "description": "This is the start date for the time range.\n\nIf not provided, defaults to the 7 days ago." }, - "squadId": { + "end": { + "format": "date-time", "type": "string", - "description": "This is the ID of the squad." + "description": "This is the end date for the time range.\n\nIf not provided, defaults to now." }, - "callId": { + "timezone": { "type": "string", - "description": "This is the ID of the call." + "description": "This is the timezone you want to set for the query.\n\nIf not provided, defaults to UTC." } - }, - "required": [ - "time", - "orgId", - "type" - ] + } }, - "LogsPaginatedResponse": { + "AnalyticsOperation": { "type": "object", "properties": { - "results": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Log" - } + "operation": { + "type": "string", + "description": "This is the aggregation operation you want to perform.", + "enum": [ + "sum", + "avg", + "count", + "min", + "max", + "history" + ] }, - "metadata": { - "$ref": "#/components/schemas/PaginationMeta" + "column": { + "type": "string", + "description": "This is the columns you want to perform the aggregation operation on.", + "enum": [ + "id", + "cost", + "costBreakdown.llm", + "costBreakdown.stt", + "costBreakdown.tts", + "costBreakdown.vapi", + "costBreakdown.ttsCharacters", + "costBreakdown.llmPromptTokens", + "costBreakdown.llmCompletionTokens", + "duration", + "concurrency", + "minutesUsed" + ] + }, + "alias": { + "type": "string", + "description": "This is the alias for column name returned. Defaults to `${operation}${column}`.", + "maxLength": 40 } }, "required": [ - "results", - "metadata" + "operation", + "column" ] }, - "ChatDTO": { + "AnalyticsQuery": { "type": "object", "properties": { - "messages": { + "table": { + "type": "string", + "description": "This is the table you want to query.", + "enum": [ + "call", + "subscription" + ] + }, + "groupBy": { "type": "array", + "description": "This is the list of columns you want to group by.", + "enum": [ + "type", + "assistantId", + "endedReason", + "analysis.successEvaluation", + "status" + ], "items": { - "$ref": "#/components/schemas/OpenAIMessage" + "type": "string", + "enum": [ + "type", + "assistantId", + "endedReason", + "analysis.successEvaluation", + "status" + ] } }, - "assistantId": { - "type": "string" + "name": { + "type": "string", + "description": "This is the name of the query. This will be used to identify the query in the response.", + "maxLength": 40 }, - "assistant": { - "$ref": "#/components/schemas/CreateAssistantDTO" + "timeRange": { + "description": "This is the time range for the query.", + "allOf": [ + { + "$ref": "#/components/schemas/TimeRange" + } + ] }, - "assistantOverrides": { - "$ref": "#/components/schemas/AssistantOverrides" + "operations": { + "description": "This is the list of operations you want to perform.", + "type": "array", + "items": { + "$ref": "#/components/schemas/AnalyticsOperation" + } } }, "required": [ - "messages" + "table", + "name", + "operations" ] }, - "ChatServiceResponse": { - "type": "object", - "properties": {} - }, - "ChatCompletionMessageMetadata": { + "AnalyticsQueryDTO": { "type": "object", "properties": { - "taskName": { - "type": "string" - }, - "taskType": { - "type": "string" - }, - "taskOutput": { - "type": "string" - }, - "taskState": { - "type": "object" - }, - "nodeTrace": { + "queries": { + "description": "This is the list of metric queries you want to perform.", "type": "array", "items": { - "type": "string" + "$ref": "#/components/schemas/AnalyticsQuery" } } }, "required": [ - "taskName", - "taskType", - "taskOutput" + "queries" ] }, - "ChatCompletionMessage": { + "AnalyticsQueryResult": { "type": "object", "properties": { - "role": { - "type": "object" - }, - "content": { + "name": { "type": "string", - "nullable": true + "description": "This is the unique key for the query." }, - "metadata": { - "$ref": "#/components/schemas/ChatCompletionMessageMetadata" + "timeRange": { + "description": "This is the time range for the query.", + "allOf": [ + { + "$ref": "#/components/schemas/TimeRange" + } + ] + }, + "result": { + "description": "This is the result of the query, a list of unique groups with result of their aggregations.\n\nExample:\n\"result\": [\n { \"date\": \"2023-01-01\", \"assistantId\": \"123\", \"endedReason\": \"customer-ended-call\", \"sumDuration\": 120, \"avgCost\": 10.5 },\n { \"date\": \"2023-01-02\", \"assistantId\": \"123\", \"endedReason\": \"customer-did-not-give-microphone-permission\", \"sumDuration\": 0, \"avgCost\": 0 },\n // Additional results\n]", + "type": "array", + "items": { + "type": "object" + } } }, "required": [ - "role", - "content" + "name", + "timeRange", + "result" ] }, - "Say": { + "CallLogPrivileged": { "type": "object", "properties": { - "type": { + "callId": { "type": "string", - "enum": [ - "say" - ] + "description": "This is the unique identifier for the call." }, - "exact": { + "orgId": { "type": "string", - "maxLength": 1000 + "description": "This is the unique identifier for the org that this call log belongs to." }, - "prompt": { + "log": { "type": "string", - "maxLength": 1000 + "description": "This is the log message associated with the call." }, - "name": { + "level": { "type": "string", - "maxLength": 80 + "description": "This is the level of the log message.", + "enum": [ + "INFO", + "LOG", + "WARN", + "ERROR", + "CHECKPOINT" + ] }, - "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the task." + "time": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the log was created." } }, "required": [ - "type", - "name" + "callId", + "orgId", + "log", + "level", + "time" ] }, - "SayHook": { + "CallLogsPaginatedResponse": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "say" - ] + "results": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CallLogPrivileged" + } }, "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the task." - }, - "exact": { - "type": "string", - "maxLength": 1000 - }, - "prompt": { - "type": "string", - "maxLength": 1000 + "$ref": "#/components/schemas/PaginationMeta" } }, "required": [ - "type" + "results", + "metadata" ] }, - "Hook": { + "Error": { "type": "object", "properties": { - "on": { - "type": "string", - "enum": [ - "task.start", - "task.output.confirmation", - "task.delayed" - ], - "maxLength": 80 - }, - "do": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SayHook" - } + "message": { + "type": "string" } }, "required": [ - "on", - "do" + "message" ] }, - "Gather": { + "Log": { "type": "object", "properties": { + "time": { + "type": "string", + "description": "This is the timestamp at which the log was written." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this log belongs to." + }, "type": { "type": "string", + "description": "This is the type of the log.", "enum": [ - "gather" + "API", + "Webhook", + "Call", + "Provider" ] }, - "output": { - "$ref": "#/components/schemas/JsonSchema" - }, - "confirmContent": { - "type": "boolean", - "description": "This is whether or not the workflow should read back the gathered data to the user, and ask about its correctness." + "webhookType": { + "type": "string", + "description": "This is the type of the webhook, given the log is from a webhook." }, - "hooks": { - "description": "This is a list of hooks for a task.\nEach hook is a list of tasks to run on a trigger (such as on start, on failure, etc).\nOnly Say is supported for now.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Hook" - } + "resource": { + "type": "string", + "description": "This is the specific resource, relevant only to API logs.", + "enum": [ + "org", + "assistant", + "analytics", + "credential", + "phone-number", + "block", + "voice-library", + "provider", + "tool", + "token", + "template", + "squad", + "call", + "file", + "metric", + "log" + ] }, - "maxRetries": { + "requestDurationSeconds": { "type": "number", - "description": "This is the number of times we should try to gather the information from the user before we failover to the fail path. An example of this would be a user refusing to give their phone number for privacy reasons, and then going down a different path on account of this" + "description": "'This is how long the request took.", + "minimum": 0 }, - "literalTemplate": { + "requestStartedAt": { "type": "string", - "description": "This is a liquid templating string. On the first call to Gather, the template will be filled out with variables from the context, and will be spoken verbatim to the user. An example would be \"Base on your zipcode, it looks like you could be in one of these counties: {{ counties | join: \", \" }}. Which one do you live in?\"" + "description": "This is the timestamp at which the request began." }, - "name": { + "requestFinishedAt": { "type": "string", - "maxLength": 80 + "description": "This is the timestamp at which the request finished." }, - "metadata": { + "requestBody": { "type": "object", - "description": "This is for metadata you want to store on the task." - } - }, - "required": [ - "type", - "output", - "name" - ] - }, - "ApiRequest": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "apiRequest" - ] + "description": "This is the body of the request." }, - "method": { + "requestHttpMethod": { "type": "string", + "description": "This is the request method.", "enum": [ "POST", - "GET" + "GET", + "PUT", + "PATCH", + "DELETE" ] }, - "url": { + "requestUrl": { "type": "string", - "description": "Api endpoint to send requests to." - }, - "headers": { - "description": "These are the custom headers to include in the Api Request sent.\n\nEach key-value pair represents a header name and its value.", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] - }, - "body": { - "description": "This defined the JSON body of your Api Request. For example, if `body_schema`\nincluded \"my_field\": \"my_gather_statement.user_age\", then the json body sent to the server would have that particular value assign to it.\nRight now, only data from gather statements are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] + "description": "This is the request URL." }, - "mode": { + "requestPath": { "type": "string", - "description": "This is the mode of the Api Request.\nWe only support BLOCKING and BACKGROUND for now.", - "enum": [ - "blocking", - "background" - ] - }, - "hooks": { - "description": "This is a list of hooks for a task.\nEach hook is a list of tasks to run on a trigger (such as on start, on failure, etc).\nOnly Say is supported for now.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Hook" - } - }, - "output": { - "description": "This is the schema for the outputs of the Api Request.", - "allOf": [ - { - "$ref": "#/components/schemas/JsonSchema" - } - ] + "description": "This is the request path." }, - "name": { + "requestQuery": { "type": "string", - "maxLength": 80 + "description": "This is the request query." }, - "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the task." - } - }, - "required": [ - "type", - "method", - "url", - "mode", - "name" - ] - }, - "Hangup": { - "type": "object", - "properties": { - "type": { + "responseHttpCode": { + "type": "number", + "description": "This the HTTP status code of the response." + }, + "requestIpAddress": { "type": "string", - "enum": [ - "hangup" - ] + "description": "This is the request IP address." }, - "name": { + "requestOrigin": { "type": "string", - "maxLength": 80 + "description": "This is the origin of the request" }, - "metadata": { + "responseBody": { "type": "object", - "description": "This is for metadata you want to store on the task." - } - }, - "required": [ - "type", - "name" - ] - }, - "Transfer": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "transfer" + "description": "This is the body of the response." + }, + "requestHeaders": { + "type": "object", + "description": "These are the headers of the request." + }, + "error": { + "description": "This is the error, if one occurred.", + "allOf": [ + { + "$ref": "#/components/schemas/Error" + } ] }, - "destination": { - "type": "object" + "assistantId": { + "type": "string", + "description": "This is the ID of the assistant." }, - "name": { + "phoneNumberId": { "type": "string", - "maxLength": 80 + "description": "This is the ID of the phone number." }, - "metadata": { - "type": "object", - "description": "This is for metadata you want to store on the task." - } - }, - "required": [ - "type", - "destination", - "name" - ] - }, - "CreateWorkflowDTO": { - "type": "object", - "properties": { - "nodes": { - "type": "array", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/Say", - "title": "Say" - }, - { - "$ref": "#/components/schemas/Gather", - "title": "Gather" - }, - { - "$ref": "#/components/schemas/ApiRequest", - "title": "ApiRequest" - }, - { - "$ref": "#/components/schemas/Hangup", - "title": "Hangup" - }, - { - "$ref": "#/components/schemas/Transfer", - "title": "Transfer" - } - ] - } + "customerId": { + "type": "string", + "description": "This is the ID of the customer." }, - "name": { + "squadId": { "type": "string", - "maxLength": 80 + "description": "This is the ID of the squad." }, - "edges": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Edge" - } + "callId": { + "type": "string", + "description": "This is the ID of the call." } }, "required": [ - "nodes", - "name", - "edges" + "time", + "orgId", + "type" ] }, - "ChatCompletionsDTO": { + "LogsPaginatedResponse": { "type": "object", "properties": { - "messages": { + "results": { "type": "array", "items": { - "$ref": "#/components/schemas/ChatCompletionMessage" + "$ref": "#/components/schemas/Log" } }, - "workflowId": { - "type": "string" - }, - "workflow": { - "$ref": "#/components/schemas/CreateWorkflowDTO" + "metadata": { + "$ref": "#/components/schemas/PaginationMeta" } }, "required": [ - "messages" + "results", + "metadata" ] }, - "AnthropicCredential": { + "CreateOrgDTO": { "type": "object", "properties": { - "provider": { - "type": "string", - "enum": [ - "anthropic" - ] - }, - "apiKey": { - "type": "string", - "maxLength": 10000, - "description": "This is not returned in the API." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the credential." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the org that this credential belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the credential was created." + "hipaaEnabled": { + "type": "boolean", + "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.", + "example": false }, - "updatedAt": { - "format": "date-time", + "subscriptionId": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + "description": "This is the ID of the subscription the org belongs to." }, "name": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, + "description": "This is the name of the org. This is just for your own reference.", "maxLength": 40 - } - }, - "required": [ - "provider", - "apiKey", - "id", - "orgId", - "createdAt", - "updatedAt" - ] - }, - "AnyscaleCredential": { - "type": "object", - "properties": { - "provider": { + }, + "channel": { "type": "string", + "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.", "enum": [ - "anyscale" + "default", + "weekly" ] }, - "apiKey": { - "type": "string", - "maxLength": 10000, - "description": "This is not returned in the API." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the credential." + "billingLimit": { + "type": "number", + "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.", + "minimum": 0, + "maximum": 1000 }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the org that this credential belongs to." + "server": { + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the credential was created." + "concurrencyLimit": { + "type": "number", + "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.", + "minimum": 1, + "maximum": 10 }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + "compliancePlan": { + "description": "Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field.\nWhen this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost.\nAt the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided.\nDefaults to false.\nWhen PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers.\nThis is due to the compliance requirements of PCI. Other providers may not meet these requirements.", + "allOf": [ + { + "$ref": "#/components/schemas/CompliancePlan" + } + ] + } + } + }, + "AutoReloadPlan": { + "type": "object", + "properties": { + "credits": { + "type": "number", + "description": "This the amount of credits to reload." }, - "name": { - "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 + "threshold": { + "type": "number", + "description": "This is the limit at which the reload is triggered." } }, "required": [ - "provider", - "apiKey", - "id", - "orgId", - "createdAt", - "updatedAt" + "credits", + "threshold" ] }, - "AssemblyAICredential": { + "InvoicePlan": { "type": "object", "properties": { - "provider": { + "companyName": { "type": "string", - "enum": [ - "assembly-ai" - ] + "description": "This is the name of the company." }, - "apiKey": { + "companyAddress": { "type": "string", - "description": "This is not returned in the API." + "description": "This is the address of the company." }, - "id": { + "companyTaxId": { "type": "string", - "description": "This is the unique identifier for the credential." + "description": "This is the tax ID of the company." }, - "orgId": { + "companyEmail": { "type": "string", - "description": "This is the unique identifier for the org that this credential belongs to." + "description": "This is the preferred invoicing email of the company. If not specified, defaults to the subscription's email." + } + } + }, + "Subscription": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "This is the unique identifier for the subscription." }, "createdAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the credential was created." + "description": "This is the timestamp when the subscription was created." }, "updatedAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + "description": "This is the timestamp when the subscription was last updated." }, - "name": { - "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - } - }, - "required": [ - "provider", - "apiKey", - "id", - "orgId", - "createdAt", - "updatedAt" - ] - }, - "AzureCredential": { - "type": "object", - "properties": { - "provider": { + "type": { "type": "string", + "description": "This is the type / tier of the subscription.", "enum": [ - "azure" + "trial", + "pay-as-you-go", + "enterprise" ] }, - "service": { + "status": { "type": "string", - "description": "This is the service being used in Azure.", + "description": "This is the status of the subscription. Past due subscriptions are subscriptions\nwith past due payments.", "enum": [ - "speech", - "blob_storage" - ], - "default": "speech" + "active", + "frozen" + ] }, - "region": { + "credits": { "type": "string", - "description": "This is the region of the Azure resource.", - "enum": [ - "australia", - "canadaeast", - "canadacentral", - "eastus2", - "eastus", - "france", - "india", - "japaneast", - "japanwest", - "uaenorth", - "northcentralus", - "norway", - "southcentralus", - "swedencentral", - "switzerland", - "uk", - "westus", - "westus3" - ] + "description": "This is the number of credits the subscription currently has.\n\nNote: This is a string to avoid floating point precision issues." }, - "apiKey": { + "concurrencyCounter": { + "type": "number", + "description": "This is the total number of active calls (concurrency) across all orgs under this subscription.", + "minimum": 1 + }, + "concurrencyLimitIncluded": { + "type": "number", + "description": "This is the default concurrency limit for the subscription.", + "minimum": 1 + }, + "phoneNumbersCounter": { + "type": "number", + "description": "This is the number of free phone numbers the subscription has", + "minimum": 1 + }, + "phoneNumbersIncluded": { + "type": "number", + "description": "This is the maximum number of free phone numbers the subscription can have", + "minimum": 1 + }, + "concurrencyLimitPurchased": { + "type": "number", + "description": "This is the purchased add-on concurrency limit for the subscription.", + "minimum": 1 + }, + "monthlyChargeScheduleId": { + "type": "number", + "description": "This is the ID of the monthly job that charges for subscription add ons and phone numbers." + }, + "monthlyCreditCheckScheduleId": { + "type": "number", + "description": "This is the ID of the monthly job that checks whether the credit balance of the subscription\nis sufficient for the monthly charge." + }, + "stripeCustomerId": { "type": "string", - "description": "This is not returned in the API.", - "maxLength": 10000 + "description": "This is the Stripe customer ID." }, - "id": { + "stripePaymentMethodId": { "type": "string", - "description": "This is the unique identifier for the credential." + "description": "This is the Stripe payment ID." }, - "orgId": { + "slackSupportEnabled": { + "type": "boolean", + "description": "If this flag is true, then the user has purchased slack support." + }, + "slackChannelId": { "type": "string", - "description": "This is the unique identifier for the org that this credential belongs to." + "description": "If this subscription has a slack support subscription, the slack channel's ID will be stored here." }, - "createdAt": { - "format": "date-time", + "hipaaEnabled": { + "type": "boolean", + "description": "This is the HIPAA enabled flag for the subscription. It determines whether orgs under this\nsubscription have the option to enable HIPAA compliance." + }, + "hipaaCommonPaperAgreementId": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the credential was created." + "description": "This is the ID for the Common Paper agreement outlining the HIPAA contract." }, - "updatedAt": { - "format": "date-time", + "stripePaymentMethodFingerprint": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + "description": "This is the Stripe fingerprint of the payment method (card). It allows us\nto detect users who try to abuse our system through multiple sign-ups." }, - "name": { + "stripeCustomerEmail": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 + "description": "This is the customer's email on Stripe." }, - "bucketPlan": { - "description": "This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.", + "referredByEmail": { + "type": "string", + "description": "This is the email of the referrer for the subscription." + }, + "autoReloadPlan": { + "description": "This is the auto reload plan configured for the subscription.", "allOf": [ { - "$ref": "#/components/schemas/AzureBlobStorageBucketPlan" + "$ref": "#/components/schemas/AutoReloadPlan" } ] - } - }, - "required": [ - "provider", - "service", - "id", - "orgId", - "createdAt", - "updatedAt" - ] - }, - "AzureOpenAICredential": { - "type": "object", - "properties": { - "provider": { - "type": "string", - "enum": [ - "azure-openai" - ] }, - "region": { - "type": "string", - "enum": [ - "australia", - "canadaeast", - "canadacentral", - "eastus2", - "eastus", - "france", - "india", - "japaneast", - "japanwest", - "uaenorth", - "northcentralus", - "norway", - "southcentralus", - "swedencentral", - "switzerland", - "uk", - "westus", - "westus3" - ] + "minutesIncluded": { + "type": "number", + "description": "The number of minutes included in the subscription.", + "minimum": 0 }, - "models": { - "type": "array", - "enum": [ - "gpt-4o-2024-08-06", - "gpt-4o-mini-2024-07-18", - "gpt-4o-2024-05-13", - "gpt-4-turbo-2024-04-09", - "gpt-4-0125-preview", - "gpt-4-1106-preview", - "gpt-4-0613", - "gpt-35-turbo-0125", - "gpt-35-turbo-1106" - ], - "example": [ - "gpt-4-0125-preview", - "gpt-4-0613" - ], - "items": { - "type": "string", - "enum": [ - "gpt-4o-2024-08-06", - "gpt-4o-mini-2024-07-18", - "gpt-4o-2024-05-13", - "gpt-4-turbo-2024-04-09", - "gpt-4-0125-preview", - "gpt-4-1106-preview", - "gpt-4-0613", - "gpt-35-turbo-0125", - "gpt-35-turbo-1106" - ] - } + "minutesUsed": { + "type": "number", + "description": "The number of minutes used in the subscription.", + "minimum": 0 }, - "openAIKey": { + "minutesUsedNextResetAt": { + "format": "date-time", "type": "string", - "maxLength": 10000, - "description": "This is not returned in the API." + "description": "This is the timestamp at which the number of monthly free minutes is scheduled to reset at." }, - "ocpApimSubscriptionKey": { - "type": "string", - "description": "This is not returned in the API." + "minutesOverageCost": { + "type": "number", + "description": "The per minute charge on minutes that exceed the included minutes. Enterprise only." + }, + "providersIncluded": { + "description": "The list of providers included in the subscription. Enterprise only.", + "type": "array", + "items": { + "type": "string" + } }, - "id": { - "type": "string", - "description": "This is the unique identifier for the credential." + "outboundCallsDailyLimit": { + "type": "number", + "description": "The maximum number of outbound calls this subscription may make in a day. Resets every night.", + "minimum": 1 }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the org that this credential belongs to." + "outboundCallsCounter": { + "type": "number", + "description": "The current number of outbound calls the subscription has made in the current day.", + "minimum": 1 }, - "createdAt": { + "outboundCallsCounterNextResetAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the credential was created." + "description": "This is the timestamp at which the outbound calls counter is scheduled to reset at." }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + "couponIds": { + "description": "This is the IDs of the coupons applicable to this subscription.", + "type": "array", + "items": { + "type": "string" + } }, - "name": { + "couponUsageLeft": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 + "description": "This is the number of credits left obtained from a coupon." }, - "openAIEndpoint": { + "invoicePlan": { + "description": "This is the invoice plan for the subscription.", + "allOf": [ + { + "$ref": "#/components/schemas/InvoicePlan" + } + ] + }, + "pciEnabled": { + "type": "boolean", + "description": "This is the PCI enabled flag for the subscription. It determines whether orgs under this\nsubscription have the option to enable PCI compliance." + }, + "pciCommonPaperAgreementId": { "type": "string", - "maxLength": 10000 + "description": "This is the ID for the Common Paper agreement outlining the PCI contract." } }, "required": [ - "provider", - "region", - "models", - "openAIKey", "id", - "orgId", "createdAt", "updatedAt", - "openAIEndpoint" + "type", + "status", + "credits", + "concurrencyCounter", + "concurrencyLimitIncluded", + "concurrencyLimitPurchased" ] }, - "ByoSipTrunkCredential": { + "OrgPlan": { "type": "object", "properties": { - "provider": { - "type": "string", - "description": "This can be used to bring your own SIP trunks or to connect to a Carrier.", - "enum": [ - "byo-sip-trunk" - ] + "includedProviders": { + "type": "array", + "items": { + "type": "object" + } }, - "id": { + "includedMinutes": { + "type": "number" + }, + "costPerOverageMinute": { + "type": "number" + } + } + }, + "Org": { + "type": "object", + "properties": { + "hipaaEnabled": { + "type": "boolean", + "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.", + "example": false + }, + "subscription": { + "$ref": "#/components/schemas/Subscription" + }, + "subscriptionId": { "type": "string", - "description": "This is the unique identifier for the credential." + "description": "This is the ID of the subscription the org belongs to." }, - "orgId": { + "id": { "type": "string", - "description": "This is the unique identifier for the org that this credential belongs to." + "description": "This is the unique identifier for the org." }, "createdAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the credential was created." + "description": "This is the ISO 8601 date-time string of when the org was created." }, "updatedAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + "description": "This is the ISO 8601 date-time string of when the org was last updated." }, - "name": { + "stripeCustomerId": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 + "description": "This is the Stripe customer for the org." }, - "gateways": { - "description": "This is the list of SIP trunk's gateways.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SipTrunkGateway" - } + "stripeSubscriptionId": { + "type": "string", + "description": "This is the subscription for the org." }, - "outboundAuthenticationPlan": { - "description": "This can be used to configure the outbound authentication if required by the SIP trunk.", + "stripeSubscriptionItemId": { + "type": "string", + "description": "This is the subscription's subscription item." + }, + "stripeSubscriptionCurrentPeriodStart": { + "format": "date-time", + "type": "string", + "description": "This is the subscription's current period start." + }, + "stripeSubscriptionStatus": { + "type": "string", + "description": "This is the subscription's status." + }, + "plan": { + "description": "This is the plan for the org.", "allOf": [ { - "$ref": "#/components/schemas/SipTrunkOutboundAuthenticationPlan" + "$ref": "#/components/schemas/OrgPlan" } ] }, - "outboundLeadingPlusEnabled": { - "type": "boolean", - "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false" - }, - "techPrefix": { + "name": { "type": "string", - "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.", - "maxLength": 10000 + "description": "This is the name of the org. This is just for your own reference.", + "maxLength": 40 }, - "sipDiversionHeader": { + "channel": { "type": "string", - "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.", - "maxLength": 10000 + "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.", + "enum": [ + "default", + "weekly" + ] }, - "sbcConfiguration": { - "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.", + "billingLimit": { + "type": "number", + "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.", + "minimum": 0, + "maximum": 1000 + }, + "server": { + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", "allOf": [ { - "$ref": "#/components/schemas/SbcConfiguration" + "$ref": "#/components/schemas/Server" + } + ] + }, + "concurrencyLimit": { + "type": "number", + "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.", + "minimum": 1, + "maximum": 10 + }, + "compliancePlan": { + "description": "Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field.\nWhen this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost.\nAt the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided.\nDefaults to false.\nWhen PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers.\nThis is due to the compliance requirements of PCI. Other providers may not meet these requirements.", + "allOf": [ + { + "$ref": "#/components/schemas/CompliancePlan" } ] } }, "required": [ "id", - "orgId", "createdAt", - "updatedAt", - "gateways" + "updatedAt" ] }, - "CartesiaCredential": { + "UpdateOrgDTO": { "type": "object", "properties": { - "provider": { - "type": "string", - "enum": [ - "cartesia" - ] - }, - "apiKey": { - "type": "string", - "description": "This is not returned in the API." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the credential." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the org that this credential belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the credential was created." + "hipaaEnabled": { + "type": "boolean", + "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.", + "example": false }, - "updatedAt": { - "format": "date-time", + "subscriptionId": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + "description": "This is the ID of the subscription the org belongs to." }, "name": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, + "description": "This is the name of the org. This is just for your own reference.", "maxLength": 40 - } - }, - "required": [ - "provider", - "apiKey", - "id", - "orgId", - "createdAt", - "updatedAt" - ] - }, - "CerebrasCredential": { - "type": "object", - "properties": { - "provider": { + }, + "channel": { "type": "string", + "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.", "enum": [ - "cerebras" + "default", + "weekly" + ] + }, + "billingLimit": { + "type": "number", + "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.", + "minimum": 0, + "maximum": 1000 + }, + "server": { + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } ] }, - "apiKey": { - "type": "string", - "maxLength": 10000, - "description": "This is not returned in the API." + "concurrencyLimit": { + "type": "number", + "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.", + "minimum": 1, + "maximum": 10 }, + "compliancePlan": { + "description": "Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field.\nWhen this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost.\nAt the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided.\nDefaults to false.\nWhen PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers.\nThis is due to the compliance requirements of PCI. Other providers may not meet these requirements.", + "allOf": [ + { + "$ref": "#/components/schemas/CompliancePlan" + } + ] + } + } + }, + "User": { + "type": "object", + "properties": { "id": { "type": "string", - "description": "This is the unique identifier for the credential." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the org that this credential belongs to." + "description": "This is the unique identifier for the profile or user." }, "createdAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the credential was created." + "description": "This is the ISO 8601 date-time string of when the profile was created." }, "updatedAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + "description": "This is the ISO 8601 date-time string of when the profile was last updated." }, - "name": { + "email": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 + "description": "This is the email of the user that is associated with the profile." + }, + "fullName": { + "type": "string", + "description": "This is the full name of the user that is associated with the profile." } }, "required": [ - "provider", - "apiKey", "id", - "orgId", "createdAt", - "updatedAt" + "updatedAt", + "email" ] }, - "CloudflareCredential": { + "InviteUserDTO": { "type": "object", "properties": { - "provider": { - "type": "string", + "emails": { + "maxItems": 100, + "type": "array", + "items": { + "type": "string" + } + }, + "role": { "enum": [ - "cloudflare" + "admin", + "editor", + "viewer" ], - "description": "Credential provider. Only allowed value is cloudflare" - }, - "accountId": { - "type": "string", - "description": "Cloudflare Account Id." - }, - "apiKey": { - "type": "string", - "description": "Cloudflare API Key / Token." - }, - "accountEmail": { - "type": "string", - "description": "Cloudflare Account Email." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the credential." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the org that this credential belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the credential was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + "type": "string" }, - "name": { - "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 + "redirectTo": { + "type": "string" + } + }, + "required": [ + "emails", + "role" + ] + }, + "UpdateUserRoleDTO": { + "type": "object", + "properties": { + "userId": { + "type": "string" }, - "bucketPlan": { - "description": "This is the bucket plan that can be provided to store call artifacts in R2", - "allOf": [ - { - "$ref": "#/components/schemas/CloudflareR2BucketPlan" - } - ] + "role": { + "enum": [ + "admin", + "editor", + "viewer" + ], + "type": "string" } }, "required": [ - "provider", - "id", - "orgId", - "createdAt", - "updatedAt" + "userId", + "role" ] }, - "Oauth2AuthenticationSession": { + "TokenRestrictions": { "type": "object", "properties": { - "accessToken": { - "type": "string", - "description": "This is the OAuth2 access token." + "enabled": { + "type": "boolean", + "description": "This determines whether the token is enabled or disabled. Default is true, it's enabled." }, - "expiresAt": { - "format": "date-time", - "type": "string", - "description": "This is the OAuth2 access token expiration." + "allowedOrigins": { + "description": "This determines the allowed origins for this token. Validates the `Origin` header. Default is any origin.\n\nOnly relevant for `public` tokens.", + "type": "array", + "items": { + "type": "string" + } + }, + "allowedAssistantIds": { + "description": "This determines which assistantIds can be used when creating a call. Default is any assistantId.\n\nOnly relevant for `public` tokens.", + "type": "array", + "items": { + "type": "string" + } + }, + "allowTransientAssistant": { + "type": "boolean", + "description": "This determines whether transient assistants can be used when creating a call. Default is true.\n\nIf `allowedAssistantIds` is provided, this is automatically false.\n\nOnly relevant for `public` tokens." } } }, - "CustomLLMCredential": { + "CreateTokenDTO": { "type": "object", "properties": { - "provider": { + "tag": { "type": "string", + "description": "This is the tag for the token. It represents its scope.", "enum": [ - "custom-llm" + "private", + "public" ] }, - "apiKey": { + "name": { "type": "string", - "maxLength": 10000, - "description": "This is not returned in the API." + "description": "This is the name of the token. This is just for your own reference.", + "maxLength": 40 }, - "authenticationPlan": { - "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey", + "restrictions": { + "description": "This are the restrictions for the token.", "allOf": [ { - "$ref": "#/components/schemas/OAuth2AuthenticationPlan" + "$ref": "#/components/schemas/TokenRestrictions" } ] + } + } + }, + "Token": { + "type": "object", + "properties": { + "tag": { + "type": "string", + "description": "This is the tag for the token. It represents its scope.", + "enum": [ + "private", + "public" + ] }, "id": { "type": "string", - "description": "This is the unique identifier for the credential." + "description": "This is the unique identifier for the token." }, "orgId": { "type": "string", - "description": "This is the unique identifier for the org that this credential belongs to." + "description": "This is unique identifier for the org that this token belongs to." }, "createdAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the credential was created." + "description": "This is the ISO 8601 date-time string of when the token was created." }, "updatedAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + "description": "This is the ISO 8601 date-time string of when the token was last updated." }, - "authenticationSession": { - "description": "This is the authentication session for the credential. Available for credentials that have an authentication plan.", - "allOf": [ - { - "$ref": "#/components/schemas/Oauth2AuthenticationSession" - } - ] + "value": { + "type": "string", + "description": "This is the token key." }, "name": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, + "description": "This is the name of the token. This is just for your own reference.", "maxLength": 40 + }, + "restrictions": { + "description": "This are the restrictions for the token.", + "allOf": [ + { + "$ref": "#/components/schemas/TokenRestrictions" + } + ] } }, "required": [ - "provider", - "apiKey", "id", "orgId", "createdAt", - "updatedAt" + "updatedAt", + "value" ] }, - "DeepgramCredential": { + "UpdateTokenDTO": { + "type": "object", + "properties": { + "tag": { + "type": "string", + "description": "This is the tag for the token. It represents its scope.", + "enum": [ + "private", + "public" + ] + }, + "name": { + "type": "string", + "description": "This is the name of the token. This is just for your own reference.", + "maxLength": 40 + }, + "restrictions": { + "description": "This are the restrictions for the token.", + "allOf": [ + { + "$ref": "#/components/schemas/TokenRestrictions" + } + ] + } + } + }, + "AnthropicCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "deepgram" + "anthropic" ] }, "apiKey": { "type": "string", + "maxLength": 10000, "description": "This is not returned in the API." }, "id": { @@ -22328,10 +26014,6 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 - }, - "apiUrl": { - "type": "string", - "description": "This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com." } }, "required": [ @@ -22343,17 +26025,18 @@ "updatedAt" ] }, - "DeepInfraCredential": { + "AnyscaleCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "deepinfra" + "anyscale" ] }, "apiKey": { "type": "string", + "maxLength": 10000, "description": "This is not returned in the API." }, "id": { @@ -22390,13 +26073,13 @@ "updatedAt" ] }, - "DeepSeekCredential": { + "AssemblyAICredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "deep-seek" + "assembly-ai" ] }, "apiKey": { @@ -22437,19 +26120,52 @@ "updatedAt" ] }, - "ElevenLabsCredential": { + "AzureCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "11labs" + "azure" + ] + }, + "service": { + "type": "string", + "description": "This is the service being used in Azure.", + "enum": [ + "speech", + "blob_storage" + ], + "default": "speech" + }, + "region": { + "type": "string", + "description": "This is the region of the Azure resource.", + "enum": [ + "australia", + "canadaeast", + "canadacentral", + "eastus2", + "eastus", + "france", + "india", + "japaneast", + "japanwest", + "uaenorth", + "northcentralus", + "norway", + "southcentralus", + "swedencentral", + "switzerland", + "uk", + "westus", + "westus3" ] }, "apiKey": { "type": "string", - "maxLength": 10000, - "description": "This is not returned in the API." + "description": "This is not returned in the API.", + "maxLength": 10000 }, "id": { "type": "string", @@ -22474,26 +26190,100 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 + }, + "bucketPlan": { + "description": "This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.", + "allOf": [ + { + "$ref": "#/components/schemas/AzureBlobStorageBucketPlan" + } + ] } }, "required": [ "provider", - "apiKey", + "service", "id", "orgId", "createdAt", "updatedAt" ] }, - "GcpCredential": { + "AzureOpenAICredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "gcp" + "azure-openai" + ] + }, + "region": { + "type": "string", + "enum": [ + "australia", + "canadaeast", + "canadacentral", + "eastus2", + "eastus", + "france", + "india", + "japaneast", + "japanwest", + "uaenorth", + "northcentralus", + "norway", + "southcentralus", + "swedencentral", + "switzerland", + "uk", + "westus", + "westus3" ] }, + "models": { + "type": "array", + "enum": [ + "gpt-4o-2024-11-20", + "gpt-4o-2024-08-06", + "gpt-4o-mini-2024-07-18", + "gpt-4o-2024-05-13", + "gpt-4-turbo-2024-04-09", + "gpt-4-0125-preview", + "gpt-4-1106-preview", + "gpt-4-0613", + "gpt-35-turbo-0125", + "gpt-35-turbo-1106" + ], + "example": [ + "gpt-4-0125-preview", + "gpt-4-0613" + ], + "items": { + "type": "string", + "enum": [ + "gpt-4o-2024-11-20", + "gpt-4o-2024-08-06", + "gpt-4o-mini-2024-07-18", + "gpt-4o-2024-05-13", + "gpt-4-turbo-2024-04-09", + "gpt-4-0125-preview", + "gpt-4-1106-preview", + "gpt-4-0613", + "gpt-35-turbo-0125", + "gpt-35-turbo-1106" + ] + } + }, + "openAIKey": { + "type": "string", + "maxLength": 10000, + "description": "This is not returned in the API." + }, + "ocpApimSubscriptionKey": { + "type": "string", + "description": "This is not returned in the API." + }, "id": { "type": "string", "description": "This is the unique identifier for the credential." @@ -22518,45 +26308,33 @@ "minLength": 1, "maxLength": 40 }, - "gcpKey": { - "description": "This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details//keys.\n\nThe schema is identical to the JSON that GCP outputs.", - "allOf": [ - { - "$ref": "#/components/schemas/GcpKey" - } - ] - }, - "bucketPlan": { - "description": "This is the bucket plan that can be provided to store call artifacts in GCP.", - "allOf": [ - { - "$ref": "#/components/schemas/BucketPlan" - } - ] + "openAIEndpoint": { + "type": "string", + "maxLength": 10000 } }, "required": [ "provider", + "region", + "models", + "openAIKey", "id", "orgId", "createdAt", "updatedAt", - "gcpKey" + "openAIEndpoint" ] }, - "GladiaCredential": { + "ByoSipTrunkCredential": { "type": "object", "properties": { "provider": { "type": "string", + "description": "This can be used to bring your own SIP trunks or to connect to a Carrier.", "enum": [ - "gladia" + "byo-sip-trunk" ] }, - "apiKey": { - "type": "string", - "description": "This is not returned in the API." - }, "id": { "type": "string", "description": "This is the unique identifier for the credential." @@ -22580,24 +26358,60 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 + }, + "gateways": { + "description": "This is the list of SIP trunk's gateways.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SipTrunkGateway" + } + }, + "outboundAuthenticationPlan": { + "description": "This can be used to configure the outbound authentication if required by the SIP trunk.", + "allOf": [ + { + "$ref": "#/components/schemas/SipTrunkOutboundAuthenticationPlan" + } + ] + }, + "outboundLeadingPlusEnabled": { + "type": "boolean", + "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false" + }, + "techPrefix": { + "type": "string", + "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.", + "maxLength": 10000 + }, + "sipDiversionHeader": { + "type": "string", + "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.", + "maxLength": 10000 + }, + "sbcConfiguration": { + "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.", + "allOf": [ + { + "$ref": "#/components/schemas/SbcConfiguration" + } + ] } }, "required": [ - "provider", - "apiKey", "id", "orgId", "createdAt", - "updatedAt" + "updatedAt", + "gateways" ] }, - "GoHighLevelCredential": { + "CartesiaCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "gohighlevel" + "cartesia" ] }, "apiKey": { @@ -22638,14 +26452,13 @@ "updatedAt" ] }, - "GoogleCredential": { + "CerebrasCredential": { "type": "object", "properties": { "provider": { "type": "string", - "description": "This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey", "enum": [ - "google" + "cerebras" ] }, "apiKey": { @@ -22687,18 +26500,27 @@ "updatedAt" ] }, - "GroqCredential": { + "CloudflareCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "groq" - ] + "cloudflare" + ], + "description": "Credential provider. Only allowed value is cloudflare" + }, + "accountId": { + "type": "string", + "description": "Cloudflare Account Id." }, "apiKey": { "type": "string", - "description": "This is not returned in the API." + "description": "Cloudflare API Key / Token." + }, + "accountEmail": { + "type": "string", + "description": "Cloudflare Account Email." }, "id": { "type": "string", @@ -22723,25 +26545,45 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 + }, + "bucketPlan": { + "description": "This is the bucket plan that can be provided to store call artifacts in R2", + "allOf": [ + { + "$ref": "#/components/schemas/CloudflareR2BucketPlan" + } + ] } }, "required": [ "provider", - "apiKey", "id", "orgId", "createdAt", "updatedAt" ] }, - "InflectionAICredential": { + "Oauth2AuthenticationSession": { + "type": "object", + "properties": { + "accessToken": { + "type": "string", + "description": "This is the OAuth2 access token." + }, + "expiresAt": { + "format": "date-time", + "type": "string", + "description": "This is the OAuth2 access token expiration." + } + } + }, + "CustomLLMCredential": { "type": "object", "properties": { "provider": { "type": "string", - "description": "This is the api key for Pi in InflectionAI's console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup", "enum": [ - "inflection-ai" + "custom-llm" ] }, "apiKey": { @@ -22749,6 +26591,14 @@ "maxLength": 10000, "description": "This is not returned in the API." }, + "authenticationPlan": { + "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey", + "allOf": [ + { + "$ref": "#/components/schemas/OAuth2AuthenticationPlan" + } + ] + }, "id": { "type": "string", "description": "This is the unique identifier for the credential." @@ -22767,6 +26617,14 @@ "type": "string", "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, + "authenticationSession": { + "description": "This is the authentication session for the credential. Available for credentials that have an authentication plan.", + "allOf": [ + { + "$ref": "#/components/schemas/Oauth2AuthenticationSession" + } + ] + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", @@ -22783,26 +26641,18 @@ "updatedAt" ] }, - "LangfuseCredential": { + "DeepgramCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "langfuse" + "deepgram" ] }, - "publicKey": { - "type": "string", - "description": "The public key for Langfuse project. Eg: pk-lf-..." - }, "apiKey": { "type": "string", - "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API." - }, - "apiUrl": { - "type": "string", - "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com" + "description": "This is not returned in the API." }, "id": { "type": "string", @@ -22827,26 +26677,28 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 + }, + "apiUrl": { + "type": "string", + "description": "This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com." } }, "required": [ "provider", - "publicKey", "apiKey", - "apiUrl", "id", "orgId", "createdAt", "updatedAt" ] }, - "LmntCredential": { + "DeepInfraCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "lmnt" + "deepinfra" ] }, "apiKey": { @@ -22887,23 +26739,15 @@ "updatedAt" ] }, - "MakeCredential": { + "DeepSeekCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "make" + "deep-seek" ] }, - "teamId": { - "type": "string", - "description": "Team ID" - }, - "region": { - "type": "string", - "description": "Region of your application. For example: eu1, eu2, us1, us2" - }, "apiKey": { "type": "string", "description": "This is not returned in the API." @@ -22935,8 +26779,6 @@ }, "required": [ "provider", - "teamId", - "region", "apiKey", "id", "orgId", @@ -22944,17 +26786,18 @@ "updatedAt" ] }, - "OpenAICredential": { + "ElevenLabsCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "openai" + "11labs" ] }, "apiKey": { "type": "string", + "maxLength": 10000, "description": "This is not returned in the API." }, "id": { @@ -22991,19 +26834,15 @@ "updatedAt" ] }, - "OpenRouterCredential": { + "GcpCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "openrouter" + "gcp" ] }, - "apiKey": { - "type": "string", - "description": "This is not returned in the API." - }, "id": { "type": "string", "description": "This is the unique identifier for the credential." @@ -23027,24 +26866,40 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 + }, + "gcpKey": { + "description": "This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details//keys.\n\nThe schema is identical to the JSON that GCP outputs.", + "allOf": [ + { + "$ref": "#/components/schemas/GcpKey" + } + ] + }, + "bucketPlan": { + "description": "This is the bucket plan that can be provided to store call artifacts in GCP.", + "allOf": [ + { + "$ref": "#/components/schemas/BucketPlan" + } + ] } }, "required": [ "provider", - "apiKey", "id", "orgId", "createdAt", - "updatedAt" + "updatedAt", + "gcpKey" ] }, - "PerplexityAICredential": { + "GladiaCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "perplexity-ai" + "gladia" ] }, "apiKey": { @@ -23085,13 +26940,13 @@ "updatedAt" ] }, - "PlayHTCredential": { + "GoHighLevelCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "playht" + "gohighlevel" ] }, "apiKey": { @@ -23121,9 +26976,6 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 - }, - "userId": { - "type": "string" } }, "required": [ @@ -23132,21 +26984,22 @@ "id", "orgId", "createdAt", - "updatedAt", - "userId" + "updatedAt" ] }, - "RimeAICredential": { + "GoogleCredential": { "type": "object", "properties": { "provider": { "type": "string", + "description": "This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey", "enum": [ - "rime-ai" + "google" ] }, "apiKey": { "type": "string", + "maxLength": 10000, "description": "This is not returned in the API." }, "id": { @@ -23183,13 +27036,13 @@ "updatedAt" ] }, - "RunpodCredential": { + "GroqCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "runpod" + "groq" ] }, "apiKey": { @@ -23230,35 +27083,19 @@ "updatedAt" ] }, - "S3Credential": { + "HumeCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "s3" - ], - "description": "Credential provider. Only allowed value is s3" - }, - "awsAccessKeyId": { - "type": "string", - "description": "AWS access key ID." - }, - "awsSecretAccessKey": { - "type": "string", - "description": "AWS access key secret. This is not returned in the API." - }, - "region": { - "type": "string", - "description": "AWS region in which the S3 bucket is located." - }, - "s3BucketName": { - "type": "string", - "description": "AWS S3 bucket name." + "hume" + ] }, - "s3PathPrefix": { + "apiKey": { "type": "string", - "description": "The path prefix for the uploaded recording. Ex. \"recordings/\"" + "maxLength": 10000, + "description": "This is not returned in the API." }, "id": { "type": "string", @@ -23287,26 +27124,27 @@ }, "required": [ "provider", - "awsAccessKeyId", - "awsSecretAccessKey", - "region", - "s3BucketName", - "s3PathPrefix", + "apiKey", "id", "orgId", "createdAt", "updatedAt" ] }, - "SupabaseCredential": { + "InflectionAICredential": { "type": "object", "properties": { "provider": { "type": "string", + "description": "This is the api key for Pi in InflectionAI's console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup", "enum": [ - "supabase" - ], - "description": "This is for supabase storage." + "inflection-ai" + ] + }, + "apiKey": { + "type": "string", + "maxLength": 10000, + "description": "This is not returned in the API." }, "id": { "type": "string", @@ -23331,31 +27169,37 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 - }, - "bucketPlan": { - "$ref": "#/components/schemas/SupabaseBucketPlan" } }, "required": [ "provider", + "apiKey", "id", "orgId", "createdAt", "updatedAt" ] }, - "SmallestAICredential": { + "LangfuseCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "smallest-ai" + "langfuse" ] }, + "publicKey": { + "type": "string", + "description": "The public key for Langfuse project. Eg: pk-lf-..." + }, "apiKey": { "type": "string", - "description": "This is not returned in the API." + "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API." + }, + "apiUrl": { + "type": "string", + "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com" }, "id": { "type": "string", @@ -23384,20 +27228,22 @@ }, "required": [ "provider", + "publicKey", "apiKey", + "apiUrl", "id", "orgId", "createdAt", "updatedAt" ] }, - "TavusCredential": { + "LmntCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "tavus" + "lmnt" ] }, "apiKey": { @@ -23438,15 +27284,23 @@ "updatedAt" ] }, - "TogetherAICredential": { + "MakeCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "together-ai" + "make" ] }, + "teamId": { + "type": "string", + "description": "Team ID" + }, + "region": { + "type": "string", + "description": "Region of your application. For example: eu1, eu2, us1, us2" + }, "apiKey": { "type": "string", "description": "This is not returned in the API." @@ -23478,6 +27332,8 @@ }, "required": [ "provider", + "teamId", + "region", "apiKey", "id", "orgId", @@ -23485,17 +27341,18 @@ "updatedAt" ] }, - "TwilioCredential": { + "MistralCredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "twilio" + "mistral" ] }, - "authToken": { + "apiKey": { "type": "string", + "maxLength": 100, "description": "This is not returned in the API." }, "id": { @@ -23521,36 +27378,27 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 - }, - "accountSid": { - "type": "string" } }, "required": [ "provider", - "authToken", + "apiKey", "id", "orgId", "createdAt", - "updatedAt", - "accountSid" + "updatedAt" ] }, - "VonageCredential": { + "NeuphonicCredential": { "type": "object", "properties": { - "vonageApplicationPrivateKey": { - "type": "string", - "description": "This is not returned in the API.", - "maxLength": 10000 - }, "provider": { "type": "string", "enum": [ - "vonage" + "neuphonic" ] }, - "apiSecret": { + "apiKey": { "type": "string", "description": "This is not returned in the API." }, @@ -23572,49 +27420,34 @@ "type": "string", "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, - "vonageApplicationId": { - "type": "string", - "description": "This is the Vonage Application ID for the credential.\n\nOnly relevant for Vonage credentials.", - "maxLength": 10000 - }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 - }, - "apiKey": { - "type": "string" } }, "required": [ - "vonageApplicationPrivateKey", "provider", - "apiSecret", + "apiKey", "id", "orgId", "createdAt", - "updatedAt", - "vonageApplicationId", - "apiKey" + "updatedAt" ] }, - "WebhookCredential": { + "OpenAICredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "webhook" + "openai" ] }, - "authenticationPlan": { - "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749.", - "allOf": [ - { - "$ref": "#/components/schemas/OAuth2AuthenticationPlan" - } - ] + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, "id": { "type": "string", @@ -23634,14 +27467,6 @@ "type": "string", "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, - "authenticationSession": { - "description": "This is the authentication session for the credential. Available for credentials that have an authentication plan.", - "allOf": [ - { - "$ref": "#/components/schemas/Oauth2AuthenticationSession" - } - ] - }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", @@ -23651,27 +27476,24 @@ }, "required": [ "provider", - "authenticationPlan", + "apiKey", "id", "orgId", "createdAt", - "updatedAt", - "authenticationSession" + "updatedAt" ] }, - "XAiCredential": { + "OpenRouterCredential": { "type": "object", "properties": { "provider": { "type": "string", - "description": "This is the api key for Grok in XAi's console. Get it from here: https://console.x.ai", "enum": [ - "xai" + "openrouter" ] }, "apiKey": { "type": "string", - "maxLength": 10000, "description": "This is not returned in the API." }, "id": { @@ -23708,20 +27530,37 @@ "updatedAt" ] }, - "CreateCerebrasCredentialDTO": { + "PerplexityAICredential": { "type": "object", "properties": { "provider": { "type": "string", "enum": [ - "cerebras" + "perplexity-ai" ] }, "apiKey": { "type": "string", - "maxLength": 10000, "description": "This is not returned in the API." }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", @@ -23731,51 +27570,95 @@ }, "required": [ "provider", - "apiKey" + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" ] }, - "CreateGoogleCredentialDTO": { + "PlayHTCredential": { "type": "object", "properties": { "provider": { "type": "string", - "description": "This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey", "enum": [ - "google" + "playht" ] }, "apiKey": { "type": "string", - "maxLength": 10000, "description": "This is not returned in the API." }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 + }, + "userId": { + "type": "string" } }, "required": [ "provider", - "apiKey" + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt", + "userId" ] }, - "CreateInflectionAICredentialDTO": { + "RimeAICredential": { "type": "object", "properties": { "provider": { "type": "string", - "description": "This is the api key for Pi in InflectionAI's console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup", "enum": [ - "inflection-ai" + "rime-ai" ] }, "apiKey": { "type": "string", - "maxLength": 10000, "description": "This is not returned in the API." }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", @@ -23785,47 +27668,43 @@ }, "required": [ "provider", - "apiKey" + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" ] }, - "UpdateAnthropicCredentialDTO": { + "RunpodCredential": { "type": "object", "properties": { + "provider": { + "type": "string", + "enum": [ + "runpod" + ] + }, "apiKey": { "type": "string", - "maxLength": 10000, "description": "This is not returned in the API." }, - "name": { + "id": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - } - } - }, - "UpdateAnyscaleCredentialDTO": { - "type": "object", - "properties": { - "apiKey": { + "description": "This is the unique identifier for the credential." + }, + "orgId": { "type": "string", - "maxLength": 10000, - "description": "This is not returned in the API." + "description": "This is the unique identifier for the org that this credential belongs to." }, - "name": { + "createdAt": { + "format": "date-time", "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - } - } - }, - "UpdateAssemblyAICredentialDTO": { - "type": "object", - "properties": { - "apiKey": { + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", "type": "string", - "description": "This is not returned in the API." + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, "name": { "type": "string", @@ -23833,198 +27712,114 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateAzureCredentialDTO": { + "S3Credential": { "type": "object", "properties": { - "service": { + "provider": { "type": "string", - "description": "This is the service being used in Azure.", "enum": [ - "speech", - "blob_storage" + "s3" ], - "default": "speech" + "description": "Credential provider. Only allowed value is s3" }, - "region": { + "awsAccessKeyId": { "type": "string", - "description": "This is the region of the Azure resource.", - "enum": [ - "australia", - "canadaeast", - "canadacentral", - "eastus2", - "eastus", - "france", - "india", - "japaneast", - "japanwest", - "uaenorth", - "northcentralus", - "norway", - "southcentralus", - "swedencentral", - "switzerland", - "uk", - "westus", - "westus3" - ] + "description": "AWS access key ID." }, - "apiKey": { + "awsSecretAccessKey": { "type": "string", - "description": "This is not returned in the API.", - "maxLength": 10000 + "description": "AWS access key secret. This is not returned in the API." }, - "name": { + "region": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 + "description": "AWS region in which the S3 bucket is located." }, - "bucketPlan": { - "description": "This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.", - "allOf": [ - { - "$ref": "#/components/schemas/AzureBlobStorageBucketPlan" - } - ] - } - } - }, - "UpdateAzureOpenAICredentialDTO": { - "type": "object", - "properties": { - "region": { + "s3BucketName": { "type": "string", - "enum": [ - "australia", - "canadaeast", - "canadacentral", - "eastus2", - "eastus", - "france", - "india", - "japaneast", - "japanwest", - "uaenorth", - "northcentralus", - "norway", - "southcentralus", - "swedencentral", - "switzerland", - "uk", - "westus", - "westus3" - ] + "description": "AWS S3 bucket name." + }, + "s3PathPrefix": { + "type": "string", + "description": "The path prefix for the uploaded recording. Ex. \"recordings/\"" + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." }, - "models": { - "type": "array", - "enum": [ - "gpt-4o-2024-08-06", - "gpt-4o-mini-2024-07-18", - "gpt-4o-2024-05-13", - "gpt-4-turbo-2024-04-09", - "gpt-4-0125-preview", - "gpt-4-1106-preview", - "gpt-4-0613", - "gpt-35-turbo-0125", - "gpt-35-turbo-1106" - ], - "example": [ - "gpt-4-0125-preview", - "gpt-4-0613" - ], - "items": { - "type": "string", - "enum": [ - "gpt-4o-2024-08-06", - "gpt-4o-mini-2024-07-18", - "gpt-4o-2024-05-13", - "gpt-4-turbo-2024-04-09", - "gpt-4-0125-preview", - "gpt-4-1106-preview", - "gpt-4-0613", - "gpt-35-turbo-0125", - "gpt-35-turbo-1106" - ] - } + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." }, - "openAIKey": { + "createdAt": { + "format": "date-time", "type": "string", - "maxLength": 10000, - "description": "This is not returned in the API." + "description": "This is the ISO 8601 date-time string of when the credential was created." }, - "ocpApimSubscriptionKey": { + "updatedAt": { + "format": "date-time", "type": "string", - "description": "This is not returned in the API." + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 - }, - "openAIEndpoint": { - "type": "string", - "maxLength": 10000 } - } + }, + "required": [ + "provider", + "awsAccessKeyId", + "awsSecretAccessKey", + "region", + "s3BucketName", + "s3PathPrefix", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateByoSipTrunkCredentialDTO": { + "SmallestAICredential": { "type": "object", "properties": { - "name": { + "provider": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - }, - "gateways": { - "description": "This is the list of SIP trunk's gateways.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SipTrunkGateway" - } - }, - "outboundAuthenticationPlan": { - "description": "This can be used to configure the outbound authentication if required by the SIP trunk.", - "allOf": [ - { - "$ref": "#/components/schemas/SipTrunkOutboundAuthenticationPlan" - } + "enum": [ + "smallest-ai" ] }, - "outboundLeadingPlusEnabled": { - "type": "boolean", - "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false" + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, - "techPrefix": { + "id": { "type": "string", - "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.", - "maxLength": 10000 + "description": "This is the unique identifier for the credential." }, - "sipDiversionHeader": { + "orgId": { "type": "string", - "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.", - "maxLength": 10000 + "description": "This is the unique identifier for the org that this credential belongs to." }, - "sbcConfiguration": { - "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.", - "allOf": [ - { - "$ref": "#/components/schemas/SbcConfiguration" - } - ] - } - } - }, - "UpdateCartesiaCredentialDTO": { - "type": "object", - "properties": { - "apiKey": { + "createdAt": { + "format": "date-time", "type": "string", - "description": "This is not returned in the API." + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, "name": { "type": "string", @@ -24032,38 +27827,90 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateCerebrasCredentialDTO": { + "SpeechmaticsCredential": { "type": "object", "properties": { + "provider": { + "type": "string", + "enum": [ + "speechmatics" + ] + }, "apiKey": { "type": "string", - "maxLength": 10000, "description": "This is not returned in the API." }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateCloudflareCredentialDTO": { + "SupabaseCredential": { "type": "object", "properties": { - "accountId": { + "provider": { "type": "string", - "description": "Cloudflare Account Id." + "enum": [ + "supabase" + ], + "description": "This is for supabase storage." }, - "apiKey": { + "id": { "type": "string", - "description": "Cloudflare API Key / Token." + "description": "This is the unique identifier for the credential." }, - "accountEmail": { + "orgId": { "type": "string", - "description": "Cloudflare Account Email." + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, "name": { "type": "string", @@ -24072,183 +27919,314 @@ "maxLength": 40 }, "bucketPlan": { - "description": "This is the bucket plan that can be provided to store call artifacts in R2", - "allOf": [ - { - "$ref": "#/components/schemas/CloudflareR2BucketPlan" - } - ] + "$ref": "#/components/schemas/SupabaseBucketPlan" } - } + }, + "required": [ + "provider", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateCustomLLMCredentialDTO": { + "TavusCredential": { "type": "object", "properties": { + "provider": { + "type": "string", + "enum": [ + "tavus" + ] + }, "apiKey": { "type": "string", - "maxLength": 10000, "description": "This is not returned in the API." }, - "authenticationPlan": { - "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey", - "allOf": [ - { - "$ref": "#/components/schemas/OAuth2AuthenticationPlan" - } - ] + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." }, - "name": { + "orgId": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - } - } - }, - "UpdateDeepgramCredentialDTO": { - "type": "object", - "properties": { - "apiKey": { + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", "type": "string", - "description": "This is not returned in the API." + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 - }, - "apiUrl": { - "type": "string", - "description": "This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com." } - } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateDeepInfraCredentialDTO": { + "TogetherAICredential": { "type": "object", "properties": { + "provider": { + "type": "string", + "enum": [ + "together-ai" + ] + }, "apiKey": { "type": "string", "description": "This is not returned in the API." }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateDeepSeekCredentialDTO": { + "TrieveCredential": { "type": "object", "properties": { + "provider": { + "type": "string", + "enum": [ + "trieve" + ] + }, "apiKey": { "type": "string", "description": "This is not returned in the API." }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateElevenLabsCredentialDTO": { + "TwilioCredential": { "type": "object", "properties": { - "apiKey": { + "provider": { + "type": "string", + "enum": [ + "twilio" + ] + }, + "authToken": { "type": "string", - "maxLength": 10000, "description": "This is not returned in the API." }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 + }, + "accountSid": { + "type": "string" } - } + }, + "required": [ + "provider", + "authToken", + "id", + "orgId", + "createdAt", + "updatedAt", + "accountSid" + ] }, - "UpdateGcpCredentialDTO": { + "VonageCredential": { "type": "object", "properties": { - "name": { + "vonageApplicationPrivateKey": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 + "description": "This is not returned in the API.", + "maxLength": 10000 }, - "gcpKey": { - "description": "This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details//keys.\n\nThe schema is identical to the JSON that GCP outputs.", - "allOf": [ - { - "$ref": "#/components/schemas/GcpKey" - } + "provider": { + "type": "string", + "enum": [ + "vonage" ] }, - "bucketPlan": { - "description": "This is the bucket plan that can be provided to store call artifacts in GCP.", - "allOf": [ - { - "$ref": "#/components/schemas/BucketPlan" - } - ] - } - } - }, - "UpdateGladiaCredentialDTO": { - "type": "object", - "properties": { - "apiKey": { + "apiSecret": { "type": "string", "description": "This is not returned in the API." }, - "name": { + "id": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - } - } - }, - "UpdateGoHighLevelCredentialDTO": { - "type": "object", - "properties": { - "apiKey": { + "description": "This is the unique identifier for the credential." + }, + "orgId": { "type": "string", - "description": "This is not returned in the API." + "description": "This is the unique identifier for the org that this credential belongs to." }, - "name": { + "createdAt": { + "format": "date-time", "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - } - } - }, - "UpdateGoogleCredentialDTO": { - "type": "object", - "properties": { - "apiKey": { + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", "type": "string", - "maxLength": 10000, - "description": "This is not returned in the API." + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, + "vonageApplicationId": { + "type": "string", + "description": "This is the Vonage Application ID for the credential.\n\nOnly relevant for Vonage credentials.", + "maxLength": 10000 }, "name": { "type": "string", "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 + }, + "apiKey": { + "type": "string" } - } + }, + "required": [ + "vonageApplicationPrivateKey", + "provider", + "apiSecret", + "id", + "orgId", + "createdAt", + "updatedAt", + "vonageApplicationId", + "apiKey" + ] }, - "UpdateGroqCredentialDTO": { + "WebhookCredential": { "type": "object", "properties": { - "apiKey": { + "provider": { "type": "string", - "description": "This is not returned in the API." + "enum": [ + "webhook" + ] + }, + "authenticationPlan": { + "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749.", + "allOf": [ + { + "$ref": "#/components/schemas/OAuth2AuthenticationPlan" + } + ] + }, + "id": { + "type": "string", + "description": "This is the unique identifier for the credential." + }, + "orgId": { + "type": "string", + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." + }, + "authenticationSession": { + "description": "This is the authentication session for the credential. Available for credentials that have an authentication plan.", + "allOf": [ + { + "$ref": "#/components/schemas/Oauth2AuthenticationSession" + } + ] }, "name": { "type": "string", @@ -24256,38 +28234,49 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "authenticationPlan", + "id", + "orgId", + "createdAt", + "updatedAt", + "authenticationSession" + ] }, - "UpdateInflectionAICredentialDTO": { + "XAiCredential": { "type": "object", "properties": { + "provider": { + "type": "string", + "description": "This is the api key for Grok in XAi's console. Get it from here: https://console.x.ai", + "enum": [ + "xai" + ] + }, "apiKey": { "type": "string", "maxLength": 10000, "description": "This is not returned in the API." }, - "name": { + "id": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - } - } - }, - "UpdateLangfuseCredentialDTO": { - "type": "object", - "properties": { - "publicKey": { + "description": "This is the unique identifier for the credential." + }, + "orgId": { "type": "string", - "description": "The public key for Langfuse project. Eg: pk-lf-..." + "description": "This is the unique identifier for the org that this credential belongs to." }, - "apiKey": { + "createdAt": { + "format": "date-time", "type": "string", - "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API." + "description": "This is the ISO 8601 date-time string of when the credential was created." }, - "apiUrl": { + "updatedAt": { + "format": "date-time", "type": "string", - "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com" + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, "name": { "type": "string", @@ -24295,37 +28284,42 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateLmntCredentialDTO": { + "GoogleCalendarOAuth2ClientCredential": { "type": "object", "properties": { - "apiKey": { + "provider": { "type": "string", - "description": "This is not returned in the API." + "enum": [ + "google.calendar.oauth2-client" + ] }, - "name": { + "id": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - } - } - }, - "UpdateMakeCredentialDTO": { - "type": "object", - "properties": { - "teamId": { + "description": "This is the unique identifier for the credential." + }, + "orgId": { "type": "string", - "description": "Team ID" + "description": "This is the unique identifier for the org that this credential belongs to." }, - "region": { + "createdAt": { + "format": "date-time", "type": "string", - "description": "Region of your application. For example: eu1, eu2, us1, us2" + "description": "This is the ISO 8601 date-time string of when the credential was created." }, - "apiKey": { + "updatedAt": { + "format": "date-time", "type": "string", - "description": "This is not returned in the API." + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, "name": { "type": "string", @@ -24333,44 +28327,45 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdateOpenAICredentialDTO": { + "GoogleCalendarOAuth2AuthorizationCredential": { "type": "object", "properties": { - "apiKey": { + "provider": { "type": "string", - "description": "This is not returned in the API." + "enum": [ + "google.calendar.oauth2-authorization" + ] }, - "name": { + "authorizationId": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - } - } - }, - "UpdateOpenRouterCredentialDTO": { - "type": "object", - "properties": { - "apiKey": { + "description": "The authorization ID for the OAuth2 authorization" + }, + "id": { "type": "string", - "description": "This is not returned in the API." + "description": "This is the unique identifier for the credential." }, - "name": { + "orgId": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - } - } - }, - "UpdatePerplexityAICredentialDTO": { - "type": "object", - "properties": { - "apiKey": { + "description": "This is the unique identifier for the org that this credential belongs to." + }, + "createdAt": { + "format": "date-time", "type": "string", - "description": "This is not returned in the API." + "description": "This is the ISO 8601 date-time string of when the credential was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "This is the ISO 8601 date-time string of when the assistant was last updated." }, "name": { "type": "string", @@ -24378,13 +28373,28 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "authorizationId", + "id", + "orgId", + "createdAt", + "updatedAt" + ] }, - "UpdatePlayHTCredentialDTO": { + "CreateCerebrasCredentialDTO": { "type": "object", "properties": { + "provider": { + "type": "string", + "enum": [ + "cerebras" + ] + }, "apiKey": { "type": "string", + "maxLength": 10000, "description": "This is not returned in the API." }, "name": { @@ -24392,17 +28402,26 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 - }, - "userId": { - "type": "string" } - } + }, + "required": [ + "provider", + "apiKey" + ] }, - "UpdateRimeAICredentialDTO": { + "CreateGoogleCredentialDTO": { "type": "object", "properties": { + "provider": { + "type": "string", + "description": "This is the key for Gemini in Google AI Studio. Get it from here: https://aistudio.google.com/app/apikey", + "enum": [ + "google" + ] + }, "apiKey": { "type": "string", + "maxLength": 10000, "description": "This is not returned in the API." }, "name": { @@ -24411,13 +28430,24 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey" + ] }, - "UpdateRunpodCredentialDTO": { + "CreateHumeCredentialDTO": { "type": "object", "properties": { + "provider": { + "type": "string", + "enum": [ + "hume" + ] + }, "apiKey": { "type": "string", + "maxLength": 10000, "description": "This is not returned in the API." }, "name": { @@ -24426,30 +28456,26 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey" + ] }, - "UpdateS3CredentialDTO": { + "CreateInflectionAICredentialDTO": { "type": "object", "properties": { - "awsAccessKeyId": { - "type": "string", - "description": "AWS access key ID." - }, - "awsSecretAccessKey": { - "type": "string", - "description": "AWS access key secret. This is not returned in the API." - }, - "region": { - "type": "string", - "description": "AWS region in which the S3 bucket is located." - }, - "s3BucketName": { + "provider": { "type": "string", - "description": "AWS S3 bucket name." + "description": "This is the api key for Pi in InflectionAI's console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup", + "enum": [ + "inflection-ai" + ] }, - "s3PathPrefix": { + "apiKey": { "type": "string", - "description": "The path prefix for the uploaded recording. Ex. \"recordings/\"" + "maxLength": 10000, + "description": "This is not returned in the API." }, "name": { "type": "string", @@ -24457,27 +28483,24 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey" + ] }, - "UpdateSupabaseCredentialDTO": { + "CreateMistralCredentialDTO": { "type": "object", "properties": { - "name": { + "provider": { "type": "string", - "description": "This is the name of credential. This is just for your reference.", - "minLength": 1, - "maxLength": 40 - }, - "bucketPlan": { - "$ref": "#/components/schemas/SupabaseBucketPlan" - } - } - }, - "UpdateSmallestAICredentialDTO": { - "type": "object", - "properties": { + "enum": [ + "mistral" + ] + }, "apiKey": { "type": "string", + "maxLength": 100, "description": "This is not returned in the API." }, "name": { @@ -24486,11 +28509,21 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey" + ] }, - "UpdateTavusCredentialDTO": { + "CreateNeuphonicCredentialDTO": { "type": "object", "properties": { + "provider": { + "type": "string", + "enum": [ + "neuphonic" + ] + }, "apiKey": { "type": "string", "description": "This is not returned in the API." @@ -24501,11 +28534,21 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey" + ] }, - "UpdateTogetherAICredentialDTO": { + "CreateSpeechmaticsCredentialDTO": { "type": "object", "properties": { + "provider": { + "type": "string", + "enum": [ + "speechmatics" + ] + }, "apiKey": { "type": "string", "description": "This is not returned in the API." @@ -24516,12 +28559,22 @@ "minLength": 1, "maxLength": 40 } - } + }, + "required": [ + "provider", + "apiKey" + ] }, - "UpdateTwilioCredentialDTO": { + "CreateTrieveCredentialDTO": { "type": "object", "properties": { - "authToken": { + "provider": { + "type": "string", + "enum": [ + "trieve" + ] + }, + "apiKey": { "type": "string", "description": "This is not returned in the API." }, @@ -24530,17 +28583,19 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 - }, - "accountSid": { - "type": "string" } - } + }, + "required": [ + "provider", + "apiKey" + ] }, - "UpdateVonageCredentialDTO": { + "UpdateAnthropicCredentialDTO": { "type": "object", "properties": { - "apiSecret": { + "apiKey": { "type": "string", + "maxLength": 10000, "description": "This is not returned in the API." }, "name": { @@ -24548,13 +28603,10 @@ "description": "This is the name of credential. This is just for your reference.", "minLength": 1, "maxLength": 40 - }, - "apiKey": { - "type": "string" } } }, - "UpdateXAiCredentialDTO": { + "UpdateAnyscaleCredentialDTO": { "type": "object", "properties": { "apiKey": { @@ -24570,1807 +28622,1773 @@ } } }, - "CreateOrgDTO": { + "UpdateAssemblyAICredentialDTO": { "type": "object", "properties": { - "hipaaEnabled": { - "type": "boolean", - "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.", - "example": false - }, - "subscriptionId": { + "apiKey": { "type": "string", - "description": "This is the ID of the subscription the org belongs to." + "description": "This is not returned in the API." }, "name": { "type": "string", - "description": "This is the name of the org. This is just for your own reference.", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, "maxLength": 40 - }, - "channel": { - "type": "string", - "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.", - "enum": [ - "default", - "weekly" - ] - }, - "billingLimit": { - "type": "number", - "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.", - "minimum": 0, - "maximum": 1000 - }, - "server": { - "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] - }, - "concurrencyLimit": { - "type": "number", - "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.", - "minimum": 1, - "maximum": 10 } } }, - "AutoReloadPlan": { - "type": "object", - "properties": { - "credits": { - "type": "number", - "description": "This the amount of credits to reload." - }, - "threshold": { - "type": "number", - "description": "This is the limit at which the reload is triggered." - } - }, - "required": [ - "credits", - "threshold" - ] - }, - "InvoicePlan": { + "UpdateAzureCredentialDTO": { "type": "object", "properties": { - "companyName": { + "service": { "type": "string", - "description": "This is the name of the company." + "description": "This is the service being used in Azure.", + "enum": [ + "speech", + "blob_storage" + ], + "default": "speech" }, - "companyAddress": { + "region": { "type": "string", - "description": "This is the address of the company." + "description": "This is the region of the Azure resource.", + "enum": [ + "australia", + "canadaeast", + "canadacentral", + "eastus2", + "eastus", + "france", + "india", + "japaneast", + "japanwest", + "uaenorth", + "northcentralus", + "norway", + "southcentralus", + "swedencentral", + "switzerland", + "uk", + "westus", + "westus3" + ] }, - "companyTaxId": { + "apiKey": { "type": "string", - "description": "This is the tax ID of the company." + "description": "This is not returned in the API.", + "maxLength": 10000 }, - "companyEmail": { + "name": { "type": "string", - "description": "This is the preferred invoicing email of the company. If not specified, defaults to the subscription's email." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + }, + "bucketPlan": { + "description": "This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage.", + "allOf": [ + { + "$ref": "#/components/schemas/AzureBlobStorageBucketPlan" + } + ] } } }, - "Subscription": { + "UpdateAzureOpenAICredentialDTO": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "This is the unique identifier for the subscription." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the timestamp when the subscription was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the timestamp when the subscription was last updated." - }, - "type": { - "type": "string", - "description": "This is the type / tier of the subscription.", - "enum": [ - "trial", - "pay-as-you-go", - "enterprise" - ] - }, - "status": { + "region": { "type": "string", - "description": "This is the status of the subscription. Past due subscriptions are subscriptions\nwith past due payments.", "enum": [ - "active", - "frozen" - ] - }, - "credits": { - "type": "string", - "description": "This is the number of credits the subscription currently has.\n\nNote: This is a string to avoid floating point precision issues." - }, - "concurrencyCounter": { - "type": "number", - "description": "This is the total number of active calls (concurrency) across all orgs under this subscription.", - "minimum": 1 - }, - "concurrencyLimitIncluded": { - "type": "number", - "description": "This is the default concurrency limit for the subscription.", - "minimum": 1 - }, - "phoneNumbersCounter": { - "type": "number", - "description": "This is the number of free phone numbers the subscription has", - "minimum": 1 - }, - "phoneNumbersIncluded": { - "type": "number", - "description": "This is the maximum number of free phone numbers the subscription can have", - "minimum": 1 - }, - "concurrencyLimitPurchased": { - "type": "number", - "description": "This is the purchased add-on concurrency limit for the subscription.", - "minimum": 1 - }, - "monthlyChargeScheduleId": { - "type": "number", - "description": "This is the ID of the monthly job that charges for subscription add ons and phone numbers." - }, - "monthlyCreditCheckScheduleId": { - "type": "number", - "description": "This is the ID of the monthly job that checks whether the credit balance of the subscription\nis sufficient for the monthly charge." + "australia", + "canadaeast", + "canadacentral", + "eastus2", + "eastus", + "france", + "india", + "japaneast", + "japanwest", + "uaenorth", + "northcentralus", + "norway", + "southcentralus", + "swedencentral", + "switzerland", + "uk", + "westus", + "westus3" + ] }, - "stripeCustomerId": { - "type": "string", - "description": "This is the Stripe customer ID." + "models": { + "type": "array", + "enum": [ + "gpt-4o-2024-11-20", + "gpt-4o-2024-08-06", + "gpt-4o-mini-2024-07-18", + "gpt-4o-2024-05-13", + "gpt-4-turbo-2024-04-09", + "gpt-4-0125-preview", + "gpt-4-1106-preview", + "gpt-4-0613", + "gpt-35-turbo-0125", + "gpt-35-turbo-1106" + ], + "example": [ + "gpt-4-0125-preview", + "gpt-4-0613" + ], + "items": { + "type": "string", + "enum": [ + "gpt-4o-2024-11-20", + "gpt-4o-2024-08-06", + "gpt-4o-mini-2024-07-18", + "gpt-4o-2024-05-13", + "gpt-4-turbo-2024-04-09", + "gpt-4-0125-preview", + "gpt-4-1106-preview", + "gpt-4-0613", + "gpt-35-turbo-0125", + "gpt-35-turbo-1106" + ] + } }, - "stripePaymentMethodId": { + "openAIKey": { "type": "string", - "description": "This is the Stripe payment ID." - }, - "slackSupportEnabled": { - "type": "boolean", - "description": "If this flag is true, then the user has purchased slack support." + "maxLength": 10000, + "description": "This is not returned in the API." }, - "slackChannelId": { + "ocpApimSubscriptionKey": { "type": "string", - "description": "If this subscription has a slack support subscription, the slack channel's ID will be stored here." - }, - "hipaaEnabled": { - "type": "boolean", - "description": "This is the HIPAA enabled flag for the subscription. It determines whether orgs under this\nsubscription have the option to enable HIPAA compliance." + "description": "This is not returned in the API." }, - "hipaaCommonPaperAgreementId": { + "name": { "type": "string", - "description": "This is the ID for the Common Paper agreement outlining the HIPAA contract." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 }, - "stripePaymentMethodFingerprint": { + "openAIEndpoint": { "type": "string", - "description": "This is the Stripe fingerprint of the payment method (card). It allows us\nto detect users who try to abuse our system through multiple sign-ups." - }, - "stripeCustomerEmail": { + "maxLength": 10000 + } + } + }, + "UpdateByoSipTrunkCredentialDTO": { + "type": "object", + "properties": { + "name": { "type": "string", - "description": "This is the customer's email on Stripe." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 }, - "referredByEmail": { - "type": "string", - "description": "This is the email of the referrer for the subscription." + "gateways": { + "description": "This is the list of SIP trunk's gateways.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SipTrunkGateway" + } }, - "autoReloadPlan": { - "description": "This is the auto reload plan configured for the subscription.", + "outboundAuthenticationPlan": { + "description": "This can be used to configure the outbound authentication if required by the SIP trunk.", "allOf": [ { - "$ref": "#/components/schemas/AutoReloadPlan" + "$ref": "#/components/schemas/SipTrunkOutboundAuthenticationPlan" } ] }, - "minutesIncluded": { - "type": "number", - "description": "The number of minutes included in the subscription.", - "minimum": 0 - }, - "minutesUsed": { - "type": "number", - "description": "The number of minutes used in the subscription.", - "minimum": 0 - }, - "minutesUsedNextResetAt": { - "format": "date-time", - "type": "string", - "description": "This is the timestamp at which the number of monthly free minutes is scheduled to reset at." - }, - "minutesOverageCost": { - "type": "number", - "description": "The per minute charge on minutes that exceed the included minutes. Enterprise only." - }, - "providersIncluded": { - "description": "The list of providers included in the subscription. Enterprise only.", - "type": "array", - "items": { - "type": "string" - } - }, - "outboundCallsDailyLimit": { - "type": "number", - "description": "The maximum number of outbound calls this subscription may make in a day. Resets every night.", - "minimum": 1 - }, - "outboundCallsCounter": { - "type": "number", - "description": "The current number of outbound calls the subscription has made in the current day.", - "minimum": 1 + "outboundLeadingPlusEnabled": { + "type": "boolean", + "description": "This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior.\n\nUsage:\n- Vonage/Twilio requires leading plus for all outbound calls. Set this to true.\n\n@default false" }, - "outboundCallsCounterNextResetAt": { - "format": "date-time", + "techPrefix": { "type": "string", - "description": "This is the timestamp at which the outbound calls counter is scheduled to reset at." - }, - "couponIds": { - "description": "This is the IDs of the coupons applicable to this subscription.", - "type": "array", - "items": { - "type": "string" - } + "description": "This can be used to configure the tech prefix on outbound calls. This is an advanced property.", + "maxLength": 10000 }, - "couponUsageLeft": { + "sipDiversionHeader": { "type": "string", - "description": "This is the number of credits left obtained from a coupon." + "description": "This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property.", + "maxLength": 10000 }, - "invoicePlan": { - "description": "This is the invoice plan for the subscription.", + "sbcConfiguration": { + "description": "This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi.", "allOf": [ { - "$ref": "#/components/schemas/InvoicePlan" + "$ref": "#/components/schemas/SbcConfiguration" } ] } - }, - "required": [ - "id", - "createdAt", - "updatedAt", - "type", - "status", - "credits", - "concurrencyCounter", - "concurrencyLimitIncluded", - "concurrencyLimitPurchased" - ] + } }, - "OrgPlan": { + "UpdateCartesiaCredentialDTO": { "type": "object", "properties": { - "includedProviders": { - "type": "array", - "items": { - "type": "object" - } - }, - "includedMinutes": { - "type": "number" + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, - "costPerOverageMinute": { - "type": "number" + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } } }, - "Org": { + "UpdateCerebrasCredentialDTO": { "type": "object", "properties": { - "hipaaEnabled": { - "type": "boolean", - "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.", - "example": false - }, - "subscription": { - "$ref": "#/components/schemas/Subscription" - }, - "subscriptionId": { - "type": "string", - "description": "This is the ID of the subscription the org belongs to." - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the org." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the org was created." - }, - "updatedAt": { - "format": "date-time", + "apiKey": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the org was last updated." + "maxLength": 10000, + "description": "This is not returned in the API." }, - "stripeCustomerId": { + "name": { "type": "string", - "description": "This is the Stripe customer for the org." - }, - "stripeSubscriptionId": { + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateCloudflareCredentialDTO": { + "type": "object", + "properties": { + "accountId": { "type": "string", - "description": "This is the subscription for the org." + "description": "Cloudflare Account Id." }, - "stripeSubscriptionItemId": { + "apiKey": { "type": "string", - "description": "This is the subscription's subscription item." + "description": "Cloudflare API Key / Token." }, - "stripeSubscriptionCurrentPeriodStart": { - "format": "date-time", + "accountEmail": { "type": "string", - "description": "This is the subscription's current period start." + "description": "Cloudflare Account Email." }, - "stripeSubscriptionStatus": { + "name": { "type": "string", - "description": "This is the subscription's status." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 }, - "plan": { - "description": "This is the plan for the org.", + "bucketPlan": { + "description": "This is the bucket plan that can be provided to store call artifacts in R2", "allOf": [ { - "$ref": "#/components/schemas/OrgPlan" + "$ref": "#/components/schemas/CloudflareR2BucketPlan" } ] - }, - "name": { - "type": "string", - "description": "This is the name of the org. This is just for your own reference.", - "maxLength": 40 - }, - "channel": { + } + } + }, + "UpdateCustomLLMCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { "type": "string", - "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.", - "enum": [ - "default", - "weekly" - ] - }, - "billingLimit": { - "type": "number", - "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.", - "minimum": 0, - "maximum": 1000 + "maxLength": 10000, + "description": "This is not returned in the API." }, - "server": { - "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", + "authenticationPlan": { + "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey", "allOf": [ { - "$ref": "#/components/schemas/Server" + "$ref": "#/components/schemas/OAuth2AuthenticationPlan" } ] }, - "concurrencyLimit": { - "type": "number", - "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.", - "minimum": 1, - "maximum": 10 + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } - }, - "required": [ - "id", - "createdAt", - "updatedAt" - ] + } }, - "UpdateOrgDTO": { + "UpdateDeepgramCredentialDTO": { "type": "object", "properties": { - "hipaaEnabled": { - "type": "boolean", - "description": "When this is enabled, no logs, recordings, or transcriptions will be stored. At the end of the call, you will still receive an end-of-call-report message to store on your server. Defaults to false.\nWhen HIPAA is enabled, only OpenAI/Custom LLM or Azure Providers will be available for LLM and Voice respectively.\nThis is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.", - "example": false - }, - "subscriptionId": { + "apiKey": { "type": "string", - "description": "This is the ID of the subscription the org belongs to." + "description": "This is not returned in the API." }, "name": { "type": "string", - "description": "This is the name of the org. This is just for your own reference.", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, "maxLength": 40 }, - "channel": { + "apiUrl": { "type": "string", - "description": "This is the channel of the org. There is the cluster the API traffic for the org will be directed.", - "enum": [ - "default", - "weekly" - ] - }, - "billingLimit": { - "type": "number", - "description": "This is the monthly billing limit for the org. To go beyond $1000/mo, please contact us at support@vapi.ai.", - "minimum": 0, - "maximum": 1000 - }, - "server": { - "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] - }, - "concurrencyLimit": { - "type": "number", - "description": "This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai.", - "minimum": 1, - "maximum": 10 + "description": "This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com." } } }, - "User": { + "UpdateDeepInfraCredentialDTO": { "type": "object", "properties": { - "id": { + "apiKey": { "type": "string", - "description": "This is the unique identifier for the profile or user." + "description": "This is not returned in the API." }, - "createdAt": { - "format": "date-time", + "name": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the profile was created." - }, - "updatedAt": { - "format": "date-time", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateDeepSeekCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the profile was last updated." + "description": "This is not returned in the API." }, - "email": { + "name": { "type": "string", - "description": "This is the email of the user that is associated with the profile." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateElevenLabsCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { + "type": "string", + "maxLength": 10000, + "description": "This is not returned in the API." }, - "fullName": { + "name": { "type": "string", - "description": "This is the full name of the user that is associated with the profile." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } - }, - "required": [ - "id", - "createdAt", - "updatedAt", - "email" - ] + } }, - "InviteUserDTO": { + "UpdateGcpCredentialDTO": { "type": "object", "properties": { - "emails": { - "maxItems": 100, - "type": "array", - "items": { - "type": "string" - } + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 }, - "role": { - "enum": [ - "admin", - "editor", - "viewer" - ], - "type": "string" + "gcpKey": { + "description": "This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details//keys.\n\nThe schema is identical to the JSON that GCP outputs.", + "allOf": [ + { + "$ref": "#/components/schemas/GcpKey" + } + ] }, - "redirectTo": { - "type": "string" + "bucketPlan": { + "description": "This is the bucket plan that can be provided to store call artifacts in GCP.", + "allOf": [ + { + "$ref": "#/components/schemas/BucketPlan" + } + ] } - }, - "required": [ - "emails", - "role" - ] + } }, - "UpdateUserRoleDTO": { + "UpdateGladiaCredentialDTO": { "type": "object", "properties": { - "userId": { - "type": "string" + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, - "role": { - "enum": [ - "admin", - "editor", - "viewer" - ], - "type": "string" + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } - }, - "required": [ - "userId", - "role" - ] + } }, - "VoiceLibraryVoiceResponse": { + "UpdateGoHighLevelCredentialDTO": { "type": "object", "properties": { - "voiceId": { - "type": "string" + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, "name": { - "type": "string" - }, - "publicOwnerId": { - "type": "string" - }, - "description": { - "type": "string" - }, - "gender": { - "type": "string" + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateGoogleCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { + "type": "string", + "maxLength": 10000, + "description": "This is not returned in the API." }, - "age": { - "type": "object" + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateGroqCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, - "accent": { - "type": "string" + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } - }, - "required": [ - "voiceId", - "name" - ] + } }, - "AddVoiceToProviderDTO": { + "UpdateHumeCredentialDTO": { "type": "object", "properties": { - "ownerId": { + "apiKey": { "type": "string", - "description": "This is the owner_id of your shared voice which you want to add to your provider Account from Provider Voice Library" + "maxLength": 10000, + "description": "This is not returned in the API." }, - "voiceId": { + "name": { "type": "string", - "description": "This is the voice_id of the shared voice which you want to add to your provider Account from Provider Voice Library" + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateInflectionAICredentialDTO": { + "type": "object", + "properties": { + "apiKey": { + "type": "string", + "maxLength": 10000, + "description": "This is not returned in the API." }, "name": { "type": "string", - "description": "This is the new name of the voice which you want to have once you have added voice to your provider Account from Provider Voice Library" + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } - }, - "required": [ - "ownerId", - "voiceId", - "name" - ] + } }, - "VoiceLibrary": { + "UpdateLangfuseCredentialDTO": { "type": "object", "properties": { - "provider": { - "type": "object", - "description": "This is the voice provider that will be used.", - "enum": [ - "vapi", - "11labs", - "azure", - "cartesia", - "custom-voice", - "deepgram", - "hume", - "lmnt", - "neets", - "neuphonic", - "openai", - "playht", - "rime-ai", - "smallest-ai", - "tavus" - ] + "publicKey": { + "type": "string", + "description": "The public key for Langfuse project. Eg: pk-lf-..." }, - "providerId": { + "apiKey": { "type": "string", - "description": "The ID of the voice provided by the provider." + "description": "The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API." }, - "slug": { + "apiUrl": { "type": "string", - "description": "The unique slug of the voice." + "description": "The host URL for Langfuse project. Eg: https://cloud.langfuse.com" }, "name": { "type": "string", - "description": "The name of the voice." - }, - "language": { + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateLmntCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { "type": "string", - "description": "The language of the voice." + "description": "This is not returned in the API." }, - "languageCode": { + "name": { "type": "string", - "description": "The language code of the voice." - }, - "model": { + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateMakeCredentialDTO": { + "type": "object", + "properties": { + "teamId": { "type": "string", - "description": "The model of the voice." + "description": "Team ID" }, - "supportedModels": { + "region": { "type": "string", - "description": "The supported models of the voice." + "description": "Region of your application. For example: eu1, eu2, us1, us2" }, - "gender": { + "apiKey": { "type": "string", - "description": "The gender of the voice.", - "enum": [ - "male", - "female" - ] + "description": "This is not returned in the API." }, - "accent": { + "name": { "type": "string", - "description": "The accent of the voice." - }, - "previewUrl": { + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateMistralCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { "type": "string", - "description": "The preview URL of the voice." + "maxLength": 100, + "description": "This is not returned in the API." }, - "description": { + "name": { "type": "string", - "description": "The description of the voice." - }, - "credentialId": { + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateNeuphonicCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { "type": "string", - "description": "The credential ID of the voice." + "description": "This is not returned in the API." }, - "id": { + "name": { "type": "string", - "description": "The unique identifier for the voice library." - }, - "orgId": { + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateOpenAICredentialDTO": { + "type": "object", + "properties": { + "apiKey": { "type": "string", - "description": "The unique identifier for the organization that this voice library belongs to." - }, - "isPublic": { - "type": "boolean", - "description": "The Public voice is shared accross all the organizations." - }, - "isDeleted": { - "type": "boolean", - "description": "The deletion status of the voice." + "description": "This is not returned in the API." }, - "createdAt": { - "format": "date-time", + "name": { "type": "string", - "description": "The ISO 8601 date-time string of when the voice library was created." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateOpenRouterCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, - "updatedAt": { - "format": "date-time", + "name": { "type": "string", - "description": "The ISO 8601 date-time string of when the voice library was last updated." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } - }, - "required": [ - "id", - "orgId", - "isPublic", - "isDeleted", - "createdAt", - "updatedAt" - ] + } }, - "CloneVoiceDTO": { + "UpdatePerplexityAICredentialDTO": { "type": "object", "properties": { - "name": { + "apiKey": { "type": "string", - "description": "This is the name of the cloned voice in the provider account." + "description": "This is not returned in the API." }, - "description": { + "name": { "type": "string", - "description": "This is the description of your cloned voice." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdatePlayHTCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, - "labels": { + "name": { "type": "string", - "description": "Serialized labels dictionary for the voice." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 }, - "files": { - "description": "These are the files you want to use to clone your voice. Only Audio files are supported.", - "type": "array", - "items": { - "type": "string", - "format": "binary" - } + "userId": { + "type": "string" } - }, - "required": [ - "name", - "files" - ] + } }, - "ToolTemplateSetup": { + "UpdateRimeAICredentialDTO": { "type": "object", "properties": { - "title": { - "type": "string" - }, - "description": { - "type": "string" - }, - "videoUrl": { - "type": "string" + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, - "docsUrl": { - "type": "string" + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } - }, - "required": [ - "title" - ] + } }, - "MakeToolProviderDetails": { + "UpdateRunpodCredentialDTO": { "type": "object", "properties": { - "templateUrl": { + "apiKey": { "type": "string", - "description": "This is the Template URL or the Snapshot URL corresponding to the Template." - }, - "setupInstructions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ToolTemplateSetup" - } + "description": "This is not returned in the API." }, - "type": { + "name": { "type": "string", - "enum": [ - "make" - ], - "description": "The type of tool. \"make\" for Make tool." - }, - "scenarioId": { - "type": "number" - }, - "scenarioName": { - "type": "string" - }, - "triggerHookId": { - "type": "number" - }, - "triggerHookName": { - "type": "string" + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } - }, - "required": [ - "type" - ] + } }, - "GhlToolProviderDetails": { + "UpdateS3CredentialDTO": { "type": "object", "properties": { - "templateUrl": { + "awsAccessKeyId": { "type": "string", - "description": "This is the Template URL or the Snapshot URL corresponding to the Template." - }, - "setupInstructions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ToolTemplateSetup" - } + "description": "AWS access key ID." }, - "type": { + "awsSecretAccessKey": { "type": "string", - "enum": [ - "ghl" - ], - "description": "The type of tool. \"ghl\" for GHL tool." - }, - "workflowId": { - "type": "string" + "description": "AWS access key secret. This is not returned in the API." }, - "workflowName": { - "type": "string" + "region": { + "type": "string", + "description": "AWS region in which the S3 bucket is located." }, - "webhookHookId": { - "type": "string" + "s3BucketName": { + "type": "string", + "description": "AWS S3 bucket name." }, - "webhookHookName": { - "type": "string" + "s3PathPrefix": { + "type": "string", + "description": "The path prefix for the uploaded recording. Ex. \"recordings/\"" }, - "locationId": { - "type": "string" + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } - }, - "required": [ - "type" - ] + } }, - "FunctionToolProviderDetails": { + "UpdateSmallestAICredentialDTO": { "type": "object", "properties": { - "templateUrl": { + "apiKey": { "type": "string", - "description": "This is the Template URL or the Snapshot URL corresponding to the Template." - }, - "setupInstructions": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ToolTemplateSetup" - } + "description": "This is not returned in the API." }, - "type": { + "name": { "type": "string", - "enum": [ - "function" - ], - "description": "The type of tool. \"function\" for Function tool." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } - }, - "required": [ - "type" - ] + } }, - "ToolTemplateMetadata": { + "UpdateSpeechmaticsCredentialDTO": { "type": "object", "properties": { - "collectionType": { - "type": "string" - }, - "collectionId": { - "type": "string" + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, - "collectionName": { - "type": "string" + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 } } }, - "CreateToolTemplateDTO": { + "UpdateSupabaseCredentialDTO": { "type": "object", "properties": { - "details": { - "oneOf": [ - { - "$ref": "#/components/schemas/CreateDtmfToolDTO", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/CreateEndCallToolDTO", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/CreateVoicemailToolDTO", - "title": "VoicemailTool" - }, - { - "$ref": "#/components/schemas/CreateFunctionToolDTO", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/CreateGhlToolDTO", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/CreateMakeToolDTO", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/CreateTransferCallToolDTO", - "title": "TransferCallTool" - } - ] - }, - "providerDetails": { - "oneOf": [ - { - "$ref": "#/components/schemas/MakeToolProviderDetails", - "title": "MakeToolProviderDetails" - }, - { - "$ref": "#/components/schemas/GhlToolProviderDetails", - "title": "GhlToolProviderDetails" - }, - { - "$ref": "#/components/schemas/FunctionToolProviderDetails", - "title": "FunctionToolProviderDetails" - } - ] + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 }, - "metadata": { - "$ref": "#/components/schemas/ToolTemplateMetadata" + "bucketPlan": { + "$ref": "#/components/schemas/SupabaseBucketPlan" + } + } + }, + "UpdateTavusCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, - "visibility": { + "name": { "type": "string", - "default": "private", - "enum": [ - "public", - "private" - ] + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateTogetherAICredentialDTO": { + "type": "object", + "properties": { + "apiKey": { + "type": "string", + "description": "This is not returned in the API." }, - "type": { + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateTrieveCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { "type": "string", - "default": "tool", - "enum": [ - "tool" - ] + "description": "This is not returned in the API." }, "name": { "type": "string", - "description": "The name of the template. This is just for your own reference.", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, "maxLength": 40 - }, - "provider": { - "type": "string", - "enum": [ - "make", - "gohighlevel", - "function" - ] } - }, - "required": [ - "type" - ] + } }, - "Template": { + "UpdateTwilioCredentialDTO": { "type": "object", "properties": { - "details": { - "oneOf": [ - { - "$ref": "#/components/schemas/CreateDtmfToolDTO", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/CreateEndCallToolDTO", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/CreateVoicemailToolDTO", - "title": "VoicemailTool" - }, - { - "$ref": "#/components/schemas/CreateFunctionToolDTO", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/CreateGhlToolDTO", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/CreateMakeToolDTO", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/CreateTransferCallToolDTO", - "title": "TransferCallTool" - } - ] - }, - "providerDetails": { - "oneOf": [ - { - "$ref": "#/components/schemas/MakeToolProviderDetails", - "title": "MakeToolProviderDetails" - }, - { - "$ref": "#/components/schemas/GhlToolProviderDetails", - "title": "GhlToolProviderDetails" - }, - { - "$ref": "#/components/schemas/FunctionToolProviderDetails", - "title": "FunctionToolProviderDetails" - } - ] + "authToken": { + "type": "string", + "description": "This is not returned in the API." }, - "metadata": { - "$ref": "#/components/schemas/ToolTemplateMetadata" + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 }, - "visibility": { - "default": "private", - "enum": [ - "public", - "private" - ], + "accountSid": { "type": "string" - }, - "type": { + } + } + }, + "UpdateVonageCredentialDTO": { + "type": "object", + "properties": { + "apiSecret": { "type": "string", - "default": "tool", - "enum": [ - "tool" - ] + "description": "This is not returned in the API." }, "name": { "type": "string", - "description": "The name of the template. This is just for your own reference.", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, "maxLength": 40 }, - "provider": { - "enum": [ - "make", - "gohighlevel", - "function" - ], + "apiKey": { "type": "string" + } + } + }, + "UpdateWebhookCredentialDTO": { + "type": "object", + "properties": { + "authenticationPlan": { + "description": "This is the authentication plan. Currently supports OAuth2 RFC 6749.", + "allOf": [ + { + "$ref": "#/components/schemas/OAuth2AuthenticationPlan" + } + ] }, - "id": { + "name": { "type": "string", - "description": "The unique identifier for the template." - }, - "orgId": { + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateXAiCredentialDTO": { + "type": "object", + "properties": { + "apiKey": { "type": "string", - "description": "The unique identifier for the organization that this template belongs to." + "maxLength": 10000, + "description": "This is not returned in the API." }, - "createdAt": { - "format": "date-time", + "name": { "type": "string", - "description": "The ISO 8601 date-time string of when the template was created." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateGoogleCalendarOAuth2ClientCredentialDTO": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "UpdateGoogleCalendarOAuth2AuthorizationCredentialDTO": { + "type": "object", + "properties": { + "authorizationId": { + "type": "string", + "description": "The authorization ID for the OAuth2 authorization" }, - "updatedAt": { - "format": "date-time", + "name": { "type": "string", - "description": "The ISO 8601 date-time string of when the template was last updated." + "description": "This is the name of credential. This is just for your reference.", + "minLength": 1, + "maxLength": 40 + } + } + }, + "CredentialSessionResponse": { + "type": "object", + "properties": { + "sessionToken": { + "type": "string" } }, "required": [ - "type", - "id", - "orgId", - "createdAt", - "updatedAt" + "sessionToken" ] }, - "UpdateToolTemplateDTO": { + "CredentialEndUser": { "type": "object", "properties": { - "details": { - "oneOf": [ - { - "$ref": "#/components/schemas/CreateDtmfToolDTO", - "title": "DtmfTool" - }, - { - "$ref": "#/components/schemas/CreateEndCallToolDTO", - "title": "EndCallTool" - }, - { - "$ref": "#/components/schemas/CreateVoicemailToolDTO", - "title": "VoicemailTool" - }, - { - "$ref": "#/components/schemas/CreateFunctionToolDTO", - "title": "FunctionTool" - }, - { - "$ref": "#/components/schemas/CreateGhlToolDTO", - "title": "GhlTool" - }, - { - "$ref": "#/components/schemas/CreateMakeToolDTO", - "title": "MakeTool" - }, - { - "$ref": "#/components/schemas/CreateTransferCallToolDTO", - "title": "TransferCallTool" - } - ] - }, - "providerDetails": { - "oneOf": [ - { - "$ref": "#/components/schemas/MakeToolProviderDetails", - "title": "MakeToolProviderDetails" - }, - { - "$ref": "#/components/schemas/GhlToolProviderDetails", - "title": "GhlToolProviderDetails" - }, - { - "$ref": "#/components/schemas/FunctionToolProviderDetails", - "title": "FunctionToolProviderDetails" - } - ] + "endUserId": { + "type": "string" }, - "metadata": { - "$ref": "#/components/schemas/ToolTemplateMetadata" + "organizationId": { + "type": "string" + } + }, + "required": [ + "endUserId", + "organizationId" + ] + }, + "CredentialSessionError": { + "type": "object", + "properties": { + "type": { + "type": "string" }, - "visibility": { + "description": { + "type": "string" + } + }, + "required": [ + "type", + "description" + ] + }, + "CredentialWebhookDTO": { + "type": "object", + "properties": { + "type": { "type": "string", - "default": "private", "enum": [ - "public", - "private" + "auth", + "sync", + "forward" ] }, - "type": { + "operation": { "type": "string", - "default": "tool", "enum": [ - "tool" + "creation", + "override", + "refresh" ] }, - "name": { - "type": "string", - "description": "The name of the template. This is just for your own reference.", - "maxLength": 40 + "from": { + "type": "string" }, - "provider": { + "connectionId": { + "type": "string" + }, + "authMode": { "type": "string", "enum": [ - "make", - "gohighlevel", - "function" + "OAUTH2", + "API_KEY", + "BASIC" ] + }, + "providerConfigKey": { + "type": "string" + }, + "provider": { + "type": "string" + }, + "environment": { + "type": "string" + }, + "success": { + "type": "boolean" + }, + "endUser": { + "$ref": "#/components/schemas/CredentialEndUser" + }, + "error": { + "$ref": "#/components/schemas/CredentialSessionError" } }, "required": [ - "type" + "type", + "operation", + "from", + "connectionId", + "authMode", + "providerConfigKey", + "provider", + "environment", + "success", + "endUser" ] }, - "TokenRestrictions": { + "CredentialActionRequest": { "type": "object", "properties": { - "enabled": { - "type": "boolean", - "description": "This determines whether the token is enabled or disabled. Default is true, it's enabled." - }, - "allowedOrigins": { - "description": "This determines the allowed origins for this token. Validates the `Origin` header. Default is any origin.\n\nOnly relevant for `public` tokens.", - "type": "array", - "items": { - "type": "string" - } - }, - "allowedAssistantIds": { - "description": "This determines which assistantIds can be used when creating a call. Default is any assistantId.\n\nOnly relevant for `public` tokens.", - "type": "array", - "items": { - "type": "string" - } + "action_name": { + "type": "string" }, - "allowTransientAssistant": { - "type": "boolean", - "description": "This determines whether transient assistants can be used when creating a call. Default is true.\n\nIf `allowedAssistantIds` is provided, this is automatically false.\n\nOnly relevant for `public` tokens." + "input": { + "type": "object" } - } + }, + "required": [ + "action_name", + "input" + ] }, - "CreateTokenDTO": { + "CredentialSessionDTO": { "type": "object", "properties": { - "tag": { + "provider": { "type": "string", - "description": "This is the tag for the token. It represents its scope.", "enum": [ - "private", - "public" - ] + "google.calendar.oauth2-client", + "google.calendar.oauth2-authorization", + "google.sheets.oauth2-authorization" + ], + "description": "The type of credential to generate a session for. Only Nango user-facing providers are supported." + } + }, + "required": [ + "provider" + ] + }, + "ToolTemplateSetup": { + "type": "object", + "properties": { + "title": { + "type": "string" }, - "name": { - "type": "string", - "description": "This is the name of the token. This is just for your own reference.", - "maxLength": 40 + "description": { + "type": "string" }, - "restrictions": { - "description": "This are the restrictions for the token.", - "allOf": [ - { - "$ref": "#/components/schemas/TokenRestrictions" - } - ] + "videoUrl": { + "type": "string" + }, + "docsUrl": { + "type": "string" } - } + }, + "required": [ + "title" + ] }, - "Token": { + "MakeToolProviderDetails": { "type": "object", "properties": { - "tag": { - "type": "string", - "description": "This is the tag for the token. It represents its scope.", - "enum": [ - "private", - "public" - ] - }, - "id": { + "templateUrl": { "type": "string", - "description": "This is the unique identifier for the token." + "description": "This is the Template URL or the Snapshot URL corresponding to the Template." }, - "orgId": { - "type": "string", - "description": "This is unique identifier for the org that this token belongs to." + "setupInstructions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ToolTemplateSetup" + } }, - "createdAt": { - "format": "date-time", + "type": { "type": "string", - "description": "This is the ISO 8601 date-time string of when the token was created." + "enum": [ + "make" + ], + "description": "The type of tool. \"make\" for Make tool." }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the token was last updated." + "scenarioId": { + "type": "number" }, - "value": { - "type": "string", - "description": "This is the token key." + "scenarioName": { + "type": "string" }, - "name": { - "type": "string", - "description": "This is the name of the token. This is just for your own reference.", - "maxLength": 40 + "triggerHookId": { + "type": "number" }, - "restrictions": { - "description": "This are the restrictions for the token.", - "allOf": [ - { - "$ref": "#/components/schemas/TokenRestrictions" - } - ] + "triggerHookName": { + "type": "string" } }, "required": [ - "id", - "orgId", - "createdAt", - "updatedAt", - "value" + "type" ] }, - "UpdateTokenDTO": { + "GhlToolProviderDetails": { "type": "object", "properties": { - "tag": { - "type": "string", - "description": "This is the tag for the token. It represents its scope.", - "enum": [ - "private", - "public" - ] - }, - "name": { + "templateUrl": { "type": "string", - "description": "This is the name of the token. This is just for your own reference.", - "maxLength": 40 + "description": "This is the Template URL or the Snapshot URL corresponding to the Template." }, - "restrictions": { - "description": "This are the restrictions for the token.", - "allOf": [ - { - "$ref": "#/components/schemas/TokenRestrictions" - } - ] - } - } - }, - "SyncVoiceLibraryDTO": { - "type": "object", - "properties": { - "providers": { + "setupInstructions": { "type": "array", - "description": "List of providers you want to sync.", - "enum": [ - "vapi", - "11labs", - "azure", - "cartesia", - "custom-voice", - "deepgram", - "hume", - "lmnt", - "neets", - "neuphonic", - "openai", - "playht", - "rime-ai", - "smallest-ai", - "tavus" - ], "items": { - "type": "string", - "enum": [ - "vapi", - "11labs", - "azure", - "cartesia", - "custom-voice", - "deepgram", - "hume", - "lmnt", - "neets", - "neuphonic", - "openai", - "playht", - "rime-ai", - "smallest-ai", - "tavus" - ] + "$ref": "#/components/schemas/ToolTemplateSetup" } - } - } - }, - "TestSuite": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "This is the unique identifier for the test suite." }, - "orgId": { + "type": { "type": "string", - "description": "This is the unique identifier for the org that this test suite belongs to." + "enum": [ + "ghl" + ], + "description": "The type of tool. \"ghl\" for GHL tool." }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the test suite was created." + "workflowId": { + "type": "string" }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the test suite was last updated." + "workflowName": { + "type": "string" }, - "name": { - "type": "string", - "description": "This is the name of the test suite.", - "maxLength": 80 + "webhookHookId": { + "type": "string" }, - "phoneNumberId": { - "type": "string", - "description": "This is the phone number ID associated with this test suite." + "webhookHookName": { + "type": "string" + }, + "locationId": { + "type": "string" } }, "required": [ - "id", - "orgId", - "createdAt", - "updatedAt" + "type" ] }, - "TestSuitesPaginatedResponse": { + "FunctionToolProviderDetails": { "type": "object", "properties": { - "results": { + "templateUrl": { + "type": "string", + "description": "This is the Template URL or the Snapshot URL corresponding to the Template." + }, + "setupInstructions": { "type": "array", "items": { - "$ref": "#/components/schemas/TestSuite" + "$ref": "#/components/schemas/ToolTemplateSetup" } }, - "metadata": { - "$ref": "#/components/schemas/PaginationMeta" + "type": { + "type": "string", + "enum": [ + "function" + ], + "description": "The type of tool. \"function\" for Function tool." } }, "required": [ - "results", - "metadata" + "type" ] }, - "CreateTestSuiteDto": { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "This is the name of the test suite.", - "maxLength": 80 - }, - "phoneNumberId": { - "type": "string", - "description": "This is the phone number ID associated with this test suite." - } - } - }, - "UpdateTestSuiteDto": { + "GoogleCalendarCreateEventToolProviderDetails": { "type": "object", "properties": { - "name": { + "templateUrl": { "type": "string", - "description": "This is the name of the test suite.", - "maxLength": 80 + "description": "This is the Template URL or the Snapshot URL corresponding to the Template." }, - "phoneNumberId": { - "type": "string", - "description": "This is the phone number ID associated with this test suite." - } - } - }, - "TestSuiteTestVoice": { - "type": "object", - "properties": { - "scorers": { + "setupInstructions": { "type": "array", - "description": "These are the scorers used to evaluate the test.", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteTestScorerAI", - "title": "AI" - } - ] + "$ref": "#/components/schemas/ToolTemplateSetup" } }, "type": { "type": "string", - "description": "This is the type of the test, which must be voice.", "enum": [ - "voice" + "google.calendar.event.create" ], - "maxLength": 100 - }, - "id": { - "type": "string", - "description": "This is the unique identifier for the test." - }, - "testSuiteId": { - "type": "string", - "description": "This is the unique identifier for the test suite this test belongs to." - }, - "orgId": { - "type": "string", - "description": "This is the unique identifier for the organization this test belongs to." - }, - "createdAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the test was created." - }, - "updatedAt": { - "format": "date-time", - "type": "string", - "description": "This is the ISO 8601 date-time string of when the test was last updated." - }, - "name": { - "type": "string", - "description": "This is the name of the test.", - "maxLength": 80 - }, - "script": { - "type": "string", - "description": "This is the script to be used for the voice test.", - "maxLength": 10000 - }, - "numAttempts": { - "type": "number", - "description": "This is the number of attempts allowed for the test.", - "minimum": 1, - "maximum": 10 + "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool." } }, "required": [ - "scorers", - "type", - "id", - "testSuiteId", - "orgId", - "createdAt", - "updatedAt", - "script" + "type" ] }, - "CreateTestSuiteTestVoiceDto": { + "GoogleSheetsRowAppendToolProviderDetails": { "type": "object", "properties": { - "scorers": { + "templateUrl": { + "type": "string", + "description": "This is the Template URL or the Snapshot URL corresponding to the Template." + }, + "setupInstructions": { "type": "array", - "description": "These are the scorers used to evaluate the test.", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteTestScorerAI", - "title": "AI" - } - ] + "$ref": "#/components/schemas/ToolTemplateSetup" } }, "type": { "type": "string", - "description": "This is the type of the test, which must be voice.", "enum": [ - "voice" + "google.sheets.row.append" ], - "maxLength": 100 - }, - "script": { - "type": "string", - "description": "This is the script to be used for the voice test.", - "maxLength": 10000 - }, - "numAttempts": { - "type": "number", - "description": "This is the number of attempts allowed for the test.", - "minimum": 1, - "maximum": 10 - }, - "name": { - "type": "string", - "description": "This is the name of the test.", - "maxLength": 80 + "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool." } }, "required": [ - "scorers", - "type", - "script" + "type" ] }, - "UpdateTestSuiteTestVoiceDto": { + "ToolTemplateMetadata": { "type": "object", "properties": { - "scorers": { - "type": "array", - "description": "These are the scorers used to evaluate the test.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteTestScorerAI", - "title": "AI" - } - ] - } + "collectionType": { + "type": "string" }, - "name": { - "type": "string", - "description": "This is the name of the test.", - "maxLength": 80 + "collectionId": { + "type": "string" + }, + "collectionName": { + "type": "string" + } + } + }, + "CreateToolTemplateDTO": { + "type": "object", + "properties": { + "details": { + "oneOf": [ + { + "$ref": "#/components/schemas/CreateDtmfToolDTO", + "title": "DtmfTool" + }, + { + "$ref": "#/components/schemas/CreateEndCallToolDTO", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" + }, + { + "$ref": "#/components/schemas/CreateFunctionToolDTO", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/CreateGhlToolDTO", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/CreateMakeToolDTO", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/CreateTransferCallToolDTO", + "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" + } + ] + }, + "providerDetails": { + "oneOf": [ + { + "$ref": "#/components/schemas/MakeToolProviderDetails", + "title": "MakeToolProviderDetails" + }, + { + "$ref": "#/components/schemas/GhlToolProviderDetails", + "title": "GhlToolProviderDetails" + }, + { + "$ref": "#/components/schemas/FunctionToolProviderDetails", + "title": "FunctionToolProviderDetails" + }, + { + "$ref": "#/components/schemas/GoogleCalendarCreateEventToolProviderDetails", + "title": "GoogleCalendarCreateEventToolProviderDetails" + }, + { + "$ref": "#/components/schemas/GoogleSheetsRowAppendToolProviderDetails", + "title": "GoogleSheetsRowAppendToolProviderDetails" + } + ] + }, + "metadata": { + "$ref": "#/components/schemas/ToolTemplateMetadata" }, - "script": { + "visibility": { "type": "string", - "description": "This is the script to be used for the voice test.", - "maxLength": 10000 + "default": "private", + "enum": [ + "public", + "private" + ] }, - "numAttempts": { - "type": "number", - "description": "This is the number of attempts allowed for the test.", - "minimum": 1, - "maximum": 10 - } - } - }, - "TestSuiteTestScorerAI": { - "type": "object", - "properties": { "type": { "type": "string", - "description": "This is the type of the scorer, which must be AI.", + "default": "tool", "enum": [ - "ai" - ], - "maxLength": 100 + "tool" + ] }, - "rubric": { + "name": { "type": "string", - "description": "This is the rubric used by the AI scorer.", - "maxLength": 1000 + "description": "The name of the template. This is just for your own reference.", + "maxLength": 40 + }, + "provider": { + "type": "string", + "enum": [ + "make", + "gohighlevel", + "function" + ] } }, "required": [ - "type", - "rubric" + "type" ] }, - "TestSuiteTestsPaginatedResponse": { + "Template": { "type": "object", "properties": { - "results": { - "type": "array", - "description": "A list of test suite tests.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteTestVoice" - } - ] - } + "details": { + "oneOf": [ + { + "$ref": "#/components/schemas/CreateDtmfToolDTO", + "title": "DtmfTool" + }, + { + "$ref": "#/components/schemas/CreateEndCallToolDTO", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" + }, + { + "$ref": "#/components/schemas/CreateFunctionToolDTO", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/CreateGhlToolDTO", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/CreateMakeToolDTO", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/CreateTransferCallToolDTO", + "title": "TransferCallTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" + } + ] }, - "metadata": { - "description": "Metadata about the pagination.", - "allOf": [ + "providerDetails": { + "oneOf": [ { - "$ref": "#/components/schemas/PaginationMeta" + "$ref": "#/components/schemas/MakeToolProviderDetails", + "title": "MakeToolProviderDetails" + }, + { + "$ref": "#/components/schemas/GhlToolProviderDetails", + "title": "GhlToolProviderDetails" + }, + { + "$ref": "#/components/schemas/FunctionToolProviderDetails", + "title": "FunctionToolProviderDetails" + }, + { + "$ref": "#/components/schemas/GoogleCalendarCreateEventToolProviderDetails", + "title": "GoogleCalendarCreateEventToolProviderDetails" + }, + { + "$ref": "#/components/schemas/GoogleSheetsRowAppendToolProviderDetails", + "title": "GoogleSheetsRowAppendToolProviderDetails" } ] - } - }, - "required": [ - "results", - "metadata" - ] - }, - "TestSuiteRunScorerAI": { - "type": "object", - "properties": { + }, + "metadata": { + "$ref": "#/components/schemas/ToolTemplateMetadata" + }, + "visibility": { + "default": "private", + "enum": [ + "public", + "private" + ], + "type": "string" + }, "type": { "type": "string", - "description": "This is the type of the scorer, which must be AI.", + "default": "tool", "enum": [ - "ai" - ], - "maxLength": 100 + "tool" + ] }, - "result": { + "name": { "type": "string", - "description": "This is the result of the test suite.", + "description": "The name of the template. This is just for your own reference.", + "maxLength": 40 + }, + "provider": { "enum": [ - "pass", - "fail" + "make", + "gohighlevel", + "function" ], - "maxLength": 100 + "type": "string" }, - "reasoning": { + "id": { "type": "string", - "description": "This is the reasoning provided by the AI scorer.", - "maxLength": 10000 + "description": "The unique identifier for the template." }, - "rubric": { + "orgId": { "type": "string", - "description": "This is the rubric used by the AI scorer.", - "maxLength": 1000 + "description": "The unique identifier for the organization that this template belongs to." + }, + "createdAt": { + "format": "date-time", + "type": "string", + "description": "The ISO 8601 date-time string of when the template was created." + }, + "updatedAt": { + "format": "date-time", + "type": "string", + "description": "The ISO 8601 date-time string of when the template was last updated." } }, "required": [ "type", - "result", - "reasoning", - "rubric" + "id", + "orgId", + "createdAt", + "updatedAt" ] }, - "TestSuiteRunTestAttemptCall": { + "UpdateToolTemplateDTO": { "type": "object", "properties": { - "artifact": { - "description": "This is the artifact associated with the call.", - "allOf": [ + "details": { + "oneOf": [ { - "$ref": "#/components/schemas/Artifact" - } - ] - } - }, - "required": [ - "artifact" - ] - }, - "TestSuiteRunTestAttempt": { - "type": "object", - "properties": { - "scorerResults": { - "type": "array", - "description": "These are the results of the scorers used to evaluate the test attempt.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteRunScorerAI", - "title": "AI" - } - ] - } - }, - "call": { - "description": "This is the call made during the test attempt.", - "allOf": [ + "$ref": "#/components/schemas/CreateDtmfToolDTO", + "title": "DtmfTool" + }, { - "$ref": "#/components/schemas/TestSuiteRunTestAttemptCall" - } - ] - } - }, - "required": [ - "scorerResults", - "call" - ] - }, - "TestSuiteRunTestResult": { - "type": "object", - "properties": { - "test": { - "description": "This is the test that was run.", - "oneOf": [ + "$ref": "#/components/schemas/CreateEndCallToolDTO", + "title": "EndCallTool" + }, + { + "$ref": "#/components/schemas/CreateVoicemailToolDTO", + "title": "VoicemailTool" + }, + { + "$ref": "#/components/schemas/CreateFunctionToolDTO", + "title": "FunctionTool" + }, + { + "$ref": "#/components/schemas/CreateGhlToolDTO", + "title": "GhlTool" + }, + { + "$ref": "#/components/schemas/CreateMakeToolDTO", + "title": "MakeTool" + }, + { + "$ref": "#/components/schemas/CreateTransferCallToolDTO", + "title": "TransferCallTool" + }, { - "$ref": "#/components/schemas/TestSuiteTestVoice", - "title": "TestSuiteTestVoice" + "$ref": "#/components/schemas/CreateGoogleCalendarCreateEventToolDTO", + "title": "GoogleCalendarCreateEventTool" + }, + { + "$ref": "#/components/schemas/CreateGoogleSheetsRowAppendToolDTO", + "title": "GoogleSheetsRowAppendTool" } - ], - "allOf": [ + ] + }, + "providerDetails": { + "oneOf": [ + { + "$ref": "#/components/schemas/MakeToolProviderDetails", + "title": "MakeToolProviderDetails" + }, + { + "$ref": "#/components/schemas/GhlToolProviderDetails", + "title": "GhlToolProviderDetails" + }, + { + "$ref": "#/components/schemas/FunctionToolProviderDetails", + "title": "FunctionToolProviderDetails" + }, + { + "$ref": "#/components/schemas/GoogleCalendarCreateEventToolProviderDetails", + "title": "GoogleCalendarCreateEventToolProviderDetails" + }, { - "$ref": "#/components/schemas/TestSuiteTestVoice" + "$ref": "#/components/schemas/GoogleSheetsRowAppendToolProviderDetails", + "title": "GoogleSheetsRowAppendToolProviderDetails" } ] }, - "attempts": { - "description": "These are the attempts made for this test.", - "type": "array", - "items": { - "$ref": "#/components/schemas/TestSuiteRunTestAttempt" - } + "metadata": { + "$ref": "#/components/schemas/ToolTemplateMetadata" + }, + "visibility": { + "type": "string", + "default": "private", + "enum": [ + "public", + "private" + ] + }, + "type": { + "type": "string", + "default": "tool", + "enum": [ + "tool" + ] + }, + "name": { + "type": "string", + "description": "The name of the template. This is just for your own reference.", + "maxLength": 40 + }, + "provider": { + "type": "string", + "enum": [ + "make", + "gohighlevel", + "function" + ] } }, "required": [ - "test", - "attempts" + "type" ] }, - "TestSuiteRun": { + "VoiceLibrary": { "type": "object", "properties": { - "status": { + "provider": { + "type": "object", + "description": "This is the voice provider that will be used.", + "enum": [ + "vapi", + "11labs", + "azure", + "cartesia", + "custom-voice", + "deepgram", + "hume", + "lmnt", + "neuphonic", + "openai", + "playht", + "rime-ai", + "smallest-ai", + "tavus", + "sesame" + ] + }, + "providerId": { "type": "string", - "description": "This is the current status of the test suite run.", + "description": "The ID of the voice provided by the provider." + }, + "slug": { + "type": "string", + "description": "The unique slug of the voice." + }, + "name": { + "type": "string", + "description": "The name of the voice." + }, + "language": { + "type": "string", + "description": "The language of the voice." + }, + "languageCode": { + "type": "string", + "description": "The language code of the voice." + }, + "model": { + "type": "string", + "description": "The model of the voice." + }, + "supportedModels": { + "type": "string", + "description": "The supported models of the voice." + }, + "gender": { + "type": "string", + "description": "The gender of the voice.", "enum": [ - "queued", - "in-progress", - "completed", - "failed" + "male", + "female" ] }, + "accent": { + "type": "string", + "description": "The accent of the voice." + }, + "previewUrl": { + "type": "string", + "description": "The preview URL of the voice." + }, + "description": { + "type": "string", + "description": "The description of the voice." + }, + "credentialId": { + "type": "string", + "description": "The credential ID of the voice." + }, "id": { "type": "string", - "description": "This is the unique identifier for the test suite run." + "description": "The unique identifier for the voice library." }, "orgId": { "type": "string", - "description": "This is the unique identifier for the organization this run belongs to." + "description": "The unique identifier for the organization that this voice library belongs to." }, - "testSuiteId": { - "type": "string", - "description": "This is the unique identifier for the test suite this run belongs to." + "isPublic": { + "type": "boolean", + "description": "The Public voice is shared accross all the organizations." + }, + "isDeleted": { + "type": "boolean", + "description": "The deletion status of the voice." }, "createdAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the test suite run was created." + "description": "The ISO 8601 date-time string of when the voice library was created." }, "updatedAt": { "format": "date-time", "type": "string", - "description": "This is the ISO 8601 date-time string of when the test suite run was last updated." - }, - "testResults": { - "description": "These are the results of the tests in this test suite run.", - "type": "array", - "items": { - "$ref": "#/components/schemas/TestSuiteRunTestResult" - } - }, - "name": { - "type": "string", - "description": "This is the name of the test suite run.", - "maxLength": 80 + "description": "The ISO 8601 date-time string of when the voice library was last updated." } }, "required": [ - "status", "id", "orgId", - "testSuiteId", + "isPublic", + "isDeleted", "createdAt", - "updatedAt", - "testResults" + "updatedAt" ] }, - "TestSuiteRunsPaginatedResponse": { + "SyncVoiceLibraryDTO": { "type": "object", "properties": { - "results": { + "providers": { "type": "array", + "description": "List of providers you want to sync.", + "enum": [ + "vapi", + "11labs", + "azure", + "cartesia", + "custom-voice", + "deepgram", + "hume", + "lmnt", + "neuphonic", + "openai", + "playht", + "rime-ai", + "smallest-ai", + "tavus", + "sesame" + ], "items": { - "$ref": "#/components/schemas/TestSuiteRun" + "type": "string", + "enum": [ + "vapi", + "11labs", + "azure", + "cartesia", + "custom-voice", + "deepgram", + "hume", + "lmnt", + "neuphonic", + "openai", + "playht", + "rime-ai", + "smallest-ai", + "tavus", + "sesame" + ] } + } + } + }, + "VoiceLibraryVoiceResponse": { + "type": "object", + "properties": { + "voiceId": { + "type": "string" }, - "metadata": { - "$ref": "#/components/schemas/PaginationMeta" + "name": { + "type": "string" + }, + "publicOwnerId": { + "type": "string" + }, + "description": { + "type": "string" + }, + "gender": { + "type": "string" + }, + "age": { + "type": "object" + }, + "accent": { + "type": "string" } }, "required": [ - "results", - "metadata" + "voiceId", + "name" ] }, - "CreateTestSuiteRunDto": { + "AddVoiceToProviderDTO": { "type": "object", "properties": { + "ownerId": { + "type": "string", + "description": "This is the owner_id of your shared voice which you want to add to your provider Account from Provider Voice Library" + }, + "voiceId": { + "type": "string", + "description": "This is the voice_id of the shared voice which you want to add to your provider Account from Provider Voice Library" + }, "name": { "type": "string", - "description": "This is the name of the test suite run.", - "maxLength": 80 + "description": "This is the new name of the voice which you want to have once you have added voice to your provider Account from Provider Voice Library" } - } + }, + "required": [ + "ownerId", + "voiceId", + "name" + ] }, - "UpdateTestSuiteRunDto": { + "CloneVoiceDTO": { "type": "object", "properties": { "name": { "type": "string", - "description": "This is the name of the test suite run.", - "maxLength": 80 + "description": "This is the name of the cloned voice in the provider account." + }, + "description": { + "type": "string", + "description": "This is the description of your cloned voice." + }, + "labels": { + "type": "string", + "description": "Serialized labels dictionary for the voice." + }, + "files": { + "description": "These are the files you want to use to clone your voice. Only Audio files are supported.", + "type": "array", + "items": { + "type": "string", + "format": "binary" + } } - } + }, + "required": [ + "name", + "files" + ] }, "ClientMessageWorkflowNodeStarted": { "type": "object", @@ -26654,6 +30672,10 @@ { "$ref": "#/components/schemas/TextEditorToolWithToolCall", "title": "TextEditorToolWithToolCall" + }, + { + "$ref": "#/components/schemas/GoogleCalendarCreateEventToolWithToolCall", + "title": "GoogleCalendarCreateEventToolWithToolCall" } ] } @@ -26903,7 +30925,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -27010,7 +31032,7 @@ } }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -27119,35 +31141,74 @@ "pipeline-error-lmnt-voice-failed", "pipeline-error-azure-voice-failed", "pipeline-error-rime-ai-voice-failed", - "pipeline-error-neets-voice-failed", "pipeline-error-smallest-ai-voice-failed", "pipeline-error-neuphonic-voice-failed", "pipeline-error-hume-voice-failed", - "pipeline-error-deepgram-transcriber-failed", - "pipeline-error-gladia-transcriber-failed", - "pipeline-error-speechmatics-transcriber-failed", - "pipeline-error-assembly-ai-transcriber-failed", - "pipeline-error-talkscriber-transcriber-failed", - "pipeline-error-azure-speech-transcriber-failed", + "pipeline-error-sesame-voice-failed", + "pipeline-error-tavus-video-failed", + "call.in-progress.error-vapifault-openai-voice-failed", + "call.in-progress.error-vapifault-cartesia-voice-failed", + "call.in-progress.error-vapifault-deepgram-voice-failed", + "call.in-progress.error-vapifault-eleven-labs-voice-failed", + "call.in-progress.error-vapifault-playht-voice-failed", + "call.in-progress.error-vapifault-lmnt-voice-failed", + "call.in-progress.error-vapifault-azure-voice-failed", + "call.in-progress.error-vapifault-rime-ai-voice-failed", + "call.in-progress.error-vapifault-smallest-ai-voice-failed", + "call.in-progress.error-vapifault-neuphonic-voice-failed", + "call.in-progress.error-vapifault-hume-voice-failed", + "call.in-progress.error-vapifault-sesame-voice-failed", + "call.in-progress.error-vapifault-tavus-video-failed", "pipeline-error-vapi-llm-failed", "pipeline-error-vapi-400-bad-request-validation-failed", "pipeline-error-vapi-401-unauthorized", "pipeline-error-vapi-403-model-access-denied", "pipeline-error-vapi-429-exceeded-quota", "pipeline-error-vapi-500-server-error", + "call.in-progress.error-vapifault-vapi-llm-failed", + "call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-vapi-401-unauthorized", + "call.in-progress.error-vapifault-vapi-403-model-access-denied", + "call.in-progress.error-vapifault-vapi-429-exceeded-quota", + "call.in-progress.error-vapifault-vapi-500-server-error", + "pipeline-error-deepgram-transcriber-failed", + "call.in-progress.error-vapifault-deepgram-transcriber-failed", + "pipeline-error-gladia-transcriber-failed", + "call.in-progress.error-vapifault-gladia-transcriber-failed", + "pipeline-error-speechmatics-transcriber-failed", + "call.in-progress.error-vapifault-speechmatics-transcriber-failed", + "pipeline-error-assembly-ai-transcriber-failed", + "call.in-progress.error-vapifault-assembly-ai-transcriber-failed", + "pipeline-error-talkscriber-transcriber-failed", + "call.in-progress.error-vapifault-talkscriber-transcriber-failed", + "pipeline-error-azure-speech-transcriber-failed", + "call.in-progress.error-vapifault-azure-speech-transcriber-failed", "pipeline-no-available-model", "worker-shutdown", "unknown-error", "vonage-disconnected", "vonage-failed-to-connect-call", + "vonage-completed", "phone-call-provider-bypass-enabled-but-no-call-received", "vapifault-phone-call-worker-setup-socket-error", "vapifault-phone-call-worker-worker-setup-socket-timeout", - "vapifault-phone-call-worker-could-not-find-call", "vapifault-transport-never-connected", - "vapifault-web-call-worker-setup-failed", "vapifault-transport-connected-but-call-not-active", "vapifault-call-started-but-connection-to-transport-missing", + "call.in-progress.error-vapifault-phone-call-worker-setup-socket-error", + "call.in-progress.error-vapifault-phone-call-worker-worker-setup-socket-timeout", + "call.in-progress.error-vapifault-transport-never-connected", + "call.in-progress.error-vapifault-transport-connected-but-call-not-active", + "call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing", + "call.in-progress.error-vapifault-openai-llm-failed", + "call.in-progress.error-vapifault-azure-openai-llm-failed", + "call.in-progress.error-vapifault-groq-llm-failed", + "call.in-progress.error-vapifault-google-llm-failed", + "call.in-progress.error-vapifault-xai-llm-failed", + "call.in-progress.error-vapifault-mistral-llm-failed", + "call.in-progress.error-vapifault-inflection-ai-llm-failed", + "call.in-progress.error-vapifault-cerebras-llm-failed", + "call.in-progress.error-vapifault-deep-seek-llm-failed", "pipeline-error-openai-llm-failed", "pipeline-error-azure-openai-llm-failed", "pipeline-error-groq-llm-failed", @@ -27162,100 +31223,198 @@ "pipeline-error-openai-403-model-access-denied", "pipeline-error-openai-429-exceeded-quota", "pipeline-error-openai-500-server-error", + "call.in-progress.error-vapifault-openai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-openai-401-unauthorized", + "call.in-progress.error-vapifault-openai-403-model-access-denied", + "call.in-progress.error-vapifault-openai-429-exceeded-quota", + "call.in-progress.error-vapifault-openai-500-server-error", "pipeline-error-google-400-bad-request-validation-failed", "pipeline-error-google-401-unauthorized", "pipeline-error-google-403-model-access-denied", "pipeline-error-google-429-exceeded-quota", "pipeline-error-google-500-server-error", + "call.in-progress.error-vapifault-google-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-google-401-unauthorized", + "call.in-progress.error-vapifault-google-403-model-access-denied", + "call.in-progress.error-vapifault-google-429-exceeded-quota", + "call.in-progress.error-vapifault-google-500-server-error", "pipeline-error-xai-400-bad-request-validation-failed", "pipeline-error-xai-401-unauthorized", "pipeline-error-xai-403-model-access-denied", "pipeline-error-xai-429-exceeded-quota", "pipeline-error-xai-500-server-error", + "call.in-progress.error-vapifault-xai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-xai-401-unauthorized", + "call.in-progress.error-vapifault-xai-403-model-access-denied", + "call.in-progress.error-vapifault-xai-429-exceeded-quota", + "call.in-progress.error-vapifault-xai-500-server-error", "pipeline-error-mistral-400-bad-request-validation-failed", "pipeline-error-mistral-401-unauthorized", "pipeline-error-mistral-403-model-access-denied", "pipeline-error-mistral-429-exceeded-quota", "pipeline-error-mistral-500-server-error", + "call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-mistral-401-unauthorized", + "call.in-progress.error-vapifault-mistral-403-model-access-denied", + "call.in-progress.error-vapifault-mistral-429-exceeded-quota", + "call.in-progress.error-vapifault-mistral-500-server-error", "pipeline-error-inflection-ai-400-bad-request-validation-failed", "pipeline-error-inflection-ai-401-unauthorized", "pipeline-error-inflection-ai-403-model-access-denied", "pipeline-error-inflection-ai-429-exceeded-quota", "pipeline-error-inflection-ai-500-server-error", + "call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-inflection-ai-401-unauthorized", + "call.in-progress.error-vapifault-inflection-ai-403-model-access-denied", + "call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota", + "call.in-progress.error-vapifault-inflection-ai-500-server-error", "pipeline-error-deep-seek-400-bad-request-validation-failed", "pipeline-error-deep-seek-401-unauthorized", "pipeline-error-deep-seek-403-model-access-denied", "pipeline-error-deep-seek-429-exceeded-quota", "pipeline-error-deep-seek-500-server-error", + "call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-deep-seek-401-unauthorized", + "call.in-progress.error-vapifault-deep-seek-403-model-access-denied", + "call.in-progress.error-vapifault-deep-seek-429-exceeded-quota", + "call.in-progress.error-vapifault-deep-seek-500-server-error", "pipeline-error-azure-openai-400-bad-request-validation-failed", "pipeline-error-azure-openai-401-unauthorized", "pipeline-error-azure-openai-403-model-access-denied", "pipeline-error-azure-openai-429-exceeded-quota", "pipeline-error-azure-openai-500-server-error", + "call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-azure-openai-401-unauthorized", + "call.in-progress.error-vapifault-azure-openai-403-model-access-denied", + "call.in-progress.error-vapifault-azure-openai-429-exceeded-quota", + "call.in-progress.error-vapifault-azure-openai-500-server-error", "pipeline-error-groq-400-bad-request-validation-failed", "pipeline-error-groq-401-unauthorized", "pipeline-error-groq-403-model-access-denied", "pipeline-error-groq-429-exceeded-quota", "pipeline-error-groq-500-server-error", + "call.in-progress.error-vapifault-groq-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-groq-401-unauthorized", + "call.in-progress.error-vapifault-groq-403-model-access-denied", + "call.in-progress.error-vapifault-groq-429-exceeded-quota", + "call.in-progress.error-vapifault-groq-500-server-error", "pipeline-error-cerebras-400-bad-request-validation-failed", "pipeline-error-cerebras-401-unauthorized", "pipeline-error-cerebras-403-model-access-denied", "pipeline-error-cerebras-429-exceeded-quota", "pipeline-error-cerebras-500-server-error", + "call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-cerebras-401-unauthorized", + "call.in-progress.error-vapifault-cerebras-403-model-access-denied", + "call.in-progress.error-vapifault-cerebras-429-exceeded-quota", + "call.in-progress.error-vapifault-cerebras-500-server-error", "pipeline-error-anthropic-400-bad-request-validation-failed", "pipeline-error-anthropic-401-unauthorized", "pipeline-error-anthropic-403-model-access-denied", "pipeline-error-anthropic-429-exceeded-quota", "pipeline-error-anthropic-500-server-error", "pipeline-error-anthropic-llm-failed", + "call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-anthropic-401-unauthorized", + "call.in-progress.error-vapifault-anthropic-403-model-access-denied", + "call.in-progress.error-vapifault-anthropic-429-exceeded-quota", + "call.in-progress.error-vapifault-anthropic-500-server-error", + "call.in-progress.error-vapifault-anthropic-llm-failed", "pipeline-error-together-ai-400-bad-request-validation-failed", "pipeline-error-together-ai-401-unauthorized", "pipeline-error-together-ai-403-model-access-denied", "pipeline-error-together-ai-429-exceeded-quota", "pipeline-error-together-ai-500-server-error", "pipeline-error-together-ai-llm-failed", + "call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-together-ai-401-unauthorized", + "call.in-progress.error-vapifault-together-ai-403-model-access-denied", + "call.in-progress.error-vapifault-together-ai-429-exceeded-quota", + "call.in-progress.error-vapifault-together-ai-500-server-error", + "call.in-progress.error-vapifault-together-ai-llm-failed", "pipeline-error-anyscale-400-bad-request-validation-failed", "pipeline-error-anyscale-401-unauthorized", "pipeline-error-anyscale-403-model-access-denied", "pipeline-error-anyscale-429-exceeded-quota", "pipeline-error-anyscale-500-server-error", "pipeline-error-anyscale-llm-failed", + "call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-anyscale-401-unauthorized", + "call.in-progress.error-vapifault-anyscale-403-model-access-denied", + "call.in-progress.error-vapifault-anyscale-429-exceeded-quota", + "call.in-progress.error-vapifault-anyscale-500-server-error", + "call.in-progress.error-vapifault-anyscale-llm-failed", "pipeline-error-openrouter-400-bad-request-validation-failed", "pipeline-error-openrouter-401-unauthorized", "pipeline-error-openrouter-403-model-access-denied", "pipeline-error-openrouter-429-exceeded-quota", "pipeline-error-openrouter-500-server-error", "pipeline-error-openrouter-llm-failed", + "call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-openrouter-401-unauthorized", + "call.in-progress.error-vapifault-openrouter-403-model-access-denied", + "call.in-progress.error-vapifault-openrouter-429-exceeded-quota", + "call.in-progress.error-vapifault-openrouter-500-server-error", + "call.in-progress.error-vapifault-openrouter-llm-failed", "pipeline-error-perplexity-ai-400-bad-request-validation-failed", "pipeline-error-perplexity-ai-401-unauthorized", "pipeline-error-perplexity-ai-403-model-access-denied", "pipeline-error-perplexity-ai-429-exceeded-quota", "pipeline-error-perplexity-ai-500-server-error", "pipeline-error-perplexity-ai-llm-failed", + "call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-perplexity-ai-401-unauthorized", + "call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied", + "call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota", + "call.in-progress.error-vapifault-perplexity-ai-500-server-error", + "call.in-progress.error-vapifault-perplexity-ai-llm-failed", "pipeline-error-deepinfra-400-bad-request-validation-failed", "pipeline-error-deepinfra-401-unauthorized", "pipeline-error-deepinfra-403-model-access-denied", "pipeline-error-deepinfra-429-exceeded-quota", "pipeline-error-deepinfra-500-server-error", "pipeline-error-deepinfra-llm-failed", + "call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-deepinfra-401-unauthorized", + "call.in-progress.error-vapifault-deepinfra-403-model-access-denied", + "call.in-progress.error-vapifault-deepinfra-429-exceeded-quota", + "call.in-progress.error-vapifault-deepinfra-500-server-error", + "call.in-progress.error-vapifault-deepinfra-llm-failed", "pipeline-error-runpod-400-bad-request-validation-failed", "pipeline-error-runpod-401-unauthorized", "pipeline-error-runpod-403-model-access-denied", "pipeline-error-runpod-429-exceeded-quota", "pipeline-error-runpod-500-server-error", "pipeline-error-runpod-llm-failed", + "call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-runpod-401-unauthorized", + "call.in-progress.error-vapifault-runpod-403-model-access-denied", + "call.in-progress.error-vapifault-runpod-429-exceeded-quota", + "call.in-progress.error-vapifault-runpod-500-server-error", + "call.in-progress.error-vapifault-runpod-llm-failed", "pipeline-error-custom-llm-400-bad-request-validation-failed", "pipeline-error-custom-llm-401-unauthorized", "pipeline-error-custom-llm-403-model-access-denied", "pipeline-error-custom-llm-429-exceeded-quota", "pipeline-error-custom-llm-500-server-error", "pipeline-error-custom-llm-llm-failed", + "call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-custom-llm-401-unauthorized", + "call.in-progress.error-vapifault-custom-llm-403-model-access-denied", + "call.in-progress.error-vapifault-custom-llm-429-exceeded-quota", + "call.in-progress.error-vapifault-custom-llm-500-server-error", + "call.in-progress.error-vapifault-custom-llm-llm-failed", "pipeline-error-custom-voice-failed", "pipeline-error-cartesia-socket-hang-up", "pipeline-error-cartesia-requested-payment", "pipeline-error-cartesia-500-server-error", "pipeline-error-cartesia-503-server-error", "pipeline-error-cartesia-522-server-error", + "call.in-progress.error-vapifault-cartesia-socket-hang-up", + "call.in-progress.error-vapifault-cartesia-requested-payment", + "call.in-progress.error-vapifault-cartesia-500-server-error", + "call.in-progress.error-vapifault-cartesia-503-server-error", + "call.in-progress.error-vapifault-cartesia-522-server-error", "pipeline-error-eleven-labs-voice-not-found", "pipeline-error-eleven-labs-quota-exceeded", "pipeline-error-eleven-labs-unauthorized-access", @@ -27277,6 +31436,27 @@ "pipeline-error-eleven-labs-500-server-error", "pipeline-error-eleven-labs-max-character-limit-exceeded", "pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification", + "call.in-progress.error-vapifault-eleven-labs-voice-not-found", + "call.in-progress.error-vapifault-eleven-labs-quota-exceeded", + "call.in-progress.error-vapifault-eleven-labs-unauthorized-access", + "call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model", + "call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus", + "call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned", + "call.in-progress.error-vapifault-eleven-labs-invalid-api-key", + "call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples", + "call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner", + "call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation", + "call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy", + "call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone", + "call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used", + "call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users", + "call.in-progress.error-vapifault-eleven-labs-500-server-error", + "call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded", + "call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification", "pipeline-error-playht-request-timed-out", "pipeline-error-playht-invalid-voice", "pipeline-error-playht-unexpected-error", @@ -27289,9 +31469,22 @@ "pipeline-error-playht-429-exceeded-quota", "pipeline-error-playht-502-gateway-error", "pipeline-error-playht-504-gateway-error", - "pipeline-error-tavus-video-failed", + "call.in-progress.error-vapifault-playht-request-timed-out", + "call.in-progress.error-vapifault-playht-invalid-voice", + "call.in-progress.error-vapifault-playht-unexpected-error", + "call.in-progress.error-vapifault-playht-out-of-credits", + "call.in-progress.error-vapifault-playht-invalid-emotion", + "call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri", + "call.in-progress.error-vapifault-playht-401-unauthorized", + "call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters", + "call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available", + "call.in-progress.error-vapifault-playht-429-exceeded-quota", + "call.in-progress.error-vapifault-playht-502-gateway-error", + "call.in-progress.error-vapifault-playht-504-gateway-error", "pipeline-error-custom-transcriber-failed", + "call.in-progress.error-vapifault-custom-transcriber-failed", "pipeline-error-11labs-transcriber-failed", + "call.in-progress.error-vapifault-11labs-transcriber-failed", "pipeline-error-deepgram-returning-403-model-access-denied", "pipeline-error-deepgram-returning-401-invalid-credentials", "pipeline-error-deepgram-returning-404-not-found", @@ -27299,6 +31492,26 @@ "pipeline-error-deepgram-returning-500-invalid-json", "pipeline-error-deepgram-returning-502-network-error", "pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach", + "call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied", + "call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials", + "call.in-progress.error-vapifault-deepgram-returning-404-not-found", + "call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination", + "call.in-progress.error-vapifault-deepgram-returning-500-invalid-json", + "call.in-progress.error-vapifault-deepgram-returning-502-network-error", + "call.in-progress.error-vapifault-deepgram-returning-502-bad-gateway-ehostunreach", + "pipeline-error-google-transcriber-failed", + "call.in-progress.error-vapifault-google-transcriber-failed", + "pipeline-error-openai-transcriber-failed", + "call.in-progress.error-vapifault-openai-transcriber-failed", + "call.start.error-get-org", + "call.start.error-get-subscription", + "call.start.error-get-assistant", + "call.start.error-get-phone-number", + "call.start.error-get-customer", + "call.start.error-get-resources-validation", + "call.start.error-vapi-number-international", + "call.start.error-vapi-number-outbound-daily-limit", + "call.start.error-get-transport", "silence-timed-out", "sip-gateway-failed-to-connect-call", "twilio-failed-to-connect-call", @@ -27348,7 +31561,7 @@ } }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -27441,7 +31654,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -27548,7 +31761,7 @@ } }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -27621,7 +31834,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -27719,7 +31932,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -27808,7 +32021,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -27885,6 +32098,7 @@ "type": "string", "description": "This is the status of the call.", "enum": [ + "scheduled", "queued", "ringing", "in-progress", @@ -27929,35 +32143,74 @@ "pipeline-error-lmnt-voice-failed", "pipeline-error-azure-voice-failed", "pipeline-error-rime-ai-voice-failed", - "pipeline-error-neets-voice-failed", "pipeline-error-smallest-ai-voice-failed", "pipeline-error-neuphonic-voice-failed", "pipeline-error-hume-voice-failed", - "pipeline-error-deepgram-transcriber-failed", - "pipeline-error-gladia-transcriber-failed", - "pipeline-error-speechmatics-transcriber-failed", - "pipeline-error-assembly-ai-transcriber-failed", - "pipeline-error-talkscriber-transcriber-failed", - "pipeline-error-azure-speech-transcriber-failed", + "pipeline-error-sesame-voice-failed", + "pipeline-error-tavus-video-failed", + "call.in-progress.error-vapifault-openai-voice-failed", + "call.in-progress.error-vapifault-cartesia-voice-failed", + "call.in-progress.error-vapifault-deepgram-voice-failed", + "call.in-progress.error-vapifault-eleven-labs-voice-failed", + "call.in-progress.error-vapifault-playht-voice-failed", + "call.in-progress.error-vapifault-lmnt-voice-failed", + "call.in-progress.error-vapifault-azure-voice-failed", + "call.in-progress.error-vapifault-rime-ai-voice-failed", + "call.in-progress.error-vapifault-smallest-ai-voice-failed", + "call.in-progress.error-vapifault-neuphonic-voice-failed", + "call.in-progress.error-vapifault-hume-voice-failed", + "call.in-progress.error-vapifault-sesame-voice-failed", + "call.in-progress.error-vapifault-tavus-video-failed", "pipeline-error-vapi-llm-failed", "pipeline-error-vapi-400-bad-request-validation-failed", "pipeline-error-vapi-401-unauthorized", "pipeline-error-vapi-403-model-access-denied", "pipeline-error-vapi-429-exceeded-quota", "pipeline-error-vapi-500-server-error", + "call.in-progress.error-vapifault-vapi-llm-failed", + "call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-vapi-401-unauthorized", + "call.in-progress.error-vapifault-vapi-403-model-access-denied", + "call.in-progress.error-vapifault-vapi-429-exceeded-quota", + "call.in-progress.error-vapifault-vapi-500-server-error", + "pipeline-error-deepgram-transcriber-failed", + "call.in-progress.error-vapifault-deepgram-transcriber-failed", + "pipeline-error-gladia-transcriber-failed", + "call.in-progress.error-vapifault-gladia-transcriber-failed", + "pipeline-error-speechmatics-transcriber-failed", + "call.in-progress.error-vapifault-speechmatics-transcriber-failed", + "pipeline-error-assembly-ai-transcriber-failed", + "call.in-progress.error-vapifault-assembly-ai-transcriber-failed", + "pipeline-error-talkscriber-transcriber-failed", + "call.in-progress.error-vapifault-talkscriber-transcriber-failed", + "pipeline-error-azure-speech-transcriber-failed", + "call.in-progress.error-vapifault-azure-speech-transcriber-failed", "pipeline-no-available-model", "worker-shutdown", "unknown-error", "vonage-disconnected", "vonage-failed-to-connect-call", + "vonage-completed", "phone-call-provider-bypass-enabled-but-no-call-received", "vapifault-phone-call-worker-setup-socket-error", "vapifault-phone-call-worker-worker-setup-socket-timeout", - "vapifault-phone-call-worker-could-not-find-call", "vapifault-transport-never-connected", - "vapifault-web-call-worker-setup-failed", "vapifault-transport-connected-but-call-not-active", "vapifault-call-started-but-connection-to-transport-missing", + "call.in-progress.error-vapifault-phone-call-worker-setup-socket-error", + "call.in-progress.error-vapifault-phone-call-worker-worker-setup-socket-timeout", + "call.in-progress.error-vapifault-transport-never-connected", + "call.in-progress.error-vapifault-transport-connected-but-call-not-active", + "call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing", + "call.in-progress.error-vapifault-openai-llm-failed", + "call.in-progress.error-vapifault-azure-openai-llm-failed", + "call.in-progress.error-vapifault-groq-llm-failed", + "call.in-progress.error-vapifault-google-llm-failed", + "call.in-progress.error-vapifault-xai-llm-failed", + "call.in-progress.error-vapifault-mistral-llm-failed", + "call.in-progress.error-vapifault-inflection-ai-llm-failed", + "call.in-progress.error-vapifault-cerebras-llm-failed", + "call.in-progress.error-vapifault-deep-seek-llm-failed", "pipeline-error-openai-llm-failed", "pipeline-error-azure-openai-llm-failed", "pipeline-error-groq-llm-failed", @@ -27972,100 +32225,198 @@ "pipeline-error-openai-403-model-access-denied", "pipeline-error-openai-429-exceeded-quota", "pipeline-error-openai-500-server-error", + "call.in-progress.error-vapifault-openai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-openai-401-unauthorized", + "call.in-progress.error-vapifault-openai-403-model-access-denied", + "call.in-progress.error-vapifault-openai-429-exceeded-quota", + "call.in-progress.error-vapifault-openai-500-server-error", "pipeline-error-google-400-bad-request-validation-failed", "pipeline-error-google-401-unauthorized", "pipeline-error-google-403-model-access-denied", "pipeline-error-google-429-exceeded-quota", "pipeline-error-google-500-server-error", + "call.in-progress.error-vapifault-google-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-google-401-unauthorized", + "call.in-progress.error-vapifault-google-403-model-access-denied", + "call.in-progress.error-vapifault-google-429-exceeded-quota", + "call.in-progress.error-vapifault-google-500-server-error", "pipeline-error-xai-400-bad-request-validation-failed", "pipeline-error-xai-401-unauthorized", "pipeline-error-xai-403-model-access-denied", "pipeline-error-xai-429-exceeded-quota", "pipeline-error-xai-500-server-error", + "call.in-progress.error-vapifault-xai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-xai-401-unauthorized", + "call.in-progress.error-vapifault-xai-403-model-access-denied", + "call.in-progress.error-vapifault-xai-429-exceeded-quota", + "call.in-progress.error-vapifault-xai-500-server-error", "pipeline-error-mistral-400-bad-request-validation-failed", "pipeline-error-mistral-401-unauthorized", "pipeline-error-mistral-403-model-access-denied", "pipeline-error-mistral-429-exceeded-quota", "pipeline-error-mistral-500-server-error", + "call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-mistral-401-unauthorized", + "call.in-progress.error-vapifault-mistral-403-model-access-denied", + "call.in-progress.error-vapifault-mistral-429-exceeded-quota", + "call.in-progress.error-vapifault-mistral-500-server-error", "pipeline-error-inflection-ai-400-bad-request-validation-failed", "pipeline-error-inflection-ai-401-unauthorized", "pipeline-error-inflection-ai-403-model-access-denied", "pipeline-error-inflection-ai-429-exceeded-quota", "pipeline-error-inflection-ai-500-server-error", + "call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-inflection-ai-401-unauthorized", + "call.in-progress.error-vapifault-inflection-ai-403-model-access-denied", + "call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota", + "call.in-progress.error-vapifault-inflection-ai-500-server-error", "pipeline-error-deep-seek-400-bad-request-validation-failed", "pipeline-error-deep-seek-401-unauthorized", "pipeline-error-deep-seek-403-model-access-denied", "pipeline-error-deep-seek-429-exceeded-quota", "pipeline-error-deep-seek-500-server-error", + "call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-deep-seek-401-unauthorized", + "call.in-progress.error-vapifault-deep-seek-403-model-access-denied", + "call.in-progress.error-vapifault-deep-seek-429-exceeded-quota", + "call.in-progress.error-vapifault-deep-seek-500-server-error", "pipeline-error-azure-openai-400-bad-request-validation-failed", "pipeline-error-azure-openai-401-unauthorized", "pipeline-error-azure-openai-403-model-access-denied", "pipeline-error-azure-openai-429-exceeded-quota", "pipeline-error-azure-openai-500-server-error", + "call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-azure-openai-401-unauthorized", + "call.in-progress.error-vapifault-azure-openai-403-model-access-denied", + "call.in-progress.error-vapifault-azure-openai-429-exceeded-quota", + "call.in-progress.error-vapifault-azure-openai-500-server-error", "pipeline-error-groq-400-bad-request-validation-failed", "pipeline-error-groq-401-unauthorized", "pipeline-error-groq-403-model-access-denied", "pipeline-error-groq-429-exceeded-quota", "pipeline-error-groq-500-server-error", + "call.in-progress.error-vapifault-groq-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-groq-401-unauthorized", + "call.in-progress.error-vapifault-groq-403-model-access-denied", + "call.in-progress.error-vapifault-groq-429-exceeded-quota", + "call.in-progress.error-vapifault-groq-500-server-error", "pipeline-error-cerebras-400-bad-request-validation-failed", "pipeline-error-cerebras-401-unauthorized", "pipeline-error-cerebras-403-model-access-denied", "pipeline-error-cerebras-429-exceeded-quota", "pipeline-error-cerebras-500-server-error", + "call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-cerebras-401-unauthorized", + "call.in-progress.error-vapifault-cerebras-403-model-access-denied", + "call.in-progress.error-vapifault-cerebras-429-exceeded-quota", + "call.in-progress.error-vapifault-cerebras-500-server-error", "pipeline-error-anthropic-400-bad-request-validation-failed", "pipeline-error-anthropic-401-unauthorized", "pipeline-error-anthropic-403-model-access-denied", "pipeline-error-anthropic-429-exceeded-quota", "pipeline-error-anthropic-500-server-error", "pipeline-error-anthropic-llm-failed", + "call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-anthropic-401-unauthorized", + "call.in-progress.error-vapifault-anthropic-403-model-access-denied", + "call.in-progress.error-vapifault-anthropic-429-exceeded-quota", + "call.in-progress.error-vapifault-anthropic-500-server-error", + "call.in-progress.error-vapifault-anthropic-llm-failed", "pipeline-error-together-ai-400-bad-request-validation-failed", "pipeline-error-together-ai-401-unauthorized", "pipeline-error-together-ai-403-model-access-denied", "pipeline-error-together-ai-429-exceeded-quota", "pipeline-error-together-ai-500-server-error", "pipeline-error-together-ai-llm-failed", + "call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-together-ai-401-unauthorized", + "call.in-progress.error-vapifault-together-ai-403-model-access-denied", + "call.in-progress.error-vapifault-together-ai-429-exceeded-quota", + "call.in-progress.error-vapifault-together-ai-500-server-error", + "call.in-progress.error-vapifault-together-ai-llm-failed", "pipeline-error-anyscale-400-bad-request-validation-failed", "pipeline-error-anyscale-401-unauthorized", "pipeline-error-anyscale-403-model-access-denied", "pipeline-error-anyscale-429-exceeded-quota", "pipeline-error-anyscale-500-server-error", "pipeline-error-anyscale-llm-failed", + "call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-anyscale-401-unauthorized", + "call.in-progress.error-vapifault-anyscale-403-model-access-denied", + "call.in-progress.error-vapifault-anyscale-429-exceeded-quota", + "call.in-progress.error-vapifault-anyscale-500-server-error", + "call.in-progress.error-vapifault-anyscale-llm-failed", "pipeline-error-openrouter-400-bad-request-validation-failed", "pipeline-error-openrouter-401-unauthorized", "pipeline-error-openrouter-403-model-access-denied", "pipeline-error-openrouter-429-exceeded-quota", "pipeline-error-openrouter-500-server-error", "pipeline-error-openrouter-llm-failed", + "call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-openrouter-401-unauthorized", + "call.in-progress.error-vapifault-openrouter-403-model-access-denied", + "call.in-progress.error-vapifault-openrouter-429-exceeded-quota", + "call.in-progress.error-vapifault-openrouter-500-server-error", + "call.in-progress.error-vapifault-openrouter-llm-failed", "pipeline-error-perplexity-ai-400-bad-request-validation-failed", "pipeline-error-perplexity-ai-401-unauthorized", "pipeline-error-perplexity-ai-403-model-access-denied", "pipeline-error-perplexity-ai-429-exceeded-quota", "pipeline-error-perplexity-ai-500-server-error", "pipeline-error-perplexity-ai-llm-failed", + "call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-perplexity-ai-401-unauthorized", + "call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied", + "call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota", + "call.in-progress.error-vapifault-perplexity-ai-500-server-error", + "call.in-progress.error-vapifault-perplexity-ai-llm-failed", "pipeline-error-deepinfra-400-bad-request-validation-failed", "pipeline-error-deepinfra-401-unauthorized", "pipeline-error-deepinfra-403-model-access-denied", "pipeline-error-deepinfra-429-exceeded-quota", "pipeline-error-deepinfra-500-server-error", "pipeline-error-deepinfra-llm-failed", + "call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-deepinfra-401-unauthorized", + "call.in-progress.error-vapifault-deepinfra-403-model-access-denied", + "call.in-progress.error-vapifault-deepinfra-429-exceeded-quota", + "call.in-progress.error-vapifault-deepinfra-500-server-error", + "call.in-progress.error-vapifault-deepinfra-llm-failed", "pipeline-error-runpod-400-bad-request-validation-failed", "pipeline-error-runpod-401-unauthorized", "pipeline-error-runpod-403-model-access-denied", "pipeline-error-runpod-429-exceeded-quota", "pipeline-error-runpod-500-server-error", "pipeline-error-runpod-llm-failed", + "call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-runpod-401-unauthorized", + "call.in-progress.error-vapifault-runpod-403-model-access-denied", + "call.in-progress.error-vapifault-runpod-429-exceeded-quota", + "call.in-progress.error-vapifault-runpod-500-server-error", + "call.in-progress.error-vapifault-runpod-llm-failed", "pipeline-error-custom-llm-400-bad-request-validation-failed", "pipeline-error-custom-llm-401-unauthorized", "pipeline-error-custom-llm-403-model-access-denied", "pipeline-error-custom-llm-429-exceeded-quota", "pipeline-error-custom-llm-500-server-error", "pipeline-error-custom-llm-llm-failed", + "call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed", + "call.in-progress.error-vapifault-custom-llm-401-unauthorized", + "call.in-progress.error-vapifault-custom-llm-403-model-access-denied", + "call.in-progress.error-vapifault-custom-llm-429-exceeded-quota", + "call.in-progress.error-vapifault-custom-llm-500-server-error", + "call.in-progress.error-vapifault-custom-llm-llm-failed", "pipeline-error-custom-voice-failed", "pipeline-error-cartesia-socket-hang-up", "pipeline-error-cartesia-requested-payment", "pipeline-error-cartesia-500-server-error", "pipeline-error-cartesia-503-server-error", "pipeline-error-cartesia-522-server-error", + "call.in-progress.error-vapifault-cartesia-socket-hang-up", + "call.in-progress.error-vapifault-cartesia-requested-payment", + "call.in-progress.error-vapifault-cartesia-500-server-error", + "call.in-progress.error-vapifault-cartesia-503-server-error", + "call.in-progress.error-vapifault-cartesia-522-server-error", "pipeline-error-eleven-labs-voice-not-found", "pipeline-error-eleven-labs-quota-exceeded", "pipeline-error-eleven-labs-unauthorized-access", @@ -28087,6 +32438,27 @@ "pipeline-error-eleven-labs-500-server-error", "pipeline-error-eleven-labs-max-character-limit-exceeded", "pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification", + "call.in-progress.error-vapifault-eleven-labs-voice-not-found", + "call.in-progress.error-vapifault-eleven-labs-quota-exceeded", + "call.in-progress.error-vapifault-eleven-labs-unauthorized-access", + "call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model", + "call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus", + "call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade", + "call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned", + "call.in-progress.error-vapifault-eleven-labs-invalid-api-key", + "call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples", + "call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner", + "call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation", + "call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy", + "call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone", + "call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used", + "call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users", + "call.in-progress.error-vapifault-eleven-labs-500-server-error", + "call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded", + "call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification", "pipeline-error-playht-request-timed-out", "pipeline-error-playht-invalid-voice", "pipeline-error-playht-unexpected-error", @@ -28099,9 +32471,22 @@ "pipeline-error-playht-429-exceeded-quota", "pipeline-error-playht-502-gateway-error", "pipeline-error-playht-504-gateway-error", - "pipeline-error-tavus-video-failed", + "call.in-progress.error-vapifault-playht-request-timed-out", + "call.in-progress.error-vapifault-playht-invalid-voice", + "call.in-progress.error-vapifault-playht-unexpected-error", + "call.in-progress.error-vapifault-playht-out-of-credits", + "call.in-progress.error-vapifault-playht-invalid-emotion", + "call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri", + "call.in-progress.error-vapifault-playht-401-unauthorized", + "call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters", + "call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available", + "call.in-progress.error-vapifault-playht-429-exceeded-quota", + "call.in-progress.error-vapifault-playht-502-gateway-error", + "call.in-progress.error-vapifault-playht-504-gateway-error", "pipeline-error-custom-transcriber-failed", + "call.in-progress.error-vapifault-custom-transcriber-failed", "pipeline-error-11labs-transcriber-failed", + "call.in-progress.error-vapifault-11labs-transcriber-failed", "pipeline-error-deepgram-returning-403-model-access-denied", "pipeline-error-deepgram-returning-401-invalid-credentials", "pipeline-error-deepgram-returning-404-not-found", @@ -28109,6 +32494,26 @@ "pipeline-error-deepgram-returning-500-invalid-json", "pipeline-error-deepgram-returning-502-network-error", "pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach", + "call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied", + "call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials", + "call.in-progress.error-vapifault-deepgram-returning-404-not-found", + "call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination", + "call.in-progress.error-vapifault-deepgram-returning-500-invalid-json", + "call.in-progress.error-vapifault-deepgram-returning-502-network-error", + "call.in-progress.error-vapifault-deepgram-returning-502-bad-gateway-ehostunreach", + "pipeline-error-google-transcriber-failed", + "call.in-progress.error-vapifault-google-transcriber-failed", + "pipeline-error-openai-transcriber-failed", + "call.in-progress.error-vapifault-openai-transcriber-failed", + "call.start.error-get-org", + "call.start.error-get-subscription", + "call.start.error-get-assistant", + "call.start.error-get-phone-number", + "call.start.error-get-customer", + "call.start.error-get-resources-validation", + "call.start.error-vapi-number-international", + "call.start.error-vapi-number-outbound-daily-limit", + "call.start.error-get-transport", "silence-timed-out", "sip-gateway-failed-to-connect-call", "twilio-failed-to-connect-call", @@ -28166,7 +32571,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -28278,12 +32683,16 @@ { "$ref": "#/components/schemas/TextEditorToolWithToolCall", "title": "TextEditorToolWithToolCall" + }, + { + "$ref": "#/components/schemas/GoogleCalendarCreateEventToolWithToolCall", + "title": "GoogleCalendarCreateEventToolWithToolCall" } ] } }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -28363,7 +32772,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -28456,7 +32865,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -28553,7 +32962,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -28648,7 +33057,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -28720,7 +33129,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -28797,7 +33206,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -28874,7 +33283,7 @@ ] }, "timestamp": { - "type": "number", + "type": "string", "description": "This is the ISO-8601 formatted timestamp of when the message was sent." }, "artifact": { @@ -29304,6 +33713,10 @@ "endCallAfterSpoken": { "type": "boolean", "description": "This is the flag to end call after content is spoken." + }, + "interruptionsEnabled": { + "type": "boolean", + "description": "This is the flag for whether the message is interruptible." } } }, @@ -30281,199 +34694,132 @@ "name" ] }, - "StepDestination": { + "GoogleCalendarCreateEventToolWithToolCall": { "type": "object", "properties": { - "type": { - "type": "string", - "enum": [ - "step" - ] + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false }, - "conditions": { + "messages": { "type": "array", - "description": "This is an optional array of conditions that must be met for this destination to be triggered. If empty, this is the default destination that the step transfers to.", + "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/ModelBasedCondition", - "title": "ModelBasedCondition" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/RuleBasedCondition", - "title": "RuleBasedCondition" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, - "stepName": { - "type": "string", - "minLength": 1 - } - }, - "required": [ - "type", - "stepName" - ] - }, - "HandoffStep": { - "type": "object", - "properties": { - "block": { - "description": "This is the block to use. To use an existing block, use `blockId`.", - "oneOf": [ - { - "$ref": "#/components/schemas/CreateConversationBlockDTO", - "title": "ConversationBlock" - }, - { - "$ref": "#/components/schemas/CreateToolCallBlockDTO", - "title": "ToolCallBlock" - }, - { - "$ref": "#/components/schemas/CreateWorkflowBlockDTO", - "title": "WorkflowBlock", - "description": "This is the CreateWorkflowBlockDTO object but Swagger does not display nested schemas correctly." - } - ] - }, "type": { "type": "string", - "description": "This is a step that takes a handoff from the previous step. This means it won't return to the calling step. The workflow execution will continue linearly.\n\nUse case:\n- You want to collect information linearly (e.g. a form, provide information, etc).", "enum": [ - "handoff" - ] - }, - "destinations": { - "type": "array", - "description": "These are the destinations that the step can go to after it's done.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/StepDestination", - "title": "StepDestination" - } - ] - } + "google.calendar.event.create" + ], + "description": "The type of tool. \"google.calendar.event.create\" for Google Calendar tool." }, - "name": { - "type": "string", - "description": "This is the name of the step.", - "minLength": 1 + "toolCall": { + "$ref": "#/components/schemas/ToolCall" }, - "blockId": { - "type": "string", - "description": "This is the id of the block to use. To use a transient block, use `block`." + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ + { + "$ref": "#/components/schemas/OpenAIFunction" + } + ] }, - "input": { - "type": "object", - "description": "This is the input to the block. You can use any key-value map as input to the block.\n\nExample:\n{\n \"name\": \"John Doe\",\n \"age\": 20\n}\n\nYou can reference any variable in the context of the current block:\n- \"{{your-step-name.output.your-property-name}}\" for another step's output (in the same workflow; read caveat #1)\n- \"{{your-step-name.input.your-property-name}}\" for another step's input (in the same workflow; read caveat #1)\n- \"{{your-block-name.output.your-property-name}}\" for another block's output (in the same workflow; read caveat #2)\n- \"{{your-block-name.input.your-property-name}}\" for another block's input (in the same workflow; read caveat #2)\n- \"{{workflow.input.your-property-name}}\" for the current workflow's input\n- \"{{global.your-property-name}}\" for the global context\n\nExample:\n{\n \"name\": \"{{my-tool-call-step.output.name}}\",\n \"age\": \"{{my-tool-call-step.input.age}}\",\n \"date\": \"{{workflow.input.date}}\"\n}\n\nYou can dynamically change the key name.\n\nExample:\n{\n \"{{my-tool-call-step.output.key-name-for-name}}\": \"{{name}}\",\n \"{{my-tool-call-step.input.key-name-for-age}}\": \"{{age}}\",\n \"{{workflow.input.key-name-for-date}}\": \"{{date}}\"\n}\n\nYou can represent the value as a string, number, boolean, array, or object.\n\nExample:\n{\n \"name\": \"john\",\n \"age\": 20,\n \"date\": \"2021-01-01\",\n \"metadata\": {\n \"unique-key\": \"{{my-tool-call-step.output.unique-key}}\"\n },\n \"array\": [\"A\", \"B\", \"C\"],\n}\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.input/output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.input/output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow." + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] } }, "required": [ "type", - "name" + "toolCall" ] }, - "AssignmentMutation": { + "GoogleSheetsRowAppendToolWithToolCall": { "type": "object", "properties": { - "conditions": { + "async": { + "type": "boolean", + "description": "This determines if the tool is async.\n\nIf async, the assistant will move forward without waiting for your server to respond. This is useful if you just want to trigger something on your server.\n\nIf sync, the assistant will wait for your server to respond. This is useful if want assistant to respond with the result from your server.\n\nDefaults to synchronous (`false`).", + "example": false + }, + "messages": { "type": "array", - "description": "This is an optional array of conditions that must be met for this mutation to be triggered.", + "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/ModelBasedCondition", - "title": "ModelBasedCondition" + "$ref": "#/components/schemas/ToolMessageStart", + "title": "ToolMessageStart" + }, + { + "$ref": "#/components/schemas/ToolMessageComplete", + "title": "ToolMessageComplete" + }, + { + "$ref": "#/components/schemas/ToolMessageFailed", + "title": "ToolMessageFailed" }, { - "$ref": "#/components/schemas/RuleBasedCondition", - "title": "RuleBasedCondition" + "$ref": "#/components/schemas/ToolMessageDelayed", + "title": "ToolMessageDelayed" } ] } }, "type": { "type": "string", - "description": "This mutation assigns a new value to an existing or new variable.", "enum": [ - "assignment" - ] + "google.sheets.row.append" + ], + "description": "The type of tool. \"google.sheets.row.append\" for Google Sheets tool." }, - "variable": { - "type": "string", - "description": "This is the variable to assign a new value to.\n\nYou can reference any variable in the context of the current block execution (step):\n- \"output.your-property-name\" for current step's output\n- \"your-step-name.output.your-property-name\" for another step's output (in the same workflow; read caveat #1)\n- \"your-block-name.output.your-property-name\" for another block's output (in the same workflow; read caveat #2)\n- \"global.your-property-name\" for the global context\n\nThis needs to be the key path of the variable. If you use {{}}, it'll dereference that to the value of the variable before assignment. This can be useful if the path is dynamic. Example:\n- \"global.{{my-tool-call-step.output.my-key-name}}\"\n\nYou can also string interpolate multiple variables to get the key name:\n- \"global.{{my-tool-call-step.output.my-key-name-suffix}}-{{my-tool-call-step.output.my-key-name}}\"\n\nThe path to the new variable is created if it doesn't exist. Example:\n- \"global.this-does-not-exist.neither-does-this\" will create `this-does-not-exist` object with `neither-does-this` as a key\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow." + "toolCall": { + "$ref": "#/components/schemas/ToolCall" }, - "value": { - "type": "string", - "description": "The value to assign to the variable.\n\nYou can reference any variable in the context of the current block execution (step):\n- \"{{output.your-property-name}}\" for current step's output\n- \"{{your-step-name.output.your-property-name}}\" for another step's output (in the same workflow; read caveat #1)\n- \"{{your-block-name.output.your-property-name}}\" for another block's output (in the same workflow; read caveat #2)\n- \"{{global.your-property-name}}\" for the global context\n\nOr, you can use a constant:\n- \"1\"\n- \"text\"\n- \"true\"\n- \"false\"\n\nOr, you can mix and match with string interpolation:\n- \"{{your-property-name}}-{{input.your-property-name-2}}-1\"\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow.", - "maxLength": 1000 - } - }, - "required": [ - "type", - "variable", - "value" - ] - }, - "CallbackStep": { - "type": "object", - "properties": { - "block": { - "description": "This is the block to use. To use an existing block, use `blockId`.", - "oneOf": [ - { - "$ref": "#/components/schemas/CreateConversationBlockDTO", - "title": "ConversationBlock" - }, - { - "$ref": "#/components/schemas/CreateToolCallBlockDTO", - "title": "ToolCallBlock" - }, + "function": { + "description": "This is the function definition of the tool.\n\nFor `endCall`, `transferCall`, and `dtmf` tools, this is auto-filled based on tool-specific fields like `tool.destinations`. But, even in those cases, you can provide a custom function definition for advanced use cases.\n\nAn example of an advanced use case is if you want to customize the message that's spoken for `endCall` tool. You can specify a function where it returns an argument \"reason\". Then, in `messages` array, you can have many \"request-complete\" messages. One of these messages will be triggered if the `messages[].conditions` matches the \"reason\" argument.", + "allOf": [ { - "$ref": "#/components/schemas/CreateWorkflowBlockDTO", - "title": "WorkflowBlock", - "description": "This is the CreateWorkflowBlockDTO object but Swagger does not display nested schemas correctly." + "$ref": "#/components/schemas/OpenAIFunction" } ] }, - "type": { - "type": "string", - "description": "This is a step that calls back to the previous step after it's done. This effectively means we're spawning a new conversation thread. The previous conversation thread will resume where it left off once this step is done.\n\nUse case:\n- You are collecting a customer's order and while they were on one item, they start a new item or try to modify a previous one. You would make a OrderUpdate block which calls the same block repeatedly when a new update starts.", - "enum": [ - "callback" + "server": { + "description": "This is the server that will be hit when this tool is requested by the model.\n\nAll requests will be sent with the call object among other things. You can find more details in the Server URL documentation.\n\nThis overrides the serverUrl set on the org and the phoneNumber. Order of precedence: highest tool.server.url, then assistant.serverUrl, then phoneNumber.serverUrl, then org.serverUrl.", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } ] - }, - "mutations": { - "type": "array", - "description": "This is the mutations to apply to the context after the step is done.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/AssignmentMutation", - "title": "AssignmentMutation" - } - ] - } - }, - "name": { - "type": "string", - "description": "This is the name of the step.", - "minLength": 1 - }, - "blockId": { - "type": "string", - "description": "This is the id of the block to use. To use a transient block, use `block`." - }, - "input": { - "type": "object", - "description": "This is the input to the block. You can use any key-value map as input to the block.\n\nExample:\n{\n \"name\": \"John Doe\",\n \"age\": 20\n}\n\nYou can reference any variable in the context of the current block:\n- \"{{your-step-name.output.your-property-name}}\" for another step's output (in the same workflow; read caveat #1)\n- \"{{your-step-name.input.your-property-name}}\" for another step's input (in the same workflow; read caveat #1)\n- \"{{your-block-name.output.your-property-name}}\" for another block's output (in the same workflow; read caveat #2)\n- \"{{your-block-name.input.your-property-name}}\" for another block's input (in the same workflow; read caveat #2)\n- \"{{workflow.input.your-property-name}}\" for the current workflow's input\n- \"{{global.your-property-name}}\" for the global context\n\nExample:\n{\n \"name\": \"{{my-tool-call-step.output.name}}\",\n \"age\": \"{{my-tool-call-step.input.age}}\",\n \"date\": \"{{workflow.input.date}}\"\n}\n\nYou can dynamically change the key name.\n\nExample:\n{\n \"{{my-tool-call-step.output.key-name-for-name}}\": \"{{name}}\",\n \"{{my-tool-call-step.input.key-name-for-age}}\": \"{{age}}\",\n \"{{workflow.input.key-name-for-date}}\": \"{{date}}\"\n}\n\nYou can represent the value as a string, number, boolean, array, or object.\n\nExample:\n{\n \"name\": \"john\",\n \"age\": 20,\n \"date\": \"2021-01-01\",\n \"metadata\": {\n \"unique-key\": \"{{my-tool-call-step.output.unique-key}}\"\n },\n \"array\": [\"A\", \"B\", \"C\"],\n}\n\nCaveats:\n1. a workflow can execute a step multiple times. example, if a loop is used in the graph. {{stepName.input/output.propertyName}} will reference the latest usage of the step.\n2. a workflow can execute a block multiple times. example, if a step is called multiple times or if a block is used in multiple steps. {{blockName.input/output.propertyName}} will reference the latest usage of the block. this liquid variable is just provided for convenience when creating blocks outside of a workflow." } }, "required": [ "type", - "name" + "toolCall" ] } } diff --git a/fern/fern.config.json b/fern/fern.config.json index 13e686625..60630e2ee 100644 --- a/fern/fern.config.json +++ b/fern/fern.config.json @@ -1,4 +1,4 @@ { "organization": "vapi", - "version": "0.56.13" + "version": "0.57.2" } \ No newline at end of file