openapi: 3.0.0 paths: /assistant: post: operationId: AssistantController_create summary: Create Assistant parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateAssistantDTO' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/Assistant' tags: - Assistants security: - bearer: [] get: operationId: AssistantController_findAll summary: List Assistants parameters: - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/Assistant' tags: - Assistants security: - bearer: [] /assistant/{id}: get: operationId: AssistantController_findOne summary: Get Assistant parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Assistant' tags: - Assistants security: - bearer: [] patch: operationId: AssistantController_update summary: Update Assistant parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateAssistantDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Assistant' tags: - Assistants security: - bearer: [] delete: operationId: AssistantController_remove summary: Delete Assistant parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Assistant' tags: - Assistants 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: - bearer: [] get: operationId: SquadController_findAll summary: List Squads parameters: - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/Squad' tags: - Squads security: - bearer: [] /squad/{id}: get: operationId: SquadController_findOne summary: Get Squad parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Squad' tags: - Squads security: - bearer: [] patch: operationId: SquadController_update summary: Update Squad parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateSquadDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Squad' tags: - Squads security: - bearer: [] delete: operationId: SquadController_remove summary: Delete Squad parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Squad' tags: - Squads security: - bearer: [] /call: post: operationId: CallController_create summary: Create Call parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateCallDTO' responses: '201': description: '' content: application/json: schema: oneOf: - $ref: '#/components/schemas/Call' - $ref: '#/components/schemas/CallBatchResponse' tags: - Calls security: - bearer: [] get: operationId: CallController_findAll summary: List Calls parameters: - name: id required: false in: query description: This is the unique identifier for the call. schema: type: string - name: assistantId required: false in: query description: This will return calls with the specified assistantId. schema: type: string - name: phoneNumberId required: false in: query description: 'This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.' schema: type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/Call' tags: - Calls security: - bearer: [] /call/{id}: get: operationId: CallController_findOne summary: Get Call parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Call' tags: - Calls security: - bearer: [] patch: operationId: CallController_update summary: Update Call parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateCallDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Call' tags: - Calls security: - bearer: [] delete: operationId: CallController_deleteCallData summary: Delete Call parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/DeleteCallDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Call' tags: - Calls security: - bearer: [] /chat: get: operationId: ChatController_listChats summary: List Chats parameters: - name: id required: false in: query description: This is the unique identifier for the chat to filter by. schema: type: string - name: assistantId required: false in: query description: This is the unique identifier for the assistant that will be used for the chat. schema: type: string - name: assistantIdAny required: false in: query description: Filter by multiple assistant IDs. Provide as comma-separated values. schema: example: assistant-1,assistant-2,assistant-3 type: string - name: squadId required: false in: query description: This is the unique identifier for the squad that will be used for the chat. schema: type: string - name: sessionId required: false in: query description: This is the unique identifier for the session that will be used for the chat. schema: type: string - name: previousChatId required: false in: query description: This is the unique identifier for the previous chat to filter by. schema: type: string - name: page required: false in: query description: This is the page number to return. Defaults to 1. schema: minimum: 1 type: number - name: sortOrder required: false in: query description: This is the sort order for pagination. Defaults to 'DESC'. schema: enum: - ASC - DESC type: string - name: sortBy required: false in: query description: This is the column to sort by. Defaults to 'createdAt'. schema: enum: - createdAt - duration - cost type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/ChatPaginatedResponse' tags: - Chats security: - bearer: [] post: operationId: ChatController_createChat summary: Create Chat description: 'Creates a new chat with optional SMS delivery via transport field. Requires at least one of: assistantId/assistant, sessionId, or previousChatId. Note: sessionId and previousChatId are mutually exclusive. Transport field enables SMS delivery with two modes: (1) New conversation - provide transport.phoneNumberId and transport.customer to create a new session, (2) Existing conversation - provide sessionId to use existing session data. Cannot specify both sessionId and transport fields together. The transport.useLLMGeneratedMessageForOutbound flag controls whether input is processed by LLM (true, default) or forwarded directly as SMS (false).' parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateChatDTO' responses: '200': description: Chat response - either non-streaming chat or streaming content: application/json: schema: oneOf: - $ref: '#/components/schemas/Chat' - $ref: '#/components/schemas/CreateChatStreamResponse' '201': description: '' content: application/json: schema: type: object tags: - Chats security: - bearer: [] /chat/{id}: get: operationId: ChatController_getChat summary: Get Chat parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Chat' tags: - Chats security: - bearer: [] delete: operationId: ChatController_deleteChat summary: Delete Chat parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Chat' tags: - Chats security: - bearer: [] /chat/responses: post: operationId: ChatController_createOpenAIChat summary: Create Chat (OpenAI Compatible) parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/OpenAIResponsesRequest' responses: '200': description: OpenAI Responses API format - either non-streaming or streaming content: application/json: schema: oneOf: - $ref: '#/components/schemas/ResponseObject' - $ref: '#/components/schemas/ResponseTextDeltaEvent' - $ref: '#/components/schemas/ResponseTextDoneEvent' - $ref: '#/components/schemas/ResponseCompletedEvent' - $ref: '#/components/schemas/ResponseErrorEvent' '201': description: '' content: application/json: schema: type: object tags: - Chats security: - bearer: [] /campaign: post: operationId: CampaignController_create summary: Create Campaign parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateCampaignDTO' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/Campaign' tags: - Campaigns security: - bearer: [] get: operationId: CampaignController_findAll summary: List Campaigns parameters: - name: id required: false in: query schema: type: string - name: status required: false in: query schema: enum: - scheduled - in-progress - ended type: string - name: page required: false in: query description: This is the page number to return. Defaults to 1. schema: minimum: 1 type: number - name: sortOrder required: false in: query description: This is the sort order for pagination. Defaults to 'DESC'. schema: enum: - ASC - DESC type: string - name: sortBy required: false in: query description: This is the column to sort by. Defaults to 'createdAt'. schema: enum: - createdAt - duration - cost type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/CampaignPaginatedResponse' tags: - Campaigns security: - bearer: [] /campaign/{id}: get: operationId: CampaignController_findOne summary: Get Campaign parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Campaign' tags: - Campaigns security: - bearer: [] patch: operationId: CampaignController_update summary: Update Campaign parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateCampaignDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Campaign' tags: - Campaigns security: - bearer: [] delete: operationId: CampaignController_remove summary: Delete Campaign parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Campaign' tags: - Campaigns security: - bearer: [] /session: post: operationId: SessionController_create summary: Create Session parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateSessionDTO' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/Session' tags: - Sessions security: - bearer: [] get: operationId: SessionController_findAllPaginated summary: List Sessions parameters: - name: id required: false in: query description: This is the unique identifier for the session to filter by. schema: type: string - name: name required: false in: query description: This is the name of the session to filter by. schema: type: string - name: assistantId required: false in: query description: This is the ID of the assistant to filter sessions by. schema: type: string - name: assistantIdAny required: false in: query description: Filter by multiple assistant IDs. Provide as comma-separated values. schema: example: assistant-1,assistant-2,assistant-3 type: string - name: squadId required: false in: query description: This is the ID of the squad to filter sessions by. schema: type: string - name: workflowId required: false in: query description: This is the ID of the workflow to filter sessions by. schema: type: string - required: false 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. Use cases: - `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. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)' name: numberE164CheckEnabled in: query schema: default: true type: boolean - required: false description: This is the extension that will be dialed after the call is answered. name: extension in: query schema: maxLength: 10 example: null type: string - name: assistantOverrides required: false description: 'These are the overrides for the assistant''s settings and template variables specific to this customer. This allows customization of the assistant''s behavior for individual customers in batch calls.' allOf: - $ref: '#/components/schemas/AssistantOverrides' in: query schema: {} - required: false description: This is the number of the customer. name: number in: query schema: minLength: 3 maxLength: 40 type: string - required: false description: This is the SIP URI of the customer. name: sipUri in: query schema: type: string - required: false description: 'This is the name of the customer. This is just for your own reference. For SIP inbound calls, this is extracted from the `From` SIP header with format `"Display Name" `.' name: name in: query schema: maxLength: 40 type: string - required: false description: This is the email of the customer. name: email in: query schema: maxLength: 40 type: string - required: false description: This is the external ID of the customer. name: externalId in: query schema: maxLength: 40 type: string - name: customerNumberAny required: false in: query description: Filter by any of the specified customer phone numbers (comma-separated). schema: example: +1234567890,+0987654321 type: string - name: phoneNumberId required: false in: query description: This will return sessions with the specified phoneNumberId. schema: type: string - name: phoneNumberIdAny required: false in: query description: This will return sessions with any of the specified phoneNumberIds. schema: type: array items: type: string - name: page required: false in: query description: This is the page number to return. Defaults to 1. schema: minimum: 1 type: number - name: sortOrder required: false in: query description: This is the sort order for pagination. Defaults to 'DESC'. schema: enum: - ASC - DESC type: string - name: sortBy required: false in: query description: This is the column to sort by. Defaults to 'createdAt'. schema: enum: - createdAt - duration - cost type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/SessionPaginatedResponse' tags: - Sessions security: - bearer: [] /session/{id}: get: operationId: SessionController_findOne summary: Get Session parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Session' tags: - Sessions security: - bearer: [] patch: operationId: SessionController_update summary: Update Session parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateSessionDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Session' tags: - Sessions security: - bearer: [] delete: operationId: SessionController_remove summary: Delete Session parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Session' tags: - Sessions security: - bearer: [] /phone-number: post: operationId: PhoneNumberController_create summary: Create Phone Number parameters: [] requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber discriminator: propertyName: provider mapping: byo-phone-number: '#/components/schemas/CreateByoPhoneNumberDTO' twilio: '#/components/schemas/CreateTwilioPhoneNumberDTO' vonage: '#/components/schemas/CreateVonagePhoneNumberDTO' vapi: '#/components/schemas/CreateVapiPhoneNumberDTO' telnyx: '#/components/schemas/CreateTelnyxPhoneNumberDTO' responses: '201': description: '' content: application/json: schema: title: PhoneNumber oneOf: - $ref: '#/components/schemas/ByoPhoneNumber' title: ByoPhoneNumber - $ref: '#/components/schemas/TwilioPhoneNumber' title: TwilioPhoneNumber - $ref: '#/components/schemas/VonagePhoneNumber' title: VonagePhoneNumber - $ref: '#/components/schemas/VapiPhoneNumber' title: VapiPhoneNumber - $ref: '#/components/schemas/TelnyxPhoneNumber' title: TelnyxPhoneNumber discriminator: propertyName: provider mapping: byo-phone-number: '#/components/schemas/ByoPhoneNumber' twilio: '#/components/schemas/TwilioPhoneNumber' vonage: '#/components/schemas/VonagePhoneNumber' vapi: '#/components/schemas/VapiPhoneNumber' telnyx: '#/components/schemas/TelnyxPhoneNumber' tags: - Phone Numbers security: - bearer: [] get: operationId: PhoneNumberController_findAll summary: List Phone Numbers parameters: - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: type: array items: title: PhoneNumber oneOf: - $ref: '#/components/schemas/ByoPhoneNumber' title: ByoPhoneNumber - $ref: '#/components/schemas/TwilioPhoneNumber' title: TwilioPhoneNumber - $ref: '#/components/schemas/VonagePhoneNumber' title: VonagePhoneNumber - $ref: '#/components/schemas/VapiPhoneNumber' title: VapiPhoneNumber - $ref: '#/components/schemas/TelnyxPhoneNumber' title: TelnyxPhoneNumber discriminator: propertyName: provider mapping: byo-phone-number: '#/components/schemas/ByoPhoneNumber' twilio: '#/components/schemas/TwilioPhoneNumber' vonage: '#/components/schemas/VonagePhoneNumber' vapi: '#/components/schemas/VapiPhoneNumber' telnyx: '#/components/schemas/TelnyxPhoneNumber' tags: - Phone Numbers security: - bearer: [] /v2/phone-number: get: operationId: PhoneNumberController_findAllPaginated summary: List Phone Numbers parameters: - name: search required: false in: query description: This will search phone numbers by name, number, or SIP URI (partial match, case-insensitive). schema: maxLength: 100 type: string - name: page required: false in: query description: This is the page number to return. Defaults to 1. schema: minimum: 1 type: number - name: sortOrder required: false in: query description: This is the sort order for pagination. Defaults to 'DESC'. schema: enum: - ASC - DESC type: string - name: sortBy required: false in: query description: This is the column to sort by. Defaults to 'createdAt'. schema: enum: - createdAt - duration - cost type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/PhoneNumberPaginatedResponse' tags: - Phone Numbers security: - bearer: [] /phone-number/{id}: get: operationId: PhoneNumberController_findOne summary: Get Phone Number parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: title: PhoneNumber oneOf: - $ref: '#/components/schemas/ByoPhoneNumber' title: ByoPhoneNumber - $ref: '#/components/schemas/TwilioPhoneNumber' title: TwilioPhoneNumber - $ref: '#/components/schemas/VonagePhoneNumber' title: VonagePhoneNumber - $ref: '#/components/schemas/VapiPhoneNumber' title: VapiPhoneNumber - $ref: '#/components/schemas/TelnyxPhoneNumber' title: TelnyxPhoneNumber discriminator: propertyName: provider mapping: byo-phone-number: '#/components/schemas/ByoPhoneNumber' twilio: '#/components/schemas/TwilioPhoneNumber' vonage: '#/components/schemas/VonagePhoneNumber' vapi: '#/components/schemas/VapiPhoneNumber' telnyx: '#/components/schemas/TelnyxPhoneNumber' tags: - Phone Numbers security: - bearer: [] patch: operationId: PhoneNumberController_update summary: Update Phone Number parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/UpdateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/UpdateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/UpdateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/UpdateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/UpdateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber discriminator: propertyName: provider mapping: byo-phone-number: '#/components/schemas/UpdateByoPhoneNumberDTO' twilio: '#/components/schemas/UpdateTwilioPhoneNumberDTO' vonage: '#/components/schemas/UpdateVonagePhoneNumberDTO' vapi: '#/components/schemas/UpdateVapiPhoneNumberDTO' telnyx: '#/components/schemas/UpdateTelnyxPhoneNumberDTO' responses: '200': description: '' content: application/json: schema: title: PhoneNumber oneOf: - $ref: '#/components/schemas/ByoPhoneNumber' title: ByoPhoneNumber - $ref: '#/components/schemas/TwilioPhoneNumber' title: TwilioPhoneNumber - $ref: '#/components/schemas/VonagePhoneNumber' title: VonagePhoneNumber - $ref: '#/components/schemas/VapiPhoneNumber' title: VapiPhoneNumber - $ref: '#/components/schemas/TelnyxPhoneNumber' title: TelnyxPhoneNumber discriminator: propertyName: provider mapping: byo-phone-number: '#/components/schemas/ByoPhoneNumber' twilio: '#/components/schemas/TwilioPhoneNumber' vonage: '#/components/schemas/VonagePhoneNumber' vapi: '#/components/schemas/VapiPhoneNumber' telnyx: '#/components/schemas/TelnyxPhoneNumber' tags: - Phone Numbers security: - bearer: [] delete: operationId: PhoneNumberController_remove summary: Delete Phone Number parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: title: PhoneNumber oneOf: - $ref: '#/components/schemas/ByoPhoneNumber' title: ByoPhoneNumber - $ref: '#/components/schemas/TwilioPhoneNumber' title: TwilioPhoneNumber - $ref: '#/components/schemas/VonagePhoneNumber' title: VonagePhoneNumber - $ref: '#/components/schemas/VapiPhoneNumber' title: VapiPhoneNumber - $ref: '#/components/schemas/TelnyxPhoneNumber' title: TelnyxPhoneNumber discriminator: propertyName: provider mapping: byo-phone-number: '#/components/schemas/ByoPhoneNumber' twilio: '#/components/schemas/TwilioPhoneNumber' vonage: '#/components/schemas/VonagePhoneNumber' vapi: '#/components/schemas/VapiPhoneNumber' telnyx: '#/components/schemas/TelnyxPhoneNumber' tags: - Phone Numbers security: - bearer: [] /tool: post: operationId: ToolController_create summary: Create Tool parameters: [] requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsSendTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool discriminator: propertyName: type mapping: apiRequest: '#/components/schemas/CreateApiRequestToolDTO' dtmf: '#/components/schemas/CreateDtmfToolDTO' endCall: '#/components/schemas/CreateEndCallToolDTO' function: '#/components/schemas/CreateFunctionToolDTO' transferCall: '#/components/schemas/CreateTransferCallToolDTO' handoff: '#/components/schemas/CreateHandoffToolDTO' bash: '#/components/schemas/CreateBashToolDTO' computer: '#/components/schemas/CreateComputerToolDTO' textEditor: '#/components/schemas/CreateTextEditorToolDTO' query: '#/components/schemas/CreateQueryToolDTO' google.calendar.event.create: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' google.sheets.row.append: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' google.calendar.availability.check: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' slack.message.send: '#/components/schemas/CreateSlackSendMessageToolDTO' sms: '#/components/schemas/CreateSmsToolDTO' mcp: '#/components/schemas/CreateMcpToolDTO' gohighlevel.calendar.availability.check: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' gohighlevel.calendar.event.create: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' gohighlevel.contact.create: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' gohighlevel.contact.get: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' sipRequest: '#/components/schemas/CreateSipRequestToolDTO' voicemail: '#/components/schemas/CreateVoicemailToolDTO' responses: '201': description: '' content: application/json: schema: oneOf: - $ref: '#/components/schemas/ApiRequestTool' title: ApiRequestTool - $ref: '#/components/schemas/CodeTool' title: CodeTool - $ref: '#/components/schemas/DtmfTool' title: DtmfTool - $ref: '#/components/schemas/EndCallTool' title: EndCallTool - $ref: '#/components/schemas/FunctionTool' title: FunctionTool - $ref: '#/components/schemas/GhlTool' title: GhlTool - $ref: '#/components/schemas/TransferCallTool' title: TransferCallTool - $ref: '#/components/schemas/HandoffTool' title: HandoffTool - $ref: '#/components/schemas/BashTool' title: BashTool - $ref: '#/components/schemas/ComputerTool' title: ComputerTool - $ref: '#/components/schemas/TextEditorTool' title: TextEditorTool - $ref: '#/components/schemas/QueryTool' title: QueryTool - $ref: '#/components/schemas/GoogleCalendarCreateEventTool' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/GoogleSheetsRowAppendTool' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/GoogleCalendarCheckAvailabilityTool' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/SlackSendMessageTool' title: SlackSendMessageTool - $ref: '#/components/schemas/SmsTool' title: SmsSendTool - $ref: '#/components/schemas/McpTool' title: McpTool - $ref: '#/components/schemas/GoHighLevelCalendarAvailabilityTool' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/GoHighLevelCalendarEventCreateTool' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/GoHighLevelContactCreateTool' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/GoHighLevelContactGetTool' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/SipRequestTool' title: SipRequestTool - $ref: '#/components/schemas/VoicemailTool' title: VoicemailTool discriminator: propertyName: type mapping: apiRequest: '#/components/schemas/ApiRequestTool' code: '#/components/schemas/CodeTool' dtmf: '#/components/schemas/DtmfTool' endCall: '#/components/schemas/EndCallTool' function: '#/components/schemas/FunctionTool' transferCall: '#/components/schemas/TransferCallTool' handoff: '#/components/schemas/HandoffTool' bash: '#/components/schemas/BashTool' computer: '#/components/schemas/ComputerTool' textEditor: '#/components/schemas/TextEditorTool' query: '#/components/schemas/QueryTool' google.calendar.event.create: '#/components/schemas/GoogleCalendarCreateEventTool' google.sheets.row.append: '#/components/schemas/GoogleSheetsRowAppendTool' google.calendar.availability.check: '#/components/schemas/GoogleCalendarCheckAvailabilityTool' slack.message.send: '#/components/schemas/SlackSendMessageTool' sms: '#/components/schemas/SmsTool' mcp: '#/components/schemas/McpTool' gohighlevel.calendar.availability.check: '#/components/schemas/GoHighLevelCalendarAvailabilityTool' gohighlevel.calendar.event.create: '#/components/schemas/GoHighLevelCalendarEventCreateTool' gohighlevel.contact.create: '#/components/schemas/GoHighLevelContactCreateTool' gohighlevel.contact.get: '#/components/schemas/GoHighLevelContactGetTool' sipRequest: '#/components/schemas/SipRequestTool' voicemail: '#/components/schemas/VoicemailTool' tags: - Tools security: - bearer: [] get: operationId: ToolController_findAll summary: List Tools parameters: - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: type: array items: oneOf: - $ref: '#/components/schemas/ApiRequestTool' title: ApiRequestTool - $ref: '#/components/schemas/CodeTool' title: CodeTool - $ref: '#/components/schemas/DtmfTool' title: DtmfTool - $ref: '#/components/schemas/EndCallTool' title: EndCallTool - $ref: '#/components/schemas/FunctionTool' title: FunctionTool - $ref: '#/components/schemas/GhlTool' title: GhlTool - $ref: '#/components/schemas/TransferCallTool' title: TransferCallTool - $ref: '#/components/schemas/HandoffTool' title: HandoffTool - $ref: '#/components/schemas/BashTool' title: BashTool - $ref: '#/components/schemas/ComputerTool' title: ComputerTool - $ref: '#/components/schemas/TextEditorTool' title: TextEditorTool - $ref: '#/components/schemas/QueryTool' title: QueryTool - $ref: '#/components/schemas/GoogleCalendarCreateEventTool' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/GoogleSheetsRowAppendTool' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/GoogleCalendarCheckAvailabilityTool' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/SlackSendMessageTool' title: SlackSendMessageTool - $ref: '#/components/schemas/SmsTool' title: SmsSendTool - $ref: '#/components/schemas/McpTool' title: McpTool - $ref: '#/components/schemas/GoHighLevelCalendarAvailabilityTool' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/GoHighLevelCalendarEventCreateTool' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/GoHighLevelContactCreateTool' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/GoHighLevelContactGetTool' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/SipRequestTool' title: SipRequestTool - $ref: '#/components/schemas/VoicemailTool' title: VoicemailTool discriminator: propertyName: type mapping: apiRequest: '#/components/schemas/ApiRequestTool' code: '#/components/schemas/CodeTool' dtmf: '#/components/schemas/DtmfTool' endCall: '#/components/schemas/EndCallTool' function: '#/components/schemas/FunctionTool' transferCall: '#/components/schemas/TransferCallTool' handoff: '#/components/schemas/HandoffTool' bash: '#/components/schemas/BashTool' computer: '#/components/schemas/ComputerTool' textEditor: '#/components/schemas/TextEditorTool' query: '#/components/schemas/QueryTool' google.calendar.event.create: '#/components/schemas/GoogleCalendarCreateEventTool' google.sheets.row.append: '#/components/schemas/GoogleSheetsRowAppendTool' google.calendar.availability.check: '#/components/schemas/GoogleCalendarCheckAvailabilityTool' slack.message.send: '#/components/schemas/SlackSendMessageTool' sms: '#/components/schemas/SmsTool' mcp: '#/components/schemas/McpTool' gohighlevel.calendar.availability.check: '#/components/schemas/GoHighLevelCalendarAvailabilityTool' gohighlevel.calendar.event.create: '#/components/schemas/GoHighLevelCalendarEventCreateTool' gohighlevel.contact.create: '#/components/schemas/GoHighLevelContactCreateTool' gohighlevel.contact.get: '#/components/schemas/GoHighLevelContactGetTool' sipRequest: '#/components/schemas/SipRequestTool' voicemail: '#/components/schemas/VoicemailTool' tags: - Tools security: - bearer: [] /tool/{id}: get: operationId: ToolController_findOne summary: Get Tool parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: oneOf: - $ref: '#/components/schemas/ApiRequestTool' title: ApiRequestTool - $ref: '#/components/schemas/CodeTool' title: CodeTool - $ref: '#/components/schemas/DtmfTool' title: DtmfTool - $ref: '#/components/schemas/EndCallTool' title: EndCallTool - $ref: '#/components/schemas/FunctionTool' title: FunctionTool - $ref: '#/components/schemas/GhlTool' title: GhlTool - $ref: '#/components/schemas/TransferCallTool' title: TransferCallTool - $ref: '#/components/schemas/HandoffTool' title: HandoffTool - $ref: '#/components/schemas/BashTool' title: BashTool - $ref: '#/components/schemas/ComputerTool' title: ComputerTool - $ref: '#/components/schemas/TextEditorTool' title: TextEditorTool - $ref: '#/components/schemas/QueryTool' title: QueryTool - $ref: '#/components/schemas/GoogleCalendarCreateEventTool' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/GoogleSheetsRowAppendTool' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/GoogleCalendarCheckAvailabilityTool' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/SlackSendMessageTool' title: SlackSendMessageTool - $ref: '#/components/schemas/SmsTool' title: SmsSendTool - $ref: '#/components/schemas/McpTool' title: McpTool - $ref: '#/components/schemas/GoHighLevelCalendarAvailabilityTool' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/GoHighLevelCalendarEventCreateTool' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/GoHighLevelContactCreateTool' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/GoHighLevelContactGetTool' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/SipRequestTool' title: SipRequestTool - $ref: '#/components/schemas/VoicemailTool' title: VoicemailTool discriminator: propertyName: type mapping: apiRequest: '#/components/schemas/ApiRequestTool' code: '#/components/schemas/CodeTool' dtmf: '#/components/schemas/DtmfTool' endCall: '#/components/schemas/EndCallTool' function: '#/components/schemas/FunctionTool' transferCall: '#/components/schemas/TransferCallTool' handoff: '#/components/schemas/HandoffTool' bash: '#/components/schemas/BashTool' computer: '#/components/schemas/ComputerTool' textEditor: '#/components/schemas/TextEditorTool' query: '#/components/schemas/QueryTool' google.calendar.event.create: '#/components/schemas/GoogleCalendarCreateEventTool' google.sheets.row.append: '#/components/schemas/GoogleSheetsRowAppendTool' google.calendar.availability.check: '#/components/schemas/GoogleCalendarCheckAvailabilityTool' slack.message.send: '#/components/schemas/SlackSendMessageTool' sms: '#/components/schemas/SmsTool' mcp: '#/components/schemas/McpTool' gohighlevel.calendar.availability.check: '#/components/schemas/GoHighLevelCalendarAvailabilityTool' gohighlevel.calendar.event.create: '#/components/schemas/GoHighLevelCalendarEventCreateTool' gohighlevel.contact.create: '#/components/schemas/GoHighLevelContactCreateTool' gohighlevel.contact.get: '#/components/schemas/GoHighLevelContactGetTool' sipRequest: '#/components/schemas/SipRequestTool' voicemail: '#/components/schemas/VoicemailTool' tags: - Tools security: - bearer: [] patch: operationId: ToolController_update summary: Update Tool parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/UpdateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/UpdateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/UpdateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/UpdateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/UpdateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/UpdateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/UpdateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/UpdateBashToolDTO' title: BashTool - $ref: '#/components/schemas/UpdateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/UpdateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/UpdateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/UpdateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/UpdateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/UpdateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/UpdateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/UpdateSmsToolDTO' title: SmsSendTool - $ref: '#/components/schemas/UpdateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/UpdateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/UpdateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/UpdateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/UpdateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/UpdateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/UpdateVoicemailToolDTO' title: VoicemailTool discriminator: propertyName: type mapping: apiRequest: '#/components/schemas/UpdateApiRequestToolDTO' dtmf: '#/components/schemas/UpdateDtmfToolDTO' endCall: '#/components/schemas/UpdateEndCallToolDTO' function: '#/components/schemas/UpdateFunctionToolDTO' transferCall: '#/components/schemas/UpdateTransferCallToolDTO' handoff: '#/components/schemas/UpdateHandoffToolDTO' bash: '#/components/schemas/UpdateBashToolDTO' computer: '#/components/schemas/UpdateComputerToolDTO' textEditor: '#/components/schemas/UpdateTextEditorToolDTO' query: '#/components/schemas/UpdateQueryToolDTO' google.calendar.event.create: '#/components/schemas/UpdateGoogleCalendarCreateEventToolDTO' google.sheets.row.append: '#/components/schemas/UpdateGoogleSheetsRowAppendToolDTO' google.calendar.availability.check: '#/components/schemas/UpdateGoogleCalendarCheckAvailabilityToolDTO' slack.message.send: '#/components/schemas/UpdateSlackSendMessageToolDTO' sms: '#/components/schemas/UpdateSmsToolDTO' mcp: '#/components/schemas/UpdateMcpToolDTO' gohighlevel.calendar.availability.check: '#/components/schemas/UpdateGoHighLevelCalendarAvailabilityToolDTO' gohighlevel.calendar.event.create: '#/components/schemas/UpdateGoHighLevelCalendarEventCreateToolDTO' gohighlevel.contact.create: '#/components/schemas/UpdateGoHighLevelContactCreateToolDTO' gohighlevel.contact.get: '#/components/schemas/UpdateGoHighLevelContactGetToolDTO' sipRequest: '#/components/schemas/UpdateSipRequestToolDTO' voicemail: '#/components/schemas/UpdateVoicemailToolDTO' responses: '200': description: '' content: application/json: schema: oneOf: - $ref: '#/components/schemas/ApiRequestTool' title: ApiRequestTool - $ref: '#/components/schemas/CodeTool' title: CodeTool - $ref: '#/components/schemas/DtmfTool' title: DtmfTool - $ref: '#/components/schemas/EndCallTool' title: EndCallTool - $ref: '#/components/schemas/FunctionTool' title: FunctionTool - $ref: '#/components/schemas/GhlTool' title: GhlTool - $ref: '#/components/schemas/TransferCallTool' title: TransferCallTool - $ref: '#/components/schemas/HandoffTool' title: HandoffTool - $ref: '#/components/schemas/BashTool' title: BashTool - $ref: '#/components/schemas/ComputerTool' title: ComputerTool - $ref: '#/components/schemas/TextEditorTool' title: TextEditorTool - $ref: '#/components/schemas/QueryTool' title: QueryTool - $ref: '#/components/schemas/GoogleCalendarCreateEventTool' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/GoogleSheetsRowAppendTool' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/GoogleCalendarCheckAvailabilityTool' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/SlackSendMessageTool' title: SlackSendMessageTool - $ref: '#/components/schemas/SmsTool' title: SmsSendTool - $ref: '#/components/schemas/McpTool' title: McpTool - $ref: '#/components/schemas/GoHighLevelCalendarAvailabilityTool' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/GoHighLevelCalendarEventCreateTool' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/GoHighLevelContactCreateTool' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/GoHighLevelContactGetTool' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/SipRequestTool' title: SipRequestTool - $ref: '#/components/schemas/VoicemailTool' title: VoicemailTool discriminator: propertyName: type mapping: apiRequest: '#/components/schemas/ApiRequestTool' code: '#/components/schemas/CodeTool' dtmf: '#/components/schemas/DtmfTool' endCall: '#/components/schemas/EndCallTool' function: '#/components/schemas/FunctionTool' transferCall: '#/components/schemas/TransferCallTool' handoff: '#/components/schemas/HandoffTool' bash: '#/components/schemas/BashTool' computer: '#/components/schemas/ComputerTool' textEditor: '#/components/schemas/TextEditorTool' query: '#/components/schemas/QueryTool' google.calendar.event.create: '#/components/schemas/GoogleCalendarCreateEventTool' google.sheets.row.append: '#/components/schemas/GoogleSheetsRowAppendTool' google.calendar.availability.check: '#/components/schemas/GoogleCalendarCheckAvailabilityTool' slack.message.send: '#/components/schemas/SlackSendMessageTool' sms: '#/components/schemas/SmsTool' mcp: '#/components/schemas/McpTool' gohighlevel.calendar.availability.check: '#/components/schemas/GoHighLevelCalendarAvailabilityTool' gohighlevel.calendar.event.create: '#/components/schemas/GoHighLevelCalendarEventCreateTool' gohighlevel.contact.create: '#/components/schemas/GoHighLevelContactCreateTool' gohighlevel.contact.get: '#/components/schemas/GoHighLevelContactGetTool' sipRequest: '#/components/schemas/SipRequestTool' voicemail: '#/components/schemas/VoicemailTool' tags: - Tools security: - bearer: [] delete: operationId: ToolController_remove summary: Delete Tool parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: oneOf: - $ref: '#/components/schemas/ApiRequestTool' title: ApiRequestTool - $ref: '#/components/schemas/CodeTool' title: CodeTool - $ref: '#/components/schemas/DtmfTool' title: DtmfTool - $ref: '#/components/schemas/EndCallTool' title: EndCallTool - $ref: '#/components/schemas/FunctionTool' title: FunctionTool - $ref: '#/components/schemas/GhlTool' title: GhlTool - $ref: '#/components/schemas/TransferCallTool' title: TransferCallTool - $ref: '#/components/schemas/HandoffTool' title: HandoffTool - $ref: '#/components/schemas/BashTool' title: BashTool - $ref: '#/components/schemas/ComputerTool' title: ComputerTool - $ref: '#/components/schemas/TextEditorTool' title: TextEditorTool - $ref: '#/components/schemas/QueryTool' title: QueryTool - $ref: '#/components/schemas/GoogleCalendarCreateEventTool' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/GoogleSheetsRowAppendTool' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/GoogleCalendarCheckAvailabilityTool' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/SlackSendMessageTool' title: SlackSendMessageTool - $ref: '#/components/schemas/SmsTool' title: SmsSendTool - $ref: '#/components/schemas/McpTool' title: McpTool - $ref: '#/components/schemas/GoHighLevelCalendarAvailabilityTool' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/GoHighLevelCalendarEventCreateTool' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/GoHighLevelContactCreateTool' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/GoHighLevelContactGetTool' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/SipRequestTool' title: SipRequestTool - $ref: '#/components/schemas/VoicemailTool' title: VoicemailTool discriminator: propertyName: type mapping: apiRequest: '#/components/schemas/ApiRequestTool' code: '#/components/schemas/CodeTool' dtmf: '#/components/schemas/DtmfTool' endCall: '#/components/schemas/EndCallTool' function: '#/components/schemas/FunctionTool' transferCall: '#/components/schemas/TransferCallTool' handoff: '#/components/schemas/HandoffTool' bash: '#/components/schemas/BashTool' computer: '#/components/schemas/ComputerTool' textEditor: '#/components/schemas/TextEditorTool' query: '#/components/schemas/QueryTool' google.calendar.event.create: '#/components/schemas/GoogleCalendarCreateEventTool' google.sheets.row.append: '#/components/schemas/GoogleSheetsRowAppendTool' google.calendar.availability.check: '#/components/schemas/GoogleCalendarCheckAvailabilityTool' slack.message.send: '#/components/schemas/SlackSendMessageTool' sms: '#/components/schemas/SmsTool' mcp: '#/components/schemas/McpTool' gohighlevel.calendar.availability.check: '#/components/schemas/GoHighLevelCalendarAvailabilityTool' gohighlevel.calendar.event.create: '#/components/schemas/GoHighLevelCalendarEventCreateTool' gohighlevel.contact.create: '#/components/schemas/GoHighLevelContactCreateTool' gohighlevel.contact.get: '#/components/schemas/GoHighLevelContactGetTool' sipRequest: '#/components/schemas/SipRequestTool' voicemail: '#/components/schemas/VoicemailTool' tags: - Tools security: - bearer: [] /file: post: operationId: FileController_create summary: Upload File parameters: [] requestBody: required: true content: multipart/form-data: schema: $ref: '#/components/schemas/CreateFileDTO' responses: '201': description: File uploaded successfully content: application/json: schema: $ref: '#/components/schemas/File' '400': description: Invalid file tags: - Files security: - bearer: [] get: operationId: FileController_findAll summary: List Files parameters: [] responses: '200': description: '' content: application/json: schema: type: array items: $ref: '#/components/schemas/File' tags: - Files security: - bearer: [] /file/{id}: get: operationId: FileController_findOne summary: Get File parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/File' tags: - Files security: - bearer: [] patch: operationId: FileController_update summary: Update File parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateFileDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/File' tags: - Files security: - bearer: [] delete: operationId: FileController_remove summary: Delete File parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/File' tags: - Files security: - bearer: [] /structured-output: get: operationId: StructuredOutputController_findAll summary: List Structured Outputs parameters: - name: id required: false in: query description: This will return structured outputs where the id matches the specified value. schema: type: string - name: name required: false in: query description: This will return structured outputs where the name matches the specified value. schema: type: string - name: page required: false in: query description: This is the page number to return. Defaults to 1. schema: minimum: 1 type: number - name: sortOrder required: false in: query description: This is the sort order for pagination. Defaults to 'DESC'. schema: enum: - ASC - DESC type: string - name: sortBy required: false in: query description: This is the column to sort by. Defaults to 'createdAt'. schema: enum: - createdAt - duration - cost type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/StructuredOutputPaginatedResponse' tags: - Structured Outputs security: - bearer: [] post: operationId: StructuredOutputController_create summary: Create Structured Output parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateStructuredOutputDTO' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/StructuredOutput' tags: - Structured Outputs security: - bearer: [] /structured-output/{id}: get: operationId: StructuredOutputController_findOne summary: Get Structured Output parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/StructuredOutput' tags: - Structured Outputs security: - bearer: [] patch: operationId: StructuredOutputController_update summary: Update Structured Output parameters: - name: id required: true in: path schema: type: string - name: schemaOverride required: true in: query schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateStructuredOutputDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/StructuredOutput' tags: - Structured Outputs security: - bearer: [] delete: operationId: StructuredOutputController_remove summary: Delete Structured Output parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/StructuredOutput' tags: - Structured Outputs security: - bearer: [] /structured-output/run: post: operationId: StructuredOutputController_run summary: Run Structured Output parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/StructuredOutputRunDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/StructuredOutput' '201': description: '' content: application/json: schema: type: object tags: - Structured Outputs security: - bearer: [] /reporting/insight: post: operationId: InsightController_create summary: Create Insight parameters: [] requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/CreateBarInsightFromCallTableDTO' title: CreateBarInsightFromCallTableDTO - $ref: '#/components/schemas/CreatePieInsightFromCallTableDTO' title: CreatePieInsightFromCallTableDTO - $ref: '#/components/schemas/CreateLineInsightFromCallTableDTO' title: CreateLineInsightFromCallTableDTO - $ref: '#/components/schemas/CreateTextInsightFromCallTableDTO' title: CreateTextInsightFromCallTableDTO discriminator: propertyName: type mapping: bar: '#/components/schemas/CreateBarInsightFromCallTableDTO' pie: '#/components/schemas/CreatePieInsightFromCallTableDTO' line: '#/components/schemas/CreateLineInsightFromCallTableDTO' text: '#/components/schemas/CreateTextInsightFromCallTableDTO' responses: '201': description: '' content: application/json: schema: oneOf: - $ref: '#/components/schemas/BarInsight' - $ref: '#/components/schemas/PieInsight' - $ref: '#/components/schemas/LineInsight' - $ref: '#/components/schemas/TextInsight' discriminator: propertyName: type mapping: bar: '#/components/schemas/BarInsight' pie: '#/components/schemas/PieInsight' line: '#/components/schemas/LineInsight' text: '#/components/schemas/TextInsight' tags: - Insight security: - bearer: [] get: operationId: InsightController_findAll summary: Get Insights parameters: - name: id required: false in: query schema: type: string - name: page required: false in: query description: This is the page number to return. Defaults to 1. schema: minimum: 1 type: number - name: sortOrder required: false in: query description: This is the sort order for pagination. Defaults to 'DESC'. schema: enum: - ASC - DESC type: string - name: sortBy required: false in: query description: This is the column to sort by. Defaults to 'createdAt'. schema: enum: - createdAt - duration - cost type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/InsightPaginatedResponse' tags: - Insight security: - bearer: [] /reporting/insight/{id}: patch: operationId: InsightController_update summary: Update Insight parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/UpdateBarInsightFromCallTableDTO' title: UpdateBarInsightFromCallTableDTO - $ref: '#/components/schemas/UpdatePieInsightFromCallTableDTO' title: UpdatePieInsightFromCallTableDTO - $ref: '#/components/schemas/UpdateLineInsightFromCallTableDTO' title: UpdateLineInsightFromCallTableDTO - $ref: '#/components/schemas/UpdateTextInsightFromCallTableDTO' title: UpdateTextInsightFromCallTableDTO discriminator: propertyName: type mapping: bar: '#/components/schemas/UpdateBarInsightFromCallTableDTO' pie: '#/components/schemas/UpdatePieInsightFromCallTableDTO' line: '#/components/schemas/UpdateLineInsightFromCallTableDTO' text: '#/components/schemas/UpdateTextInsightFromCallTableDTO' responses: '200': description: '' content: application/json: schema: oneOf: - $ref: '#/components/schemas/BarInsight' - $ref: '#/components/schemas/PieInsight' - $ref: '#/components/schemas/LineInsight' - $ref: '#/components/schemas/TextInsight' discriminator: propertyName: type mapping: bar: '#/components/schemas/BarInsight' pie: '#/components/schemas/PieInsight' line: '#/components/schemas/LineInsight' text: '#/components/schemas/TextInsight' tags: - Insight security: - bearer: [] get: operationId: InsightController_findOne summary: Get Insight parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: oneOf: - $ref: '#/components/schemas/BarInsight' - $ref: '#/components/schemas/PieInsight' - $ref: '#/components/schemas/LineInsight' - $ref: '#/components/schemas/TextInsight' discriminator: propertyName: type mapping: bar: '#/components/schemas/BarInsight' pie: '#/components/schemas/PieInsight' line: '#/components/schemas/LineInsight' text: '#/components/schemas/TextInsight' tags: - Insight security: - bearer: [] delete: operationId: InsightController_remove summary: Delete Insight parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: oneOf: - $ref: '#/components/schemas/BarInsight' - $ref: '#/components/schemas/PieInsight' - $ref: '#/components/schemas/LineInsight' - $ref: '#/components/schemas/TextInsight' discriminator: propertyName: type mapping: bar: '#/components/schemas/BarInsight' pie: '#/components/schemas/PieInsight' line: '#/components/schemas/LineInsight' text: '#/components/schemas/TextInsight' tags: - Insight security: - bearer: [] /reporting/insight/{id}/run: post: operationId: InsightController_run summary: Run Insight parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/InsightRunDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/InsightRunResponse' '201': description: '' content: application/json: schema: $ref: '#/components/schemas/InsightRunResponse' tags: - Insight security: - bearer: [] /reporting/insight/preview: post: operationId: InsightController_preview summary: Preview Insight parameters: [] requestBody: required: true content: application/json: schema: oneOf: - $ref: '#/components/schemas/CreateBarInsightFromCallTableDTO' title: CreateBarInsightFromCallTableDTO - $ref: '#/components/schemas/CreatePieInsightFromCallTableDTO' title: CreatePieInsightFromCallTableDTO - $ref: '#/components/schemas/CreateLineInsightFromCallTableDTO' title: CreateLineInsightFromCallTableDTO - $ref: '#/components/schemas/CreateTextInsightFromCallTableDTO' title: CreateTextInsightFromCallTableDTO discriminator: propertyName: type mapping: bar: '#/components/schemas/CreateBarInsightFromCallTableDTO' pie: '#/components/schemas/CreatePieInsightFromCallTableDTO' line: '#/components/schemas/CreateLineInsightFromCallTableDTO' text: '#/components/schemas/CreateTextInsightFromCallTableDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/InsightRunResponse' '201': description: '' content: application/json: schema: $ref: '#/components/schemas/InsightRunResponse' tags: - Insight security: - bearer: [] /eval: post: operationId: EvalController_create summary: Create Eval parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateEvalDTO' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/Eval' tags: - Eval security: - bearer: [] get: operationId: EvalController_getPaginated summary: List Evals parameters: - name: id required: false in: query schema: type: string - name: page required: false in: query description: This is the page number to return. Defaults to 1. schema: minimum: 1 type: number - name: sortOrder required: false in: query description: This is the sort order for pagination. Defaults to 'DESC'. schema: enum: - ASC - DESC type: string - name: sortBy required: false in: query description: This is the column to sort by. Defaults to 'createdAt'. schema: enum: - createdAt - duration - cost type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/EvalPaginatedResponse' tags: - Eval security: - bearer: [] /eval/{id}: patch: operationId: EvalController_update summary: Update Eval parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateEvalDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Eval' tags: - Eval security: - bearer: [] delete: operationId: EvalController_remove summary: Delete Eval parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Eval' tags: - Eval security: - bearer: [] get: operationId: EvalController_get summary: Get Eval parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Eval' tags: - Eval security: - bearer: [] /eval/run/{id}: delete: operationId: EvalController_removeRun summary: Delete Eval Run parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/EvalRun' tags: - Eval security: - bearer: [] get: operationId: EvalController_getRun summary: Get Eval Run parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/EvalRun' tags: - Eval security: - bearer: [] /eval/run: post: operationId: EvalController_run summary: Create Eval Run parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateEvalRunDTO' responses: '200': description: '' '201': description: '' content: application/json: schema: type: object tags: - Eval security: - bearer: [] get: operationId: EvalController_getRunsPaginated summary: List Eval Runs parameters: - name: id required: false in: query schema: type: string - name: page required: false in: query description: This is the page number to return. Defaults to 1. schema: minimum: 1 type: number - name: sortOrder required: false in: query description: This is the sort order for pagination. Defaults to 'DESC'. schema: enum: - ASC - DESC type: string - name: sortBy required: false in: query description: This is the column to sort by. Defaults to 'createdAt'. schema: enum: - createdAt - duration - cost type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/EvalRunPaginatedResponse' tags: - Eval security: - bearer: [] /observability/scorecard/{id}: get: operationId: ScorecardController_get summary: Get Scorecard parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Scorecard' tags: - Observability/Scorecard security: - bearer: [] patch: operationId: ScorecardController_update summary: Update Scorecard parameters: - name: id required: true in: path schema: type: string requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateScorecardDTO' responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Scorecard' tags: - Observability/Scorecard security: - bearer: [] delete: operationId: ScorecardController_remove summary: Delete Scorecard parameters: - name: id required: true in: path schema: type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/Scorecard' tags: - Observability/Scorecard security: - bearer: [] /observability/scorecard: get: operationId: ScorecardController_getPaginated summary: List Scorecards parameters: - name: id required: false in: query schema: type: string - name: page required: false in: query description: This is the page number to return. Defaults to 1. schema: minimum: 1 type: number - name: sortOrder required: false in: query description: This is the sort order for pagination. Defaults to 'DESC'. schema: enum: - ASC - DESC type: string - name: sortBy required: false in: query description: This is the column to sort by. Defaults to 'createdAt'. schema: enum: - createdAt - duration - cost type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/ScorecardPaginatedResponse' tags: - Observability/Scorecard security: - bearer: [] post: operationId: ScorecardController_create summary: Create Scorecard parameters: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateScorecardDTO' responses: '201': description: '' content: application/json: schema: $ref: '#/components/schemas/Scorecard' tags: - Observability/Scorecard security: - bearer: [] /provider/{provider}/{resourceName}: post: operationId: ProviderResourceController_createProviderResource summary: Create Provider Resource parameters: - name: content-type required: true in: header schema: type: string - name: provider required: true in: path description: The provider (e.g., 11labs) schema: enum: - cartesia - 11labs type: string - name: resourceName required: true in: path description: The resource name (e.g., pronunciation-dictionary) schema: enum: - pronunciation-dictionary type: string responses: '201': description: Successfully created provider resource content: application/json: schema: $ref: '#/components/schemas/ProviderResource' tags: - Provider Resources security: - bearer: [] get: operationId: ProviderResourceController_getProviderResourcesPaginated summary: List Provider Resources parameters: - name: provider required: true in: path description: The provider (e.g., 11labs) schema: enum: - cartesia - 11labs type: string - name: resourceName required: true in: path description: The resource name (e.g., pronunciation-dictionary) schema: enum: - pronunciation-dictionary type: string - name: id required: false in: query schema: type: string - name: resourceId required: false in: query schema: type: string - name: page required: false in: query description: This is the page number to return. Defaults to 1. schema: minimum: 1 type: number - name: sortOrder required: false in: query description: This is the sort order for pagination. Defaults to 'DESC'. schema: enum: - ASC - DESC type: string - name: sortBy required: false in: query description: This is the column to sort by. Defaults to 'createdAt'. schema: enum: - createdAt - duration - cost type: string - name: limit required: false in: query description: This is the maximum number of items to return. Defaults to 100. schema: minimum: 0 maximum: 1000 type: number - name: createdAtGt required: false in: query description: This will return items where the createdAt is greater than the specified value. schema: format: date-time type: string - name: createdAtLt required: false in: query description: This will return items where the createdAt is less than the specified value. schema: format: date-time type: string - name: createdAtGe required: false in: query description: This will return items where the createdAt is greater than or equal to the specified value. schema: format: date-time type: string - name: createdAtLe required: false in: query description: This will return items where the createdAt is less than or equal to the specified value. schema: format: date-time type: string - name: updatedAtGt required: false in: query description: This will return items where the updatedAt is greater than the specified value. schema: format: date-time type: string - name: updatedAtLt required: false in: query description: This will return items where the updatedAt is less than the specified value. schema: format: date-time type: string - name: updatedAtGe required: false in: query description: This will return items where the updatedAt is greater than or equal to the specified value. schema: format: date-time type: string - name: updatedAtLe required: false in: query description: This will return items where the updatedAt is less than or equal to the specified value. schema: format: date-time type: string responses: '200': description: List of provider resources content: application/json: schema: $ref: '#/components/schemas/ProviderResourcePaginatedResponse' tags: - Provider Resources security: - bearer: [] /provider/{provider}/{resourceName}/{id}: get: operationId: ProviderResourceController_getProviderResource summary: Get Provider Resource parameters: - name: provider required: true in: path description: The provider (e.g., 11labs) schema: enum: - cartesia - 11labs type: string - name: resourceName required: true in: path description: The resource name (e.g., pronunciation-dictionary) schema: enum: - pronunciation-dictionary type: string - name: id required: true in: path schema: format: uuid type: string responses: '200': description: Successfully retrieved provider resource content: application/json: schema: $ref: '#/components/schemas/ProviderResource' '404': description: Provider resource not found tags: - Provider Resources security: - bearer: [] delete: operationId: ProviderResourceController_deleteProviderResource summary: Delete Provider Resource parameters: - name: provider required: true in: path description: The provider (e.g., 11labs) schema: enum: - cartesia - 11labs type: string - name: resourceName required: true in: path description: The resource name (e.g., pronunciation-dictionary) schema: enum: - pronunciation-dictionary type: string - name: id required: true in: path schema: format: uuid type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/ProviderResource' '404': description: Provider resource not found tags: - Provider Resources security: - bearer: [] patch: operationId: ProviderResourceController_updateProviderResource summary: Update Provider Resource parameters: - name: provider required: true in: path description: The provider (e.g., 11labs) schema: enum: - cartesia - 11labs type: string - name: resourceName required: true in: path description: The resource name (e.g., pronunciation-dictionary) schema: enum: - pronunciation-dictionary type: string - name: id required: true in: path schema: format: uuid type: string responses: '200': description: '' content: application/json: schema: $ref: '#/components/schemas/ProviderResource' '404': description: Provider resource not found tags: - Provider Resources 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: - Analytics security: - bearer: [] info: title: Vapi API description: Voice AI for developers. version: '1.0' contact: {} tags: [] servers: - url: https://api.vapi.ai components: securitySchemes: bearer: scheme: bearer bearerFormat: Bearer type: http description: Retrieve your API Key from [Dashboard](dashboard.vapi.ai). schemas: FallbackTranscriberPlan: type: object properties: transcribers: type: array items: oneOf: - $ref: '#/components/schemas/FallbackAssemblyAITranscriber' title: AssemblyAI - $ref: '#/components/schemas/FallbackAzureSpeechTranscriber' title: Azure - $ref: '#/components/schemas/FallbackCustomTranscriber' title: Custom - $ref: '#/components/schemas/FallbackDeepgramTranscriber' title: Deepgram - $ref: '#/components/schemas/FallbackElevenLabsTranscriber' title: ElevenLabs - $ref: '#/components/schemas/FallbackGladiaTranscriber' title: Gladia - $ref: '#/components/schemas/FallbackGoogleTranscriber' title: Google - $ref: '#/components/schemas/FallbackTalkscriberTranscriber' title: Talkscriber - $ref: '#/components/schemas/FallbackSpeechmaticsTranscriber' title: Speechmatics - $ref: '#/components/schemas/FallbackOpenAITranscriber' title: OpenAI - $ref: '#/components/schemas/FallbackCartesiaTranscriber' title: Cartesia - $ref: '#/components/schemas/FallbackSonioxTranscriber' title: Soniox 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: - multi - en confidenceThreshold: type: number description: 'Transcripts below this confidence threshold will be discarded. @default 0.4' minimum: 0 maximum: 1 example: 0.4 formatTurns: type: boolean description: 'This enables formatting of transcripts. @default true' example: true endOfTurnConfidenceThreshold: type: number description: 'This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @min 0 @max 1 @default 0.7' minimum: 0 maximum: 1 example: 0.7 minEndOfTurnSilenceWhenConfident: type: number description: 'This is the minimum end of turn silence when confident in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 160' minimum: 0 example: 160 wordFinalizationMaxWaitTime: type: number deprecated: true minimum: 0 example: 160 maxTurnSilence: type: number description: 'This is the maximum turn silence time in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 400' minimum: 0 example: 400 vadAssistedEndpointingEnabled: type: boolean description: 'Use VAD to assist with endpointing decisions from the transcriber. When enabled, transcriber endpointing will be buffered if VAD detects the user is still speaking, preventing premature turn-taking. When disabled, transcriber endpointing will be used immediately regardless of VAD state, allowing for quicker but more aggressive turn-taking. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default true' example: true speechModel: type: string description: 'This is the speech model used for the streaming session. Note: Keyterms prompting is not supported with multilingual streaming. @default ''universal-streaming-english''' enum: - universal-streaming-english - universal-streaming-multilingual 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 keytermsPrompt: description: 'Keyterms prompting improves recognition accuracy for specific words and phrases. Can include up to 100 keyterms, each up to 50 characters. Costs an additional $0.04/hour when enabled.' type: array items: type: string maxLength: 50 endUtteranceSilenceThreshold: type: number description: The duration of the end utterance silence threshold in milliseconds. disablePartialTranscripts: type: boolean description: 'Disable partial transcripts. Set to `true` to not receive partial transcripts. Defaults to `false`.' fallbackPlan: description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber 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 segmentationStrategy: type: string description: Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation. enum: - Default - Time - Semantic segmentationSilenceTimeoutMs: type: number description: Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech. minimum: 100 maximum: 5000 segmentationMaximumTimeMs: type: number description: Maximum duration a segment can reach before being cut off when using time-based segmentation. minimum: 20000 maximum: 70000 fallbackPlan: description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. allOf: - $ref: '#/components/schemas/FallbackTranscriberPlan' required: - provider CartesiaTranscriber: type: object properties: provider: type: string enum: - cartesia model: type: string enum: - ink-whisper language: type: string enum: - aa - ab - ae - af - ak - am - an - ar - as - av - ay - az - ba - be - bg - bh - bi - bm - bn - bo - br - bs - ca - ce - ch - co - cr - cs - cu - cv - cy - da - de - dv - dz - ee - el - en - eo - es - et - eu - fa - ff - fi - fj - fo - fr - fy - ga - gd - gl - gn - gu - gv - ha - he - hi - ho - hr - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - io - is - it - iu - ja - jv - 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 transcriber provider fallbacks in the event that the primary transcriber provider fails. allOf: - $ref: '#/components/schemas/FallbackTranscriberPlan' required: - provider BackoffPlan: type: object properties: type: type: object description: 'This is the type of backoff plan to use. Defaults to fixed. @default fixed' enum: - fixed - exponential example: fixed maxRetries: type: number description: 'This is the maximum number of retries to attempt if the request fails. Defaults to 0 (no retries). @default 0' minimum: 0 maximum: 10 example: 0 baseDelaySeconds: type: number description: This is the base delay in seconds. For linear backoff, this is the delay between each retry. For exponential backoff, this is the initial delay. minimum: 0 maximum: 10 example: 1 excludedStatusCodes: description: 'This is the excluded status codes. If the response status code is in this list, the request will not be retried. By default, the request will be retried for any non-2xx status code.' example: - 400 - 401 - 403 - 404 type: array items: type: object required: - type - maxRetries - baseDelaySeconds Server: type: object properties: timeoutSeconds: type: number description: 'This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20' minimum: 1 maximum: 300 example: 20 credentialId: type: string description: The credential ID for server authentication example: 550e8400-e29b-41d4-a716-446655440000 staticIpAddressesEnabled: type: boolean description: 'If enabled, requests will originate from a static set of IPs owned and managed by Vapi. @default false' example: false encryptedPaths: type: array description: This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. items: type: string url: type: string description: This is where the request will be sent. headers: type: object description: 'These are the headers to include in the request. Each key-value pair represents a header name and its value. Note: Specifying an Authorization header here will override the authorization provided by the `credentialId` (if provided). This is an anti-pattern and should be avoided outside of edge case scenarios.' backoffPlan: description: 'This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried). @default undefined (the request will not be retried)' allOf: - $ref: '#/components/schemas/BackoffPlan' CustomTranscriber: type: object properties: provider: type: string description: This is the transcription provider that will be used. 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\n\ Usage:\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 transcriber provider fallbacks in the event that the primary transcriber 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-3-medical - nova-2 - nova-2-general - nova-2-meeting - nova-2-phonecall - nova-2-finance - nova-2-conversationalai - nova-2-voicemail - nova-2-video - nova-2-medical - nova-2-drivethru - nova-2-automotive - nova - nova-general - nova-phonecall - nova-medical - enhanced - enhanced-general - enhanced-meeting - enhanced-phonecall - enhanced-finance - base - base-general - base-meeting - base-phonecall - base-finance - base-conversationalai - base-voicemail - base-video - whisper - flux-general-en - flux-general-multi - 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: - ar - az - ba - be - bg - bn - br - bs - ca - cs - da - da-DK - de - de-CH - el - en - en-AU - en-CA - en-GB - en-IE - en-IN - en-NZ - en-US - es - es-419 - es-LATAM - et - eu - fa - fi - fr - fr-CA - ha - haw - he - hi - hi-Latn - hr - hu - id - is - it - ja - jw - kn - ko - ko-KR - ln - lt - lv - mk - mr - ms - multi - nl - nl-BE - 'no' - pl - pt - pt-BR - pt-PT - ro - ru - sk - sl - sn - so - sr - su - sv - sv-SE - ta - taq - te - th - th-TH - tl - tr - tt - uk - ur - vi - yo - 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 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 This will only be used if you are using your own Deepgram API key. @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..." @default false' example: false profanityFilter: type: boolean description: 'If set to true, Deepgram will replace profanity in transcripts with surrounding asterisks, e.g. "f***". @default false' example: false redaction: type: array description: 'Enables redaction of sensitive information from transcripts. Options include: - "pci": Redacts credit card numbers, expiration dates, and CVV. - "pii": Redacts personally identifiable information (names, locations, identifying numbers, etc.). - "phi": Redacts protected health information (medical conditions, drugs, injuries, etc.). - "numbers": Redacts numerical and identifying entities (dates, account numbers, SSNs, etc.). Multiple values can be provided to redact different categories simultaneously. Redacted content is replaced with entity labels like [CREDIT_CARD_1], [SSN_1], etc. See https://developers.deepgram.com/docs/redaction for details.' enum: - pci - pii - phi - numbers example: - pci - phi items: type: string enum: - pci - pii - phi - numbers confidenceThreshold: type: number description: 'Transcripts below this confidence threshold will be discarded. @default 0.4' minimum: 0 maximum: 1 example: 0.4 eotThreshold: type: number description: 'End-of-turn confidence required to finish a turn. Only used with Flux models. @default 0.7' minimum: 0.5 maximum: 0.9 example: 0.7 eotTimeoutMs: type: number description: 'A turn will be finished when this much time has passed after speech, regardless of EOT confidence. Only used with Flux models. @default 5000' minimum: 500 maximum: 10000 example: 5000 languages: description: 'Language hints to bias Flux Multilingual (`flux-general-multi`) toward specific languages. Provide BCP-47 language codes (e.g. "en", "es", "fr"). Multiple hints can be given for multilingual or code-switching scenarios. Omit for auto-detection. Only used with `flux-general-multi`.' example: - en - es type: array items: type: string 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. Here are the most important bits: - Defaults to 10. This is recommended for most use cases to optimize for latency. - 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. - If neither 10 nor 300 work, contact support@vapi.ai and we''ll find another solution. @default 10' minimum: 10 maximum: 500 fallbackPlan: description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber 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: description: This is the model that will be used for the transcription. oneOf: - enum: - scribe_v1 - scribe_v2 - scribe_v2_realtime language: type: string description: This is the language that will be used for the transcription. 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 silenceThresholdSeconds: type: number description: This is the number of seconds of silence before VAD commits (0.3-3.0). minimum: 0.3 maximum: 3 example: 1.5 confidenceThreshold: type: number description: This is the VAD sensitivity (0.1-0.9, lower indicates more sensitive). minimum: 0.1 maximum: 0.9 example: 0.4 minSpeechDurationMs: type: number description: This is the minimum speech duration for VAD (50-2000ms). minimum: 50 maximum: 2000 example: 100 minSilenceDurationMs: type: number description: This is the minimum silence duration for VAD (50-2000ms). minimum: 50 maximum: 2000 example: 100 fallbackPlan: description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. allOf: - $ref: '#/components/schemas/FallbackTranscriberPlan' required: - provider GladiaCustomVocabularyConfigDTO: type: object properties: vocabulary: type: array description: Array of vocabulary items (strings or objects with value, pronunciations, intensity, language) items: oneOf: - type: string - $ref: '#/components/schemas/GladiaVocabularyItemDTO' defaultIntensity: type: number minimum: 0 maximum: 1 description: Default intensity for vocabulary items (0.0 to 1.0) default: 0.5 required: - vocabulary 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 - solaria-1 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 languages: type: string description: Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'. enum: - af - sq - am - ar - hy - as - az - ba - eu - be - bn - bs - br - bg - ca - zh - hr - cs - da - nl - en - et - fo - fi - fr - gl - ka - de - el - gu - ht - ha - haw - he - hi - hu - is - id - it - ja - jv - kn - kk - km - ko - lo - la - lv - ln - lt - lb - mk - mg - ms - ml - mt - mi - mr - mn - my - ne - 'no' - nn - oc - ps - fa - pl - pt - pa - ro - ru - sa - sr - sn - sd - si - sk - sl - so - es - su - sw - sv - tl - tg - ta - tt - te - th - bo - tr - tk - uk - ur - uz - vi - cy - yi - yo 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\u26A0\uFE0F Warning \u26A0\uFE0F\ : 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)\u2026\ \ 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 confidenceThreshold: type: number description: 'Transcripts below this confidence threshold will be discarded. @default 0.4' minimum: 0 maximum: 1 example: 0.4 endpointing: type: number minimum: 0.01 maximum: 10 example: 0.05 description: Endpointing time in seconds - time to wait before considering speech ended speechThreshold: type: number minimum: 0 maximum: 1 example: 0.6 description: Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0) customVocabularyEnabled: type: boolean example: false description: Enable custom vocabulary for improved accuracy customVocabularyConfig: description: Custom vocabulary configuration allOf: - $ref: '#/components/schemas/GladiaCustomVocabularyConfigDTO' region: type: string enum: - us-west - eu-west description: Region for processing audio (us-west or eu-west) example: us-west receivePartialTranscripts: type: boolean example: false description: Enable partial transcripts for low-latency streaming transcription fallbackPlan: description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. allOf: - $ref: '#/components/schemas/FallbackTranscriberPlan' required: - provider SonioxContextGeneralItem: type: object properties: key: type: string description: The key describing the type of context (e.g., "domain", "topic", "doctor", "organization"). minLength: 1 example: domain value: type: string description: The value for the context key (e.g., "Healthcare", "Diabetes management consultation"). minLength: 1 example: Healthcare required: - key - value SonioxTranscriber: type: object properties: provider: type: string enum: - soniox model: type: string enum: - stt-rt-v4 description: The Soniox model to use for transcription. 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 description: "Single language for transcription as an ISO 639-1 code (e.g.,\ \ `en`, `es`). For multi-language hints or to enable Soniox auto-detect,\ \ use `languages` instead \u2014 when `languages` is set (including to\ \ an empty array), this field is ignored when building the Soniox request.\ \ Defaults to `en` if neither this nor `languages` is set." languages: 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 description: Language hints sent to Soniox as `language_hints`. Provide `[lang1, lang2, ...]` (ISO 639-1 codes) to bias recognition toward specific languages, or provide an explicit empty array `[]` to enable Soniox auto-detect across all 60+ supported languages. When set (including the empty array), this field takes precedence over the singular `language` field. When omitted, falls back to the singular `language` (which defaults to `en` if also unset). Best accuracy is achieved with a single language. languageHintsStrict: type: boolean description: 'When `true`, Soniox strictly restricts transcription to the languages in `languages` (or the singular `language` if `languages` is unset). When `false`, Soniox biases toward those languages but still allows transcription in other languages. Has no effect when no language hints are sent (e.g., `languages: []` for auto-detect). Defaults to `true` (strict mode).' maxEndpointDelayMs: type: number minimum: 500 maximum: 3000 description: 'Maximum delay in milliseconds between when the speaker stops and when the endpoint is detected. Lower values mean faster turn-taking but more false endpoints. Range: 500-3000. Default: 500.' customVocabulary: description: Custom vocabulary terms to boost recognition accuracy. Useful for brand names, product names, and domain-specific terminology. Maps to Soniox context.terms. type: array items: type: string contextGeneral: description: 'General context key-value pairs that guide the AI model during transcription. Helps adapt vocabulary to the correct domain, improving accuracy. Recommended: 10 or fewer pairs. Maps to Soniox context.general.' example: - key: domain value: Healthcare - key: topic value: Diabetes management consultation type: array items: $ref: '#/components/schemas/SonioxContextGeneralItem' fallbackPlan: description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. allOf: - $ref: '#/components/schemas/FallbackTranscriberPlan' required: - provider SpeechmaticsCustomVocabularyItem: type: object properties: content: type: string description: The word or phrase to add to the custom vocabulary. minLength: 1 example: Speechmatics soundsLike: description: Alternative phonetic representations of how the word might sound. This helps recognition when the word might be pronounced differently. example: - speech mattix type: array items: type: string required: - content 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 - ar_en - 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 - en_ms - mt - cmn - cmn_en - mr - mn - 'no' - fa - pl - pt - ro - ru - sk - sl - es - en_es - sw - sv - tl - ta - en_ta - th - tr - uk - ur - ug - vi - cy operatingPoint: type: string description: 'This is the operating point for the transcription. Choose between `standard` for faster turnaround with strong accuracy or `enhanced` for highest accuracy when precision is critical. @default ''enhanced''' example: enhanced enum: - standard - enhanced default: enhanced region: type: string description: 'This is the region for the Speechmatics API. Choose between EU (Europe) and US (United States) regions for lower latency and data sovereignty compliance. @default ''eu''' example: us enum: - eu - us default: eu enableDiarization: type: boolean description: 'This enables speaker diarization, which identifies and separates speakers in the transcription. Essential for multi-speaker conversations and conference calls. @default false' example: true default: false maxDelay: type: number description: 'This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. @default 3000' example: 1500 minimum: 500 maximum: 10000 default: 3000 customVocabulary: example: - content: Speechmatics soundsLike: - speech mattix type: array items: $ref: '#/components/schemas/SpeechmaticsCustomVocabularyItem' numeralStyle: type: string description: 'This controls how numbers, dates, currencies, and other entities are formatted in the transcription output. @default ''written''' example: spoken enum: - written - spoken default: written endOfTurnSensitivity: type: number description: 'This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. @default 0.5' example: 0.8 minimum: 0 maximum: 1 default: 0.5 removeDisfluencies: type: boolean description: 'This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional output. This is only supported for the English language transcriber. @default false' example: true default: false minimumSpeechDuration: type: number description: 'This is the minimum duration in seconds for speech segments. Shorter segments will be filtered out. Helps remove noise and improve accuracy. @default 0.0' example: 0.2 minimum: 0 maximum: 5 default: 0 fallbackPlan: description: This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails. allOf: - $ref: '#/components/schemas/FallbackTranscriberPlan' required: - provider - customVocabulary 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 transcriber provider fallbacks in the event that the primary transcriber 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-3-flash-preview - gemini-2.5-pro - gemini-2.5-flash - gemini-2.5-flash-lite - gemini-2.0-flash-thinking-exp - gemini-2.0-pro-exp-02-05 - gemini-2.0-flash - gemini-2.0-flash-lite - gemini-2.0-flash-exp - gemini-2.0-flash-realtime-exp - gemini-1.5-flash - gemini-1.5-flash-002 - gemini-1.5-pro - gemini-1.5-pro-002 - gemini-1.0-pro 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 transcriber provider fallbacks in the event that the primary transcriber 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 transcriber provider fallbacks in the event that the primary transcriber 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: - multi - en confidenceThreshold: type: number description: 'Transcripts below this confidence threshold will be discarded. @default 0.4' minimum: 0 maximum: 1 example: 0.4 formatTurns: type: boolean description: 'This enables formatting of transcripts. @default true' example: true endOfTurnConfidenceThreshold: type: number description: 'This is the end of turn confidence threshold. The minimum confidence that the end of turn is detected. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @min 0 @max 1 @default 0.7' minimum: 0 maximum: 1 example: 0.7 minEndOfTurnSilenceWhenConfident: type: number description: 'This is the minimum end of turn silence when confident in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 160' minimum: 0 example: 160 wordFinalizationMaxWaitTime: type: number deprecated: true minimum: 0 example: 160 maxTurnSilence: type: number description: 'This is the maximum turn silence time in milliseconds. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default 400' minimum: 0 example: 400 vadAssistedEndpointingEnabled: type: boolean description: 'Use VAD to assist with endpointing decisions from the transcriber. When enabled, transcriber endpointing will be buffered if VAD detects the user is still speaking, preventing premature turn-taking. When disabled, transcriber endpointing will be used immediately regardless of VAD state, allowing for quicker but more aggressive turn-taking. Note: Only used if startSpeakingPlan.smartEndpointingPlan is not set. @default true' example: true speechModel: type: string description: 'This is the speech model used for the streaming session. Note: Keyterms prompting is not supported with multilingual streaming. @default ''universal-streaming-english''' enum: - universal-streaming-english - universal-streaming-multilingual 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 keytermsPrompt: description: 'Keyterms prompting improves recognition accuracy for specific words and phrases. Can include up to 100 keyterms, each up to 50 characters. Costs an additional $0.04/hour when enabled.' type: array items: type: string maxLength: 50 endUtteranceSilenceThreshold: type: number description: The duration of the end utterance silence threshold in milliseconds. disablePartialTranscripts: type: boolean description: 'Disable partial transcripts. Set 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 segmentationStrategy: type: string description: Controls how phrase boundaries are detected, enabling either simple time/silence heuristics or more advanced semantic segmentation. enum: - Default - Time - Semantic segmentationSilenceTimeoutMs: type: number description: Duration of detected silence after which the service finalizes a phrase. Configure to adjust sensitivity to pauses in speech. minimum: 100 maximum: 5000 segmentationMaximumTimeMs: type: number description: Maximum duration a segment can reach before being cut off when using time-based segmentation. minimum: 20000 maximum: 70000 required: - provider FallbackCartesiaTranscriber: type: object properties: provider: type: string enum: - cartesia model: type: string enum: - ink-whisper language: type: string enum: - aa - ab - ae - af - ak - am - an - ar - as - av - ay - az - ba - be - bg - bh - bi - bm - bn - bo - br - bs - ca - ce - ch - co - cr - cs - cu - cv - cy - da - de - dv - dz - ee - el - en - eo - es - et - eu - fa - ff - fi - fj - fo - fr - fy - ga - gd - gl - gn - gu - gv - ha - he - hi - ho - hr - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - io - is - it - iu - ja - jv - 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 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\n\ Usage:\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-3-medical - nova-2 - nova-2-general - nova-2-meeting - nova-2-phonecall - nova-2-finance - nova-2-conversationalai - nova-2-voicemail - nova-2-video - nova-2-medical - nova-2-drivethru - nova-2-automotive - nova - nova-general - nova-phonecall - nova-medical - enhanced - enhanced-general - enhanced-meeting - enhanced-phonecall - enhanced-finance - base - base-general - base-meeting - base-phonecall - base-finance - base-conversationalai - base-voicemail - base-video - whisper - flux-general-en - flux-general-multi - 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: - ar - az - ba - be - bg - bn - br - bs - ca - cs - da - da-DK - de - de-CH - el - en - en-AU - en-CA - en-GB - en-IE - en-IN - en-NZ - en-US - es - es-419 - es-LATAM - et - eu - fa - fi - fr - fr-CA - ha - haw - he - hi - hi-Latn - hr - hu - id - is - it - ja - jw - kn - ko - ko-KR - ln - lt - lv - mk - mr - ms - multi - nl - nl-BE - 'no' - pl - pt - pt-BR - pt-PT - ro - ru - sk - sl - sn - so - sr - su - sv - sv-SE - ta - taq - te - th - th-TH - tl - tr - tt - uk - ur - vi - yo - 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 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 This will only be used if you are using your own Deepgram API key. @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..." @default false' example: false profanityFilter: type: boolean description: 'If set to true, Deepgram will replace profanity in transcripts with surrounding asterisks, e.g. "f***". @default false' example: false redaction: type: array description: 'Enables redaction of sensitive information from transcripts. Options include: - "pci": Redacts credit card numbers, expiration dates, and CVV. - "pii": Redacts personally identifiable information (names, locations, identifying numbers, etc.). - "phi": Redacts protected health information (medical conditions, drugs, injuries, etc.). - "numbers": Redacts numerical and identifying entities (dates, account numbers, SSNs, etc.). Multiple values can be provided to redact different categories simultaneously. Redacted content is replaced with entity labels like [CREDIT_CARD_1], [SSN_1], etc. See https://developers.deepgram.com/docs/redaction for details.' enum: - pci - pii - phi - numbers example: - pci - phi items: type: string enum: - pci - pii - phi - numbers confidenceThreshold: type: number description: 'Transcripts below this confidence threshold will be discarded. @default 0.4' minimum: 0 maximum: 1 example: 0.4 eotThreshold: type: number description: 'End-of-turn confidence required to finish a turn. Only used with Flux models. @default 0.7' minimum: 0.5 maximum: 0.9 example: 0.7 eotTimeoutMs: type: number description: 'A turn will be finished when this much time has passed after speech, regardless of EOT confidence. Only used with Flux models. @default 5000' minimum: 500 maximum: 10000 example: 5000 languages: description: 'Language hints to bias Flux Multilingual (`flux-general-multi`) toward specific languages. Provide BCP-47 language codes (e.g. "en", "es", "fr"). Multiple hints can be given for multilingual or code-switching scenarios. Omit for auto-detection. Only used with `flux-general-multi`.' example: - en - es type: array items: type: string 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. Here are the most important bits: - Defaults to 10. This is recommended for most use cases to optimize for latency. - 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. - If neither 10 nor 300 work, contact support@vapi.ai and we''ll find another solution. @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: description: This is the model that will be used for the transcription. oneOf: - enum: - scribe_v1 - scribe_v2 - scribe_v2_realtime language: type: string description: This is the language that will be used for the transcription. 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 silenceThresholdSeconds: type: number description: This is the number of seconds of silence before VAD commits (0.3-3.0). minimum: 0.3 maximum: 3 example: 1.5 confidenceThreshold: type: number description: This is the VAD sensitivity (0.1-0.9, lower indicates more sensitive). minimum: 0.1 maximum: 0.9 example: 0.4 minSpeechDurationMs: type: number description: This is the minimum speech duration for VAD (50-2000ms). minimum: 50 maximum: 2000 example: 100 minSilenceDurationMs: type: number description: This is the minimum silence duration for VAD (50-2000ms). minimum: 50 maximum: 2000 example: 100 required: - provider GladiaVocabularyItemDTO: type: object properties: value: type: string description: The vocabulary word or phrase pronunciations: description: Alternative pronunciations for the vocabulary item type: array items: type: string intensity: type: number minimum: 0 maximum: 1 description: Intensity for this specific vocabulary item (0.0 to 1.0) language: type: string description: Language code for this vocabulary item (ISO 639-1) required: - value 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 - solaria-1 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 languages: type: string description: Defines the languages to use for the transcription. Required when languageBehaviour is 'manual'. enum: - af - sq - am - ar - hy - as - az - ba - eu - be - bn - bs - br - bg - ca - zh - hr - cs - da - nl - en - et - fo - fi - fr - gl - ka - de - el - gu - ht - ha - haw - he - hi - hu - is - id - it - ja - jv - kn - kk - km - ko - lo - la - lv - ln - lt - lb - mk - mg - ms - ml - mt - mi - mr - mn - my - ne - 'no' - nn - oc - ps - fa - pl - pt - pa - ro - ru - sa - sr - sn - sd - si - sk - sl - so - es - su - sw - sv - tl - tg - ta - tt - te - th - bo - tr - tk - uk - ur - uz - vi - cy - yi - yo 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\u26A0\uFE0F Warning \u26A0\uFE0F\ : 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)\u2026\ \ 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 confidenceThreshold: type: number description: 'Transcripts below this confidence threshold will be discarded. @default 0.4' minimum: 0 maximum: 1 example: 0.4 endpointing: type: number minimum: 0.01 maximum: 10 example: 0.05 description: Endpointing time in seconds - time to wait before considering speech ended speechThreshold: type: number minimum: 0 maximum: 1 example: 0.6 description: Speech threshold - sensitivity configuration for speech detection (0.0 to 1.0) customVocabularyEnabled: type: boolean example: false description: Enable custom vocabulary for improved accuracy customVocabularyConfig: description: Custom vocabulary configuration allOf: - $ref: '#/components/schemas/GladiaCustomVocabularyConfigDTO' region: type: string enum: - us-west - eu-west description: Region for processing audio (us-west or eu-west) example: us-west receivePartialTranscripts: type: boolean example: false description: Enable partial transcripts for low-latency streaming transcription required: - provider FallbackSonioxTranscriber: type: object properties: provider: type: string enum: - soniox model: type: string enum: - stt-rt-v4 description: The Soniox model to use for transcription. 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 description: "Single language for transcription as an ISO 639-1 code (e.g.,\ \ `en`, `es`). For multi-language hints or to enable Soniox auto-detect,\ \ use `languages` instead \u2014 when `languages` is set (including to\ \ an empty array), this field is ignored when building the Soniox request.\ \ Defaults to `en` if neither this nor `languages` is set." languages: 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 description: Language hints sent to Soniox as `language_hints`. Provide `[lang1, lang2, ...]` (ISO 639-1 codes) to bias recognition toward specific languages, or provide an explicit empty array `[]` to enable Soniox auto-detect across all 60+ supported languages. When set (including the empty array), this field takes precedence over the singular `language` field. When omitted, falls back to the singular `language` (which defaults to `en` if also unset). Best accuracy is achieved with a single language. languageHintsStrict: type: boolean description: 'When `true`, Soniox strictly restricts transcription to the languages in `languages` (or the singular `language` if `languages` is unset). When `false`, Soniox biases toward those languages but still allows transcription in other languages. Has no effect when no language hints are sent (e.g., `languages: []` for auto-detect). Defaults to `true` (strict mode).' maxEndpointDelayMs: type: number minimum: 500 maximum: 3000 description: 'Maximum delay in milliseconds between when the speaker stops and when the endpoint is detected. Lower values mean faster turn-taking but more false endpoints. Range: 500-3000. Default: 500.' customVocabulary: description: Custom vocabulary terms to boost recognition accuracy. Useful for brand names, product names, and domain-specific terminology. Maps to Soniox context.terms. type: array items: type: string contextGeneral: description: 'General context key-value pairs that guide the AI model during transcription. Helps adapt vocabulary to the correct domain, improving accuracy. Recommended: 10 or fewer pairs. Maps to Soniox context.general.' example: - key: domain value: Healthcare - key: topic value: Diabetes management consultation type: array items: $ref: '#/components/schemas/SonioxContextGeneralItem' 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 - ar_en - 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 - en_ms - mt - cmn - cmn_en - mr - mn - 'no' - fa - pl - pt - ro - ru - sk - sl - es - en_es - sw - sv - tl - ta - en_ta - th - tr - uk - ur - ug - vi - cy operatingPoint: type: string description: 'This is the operating point for the transcription. Choose between `standard` for faster turnaround with strong accuracy or `enhanced` for highest accuracy when precision is critical. @default ''enhanced''' example: enhanced enum: - standard - enhanced default: enhanced region: type: string description: 'This is the region for the Speechmatics API. Choose between EU (Europe) and US (United States) regions for lower latency and data sovereignty compliance. @default ''eu''' example: us enum: - eu - us default: eu enableDiarization: type: boolean description: 'This enables speaker diarization, which identifies and separates speakers in the transcription. Essential for multi-speaker conversations and conference calls. @default false' example: true default: false maxDelay: type: number description: 'This sets the maximum delay in milliseconds for partial transcripts. Balances latency and accuracy. @default 3000' example: 1500 minimum: 500 maximum: 10000 default: 3000 customVocabulary: example: - content: Speechmatics soundsLike: - speech mattix type: array items: $ref: '#/components/schemas/SpeechmaticsCustomVocabularyItem' numeralStyle: type: string description: 'This controls how numbers, dates, currencies, and other entities are formatted in the transcription output. @default ''written''' example: spoken enum: - written - spoken default: written endOfTurnSensitivity: type: number description: 'This is the sensitivity level for end-of-turn detection, which determines when a speaker has finished talking. Higher values are more sensitive. @default 0.5' example: 0.8 minimum: 0 maximum: 1 default: 0.5 removeDisfluencies: type: boolean description: 'This enables removal of disfluencies (um, uh) from the transcript to create cleaner, more professional output. This is only supported for the English language transcriber. @default false' example: true default: false minimumSpeechDuration: type: number description: 'This is the minimum duration in seconds for speech segments. Shorter segments will be filtered out. Helps remove noise and improve accuracy. @default 0.0' example: 0.2 minimum: 0 maximum: 5 default: 0 required: - provider - customVocabulary FallbackTalkscriberTranscriber: type: object properties: provider: type: string description: This is the transcription provider that will be used. enum: - talkscriber model: type: string description: This is the model that will be used for the transcription. enum: - whisper language: type: string description: 'This is the language that will be set for the transcription. The list of languages Whisper supports can be found here: https://github.com/openai/whisper/blob/main/whisper/tokenizer.py' enum: - en - zh - de - es - ru - ko - fr - ja - pt - tr - pl - ca - nl - ar - sv - it - id - hi - fi - vi - he - uk - el - ms - cs - ro - da - hu - ta - 'no' - th - ur - hr - bg - lt - la - mi - ml - cy - sk - te - fa - lv - bn - sr - az - sl - kn - et - mk - br - eu - is - hy - ne - mn - bs - kk - sq - sw - gl - mr - pa - si - km - sn - yo - so - af - oc - ka - be - tg - sd - gu - am - yi - lo - uz - fo - ht - ps - tk - nn - mt - sa - lb - my - bo - tl - mg - as - tt - haw - ln - ha - ba - jw - su - yue required: - provider FallbackGoogleTranscriber: type: object properties: provider: type: string description: This is the transcription provider that will be used. enum: - google model: type: string description: This is the model that will be used for the transcription. enum: - gemini-3-flash-preview - gemini-2.5-pro - gemini-2.5-flash - gemini-2.5-flash-lite - gemini-2.0-flash-thinking-exp - gemini-2.0-pro-exp-02-05 - gemini-2.0-flash - gemini-2.0-flash-lite - gemini-2.0-flash-exp - gemini-2.0-flash-realtime-exp - gemini-1.5-flash - gemini-1.5-flash-002 - gemini-1.5-pro - gemini-1.5-pro-002 - gemini-1.0-pro 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: - 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 required: - provider - model LangfuseObservabilityPlan: type: object properties: provider: type: string enum: - langfuse promptName: type: string description: The name of a Langfuse prompt to link generations to. This enables tracking which prompt version was used for each generation. https://langfuse.com/docs/prompt-management/features/link-to-traces promptVersion: type: number description: The version number of the Langfuse prompt to link generations to. Used together with promptName to identify the exact prompt version. https://langfuse.com/docs/prompt-management/features/link-to-traces minimum: 1 traceName: type: string description: 'Custom name for the Langfuse trace. Supports Liquid templates. Available variables: - {{ call.id }} - Call UUID - {{ call.type }} - ''inboundPhoneCall'', ''outboundPhoneCall'', ''webCall'' - {{ assistant.name }} - Assistant name - {{ assistant.id }} - Assistant ID Example: "{{ assistant.name }} - {{ call.type }}" Defaults to call ID if not provided.' 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 By default it includes the call metadata, assistant metadata, and assistant overrides.' required: - provider - tags TextContent: type: object properties: type: type: string enum: - text text: type: string language: type: string enum: - aa - ab - ae - af - ak - am - an - ar - as - av - ay - az - ba - be - bg - bh - bi - bm - bn - bo - br - bs - ca - ce - ch - co - cr - cs - cu - cv - cy - da - de - dv - dz - ee - el - en - eo - es - et - eu - fa - ff - fi - fj - fo - fr - fy - ga - gd - gl - gn - gu - gv - ha - he - hi - ho - hr - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - io - is - it - iu - ja - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ku - kv - kw - ky - la - lb - lg - li - ln - lo - lt - lu - lv - mg - mh - mi - mk - ml - mn - mr - ms - mt - my - na - nb - nd - ne - ng - nl - nn - 'no' - nr - nv - ny - oc - oj - om - or - os - pa - pi - pl - ps - pt - qu - rm - rn - ro - ru - rw - sa - sc - sd - se - sg - si - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - tg - th - ti - tk - tl - tn - to - tr - ts - tt - tw - ty - ug - uk - ur - uz - ve - vi - vo - wa - wo - xh - yi - yue - yo - za - zh - zu required: - type - text - language Condition: type: object properties: operator: type: string description: This is the operator you want to use to compare the parameter and value. enum: - eq - neq - gt - gte - lt - lte param: type: string description: This is the name of the parameter that you want to check. maxLength: 1000 value: type: string description: This is the value you want to compare against the parameter. maxLength: 1000 required: - operator - param - value ToolMessageStart: type: object properties: contents: type: array description: 'This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - 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. This will override the `content` property.' items: oneOf: - $ref: '#/components/schemas/TextContent' title: Text type: type: string enum: - request-start description: 'This message is triggered when the tool call starts. This message is never triggered for async tools. If this message is not provided, one of the default filler messages "Hold on a sec", "One moment", "Just a sec", "Give me a moment" or "This''ll just take a sec" will be used.' blocking: type: boolean description: 'This is an optional boolean that if true, the tool call will only trigger after the message is spoken. Default is false. @default false' example: false default: false content: type: string description: This is the content that the assistant says when this message is triggered. maxLength: 1000 conditions: description: This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered. type: array items: $ref: '#/components/schemas/Condition' required: - type ToolMessageComplete: type: object properties: contents: type: array description: 'This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - 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. This will override the `content` property.' items: oneOf: - $ref: '#/components/schemas/TextContent' title: Text type: type: string description: 'This message is triggered when the tool call is complete. This message is triggered immediately without waiting for your server to respond for async tool calls. If this message is not provided, the model will be requested to respond. If this message is provided, only this message will be spoken and the model will not be requested to come up with a response. It''s an exclusive OR.' enum: - request-complete role: type: string description: "This is optional and defaults to \"assistant\".\n\nWhen role=assistant,\ \ `content` is said out loud.\n\nWhen role=system, `content` is passed\ \ to the model in a system message. Example:\n system: default one\n\ \ assistant:\n user:\n assistant:\n user:\n assistant:\n\ \ user:\n assistant: tool called\n tool: your server response\n\ \ <--- system prompt as hint\n ---> model generates response which\ \ is spoken\nThis is useful when you want to provide a hint to the model\ \ about what to say next." enum: - assistant - system endCallAfterSpokenEnabled: type: boolean description: 'This is an optional boolean that if true, the call will end after the message is spoken. Default is false. This is ignored if `role` is set to `system`. @default false' example: false content: type: string description: This is the content that the assistant says when this message is triggered. maxLength: 1000 conditions: description: This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered. type: array items: $ref: '#/components/schemas/Condition' required: - type ToolMessageFailed: type: object properties: contents: type: array description: 'This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - 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. This will override the `content` property.' items: oneOf: - $ref: '#/components/schemas/TextContent' title: Text type: type: string description: 'This message is triggered when the tool call fails. This message is never triggered for async tool calls. If this message is not provided, the model will be requested to respond. If this message is provided, only this message will be spoken and the model will not be requested to come up with a response. It''s an exclusive OR.' enum: - request-failed endCallAfterSpokenEnabled: type: boolean description: 'This is an optional boolean that if true, the call will end after the message is spoken. Default is false. @default false' example: false content: type: string description: This is the content that the assistant says when this message is triggered. maxLength: 1000 conditions: description: This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered. type: array items: $ref: '#/components/schemas/Condition' required: - type ToolMessageDelayed: type: object properties: contents: type: array description: 'This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - 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. This will override the `content` property.' items: oneOf: - $ref: '#/components/schemas/TextContent' title: Text type: type: string description: 'This message is triggered when the tool call is delayed. There are the two things that can trigger this message: 1. The user talks with the assistant while your server is processing the request. Default is "Sorry, a few more seconds." 2. The server doesn''t respond within `timingMilliseconds`. This message is never triggered for async tool calls.' enum: - request-response-delayed timingMilliseconds: type: number minimum: 100 maximum: 120000 example: 1000 description: The number of milliseconds to wait for the server response before saying this message. content: type: string description: This is the content that the assistant says when this message is triggered. maxLength: 1000 conditions: description: This is an optional array of conditions that the tool call arguments must meet in order for this message to be triggered. type: array items: $ref: '#/components/schemas/Condition' required: - type MessageTarget: type: object properties: role: type: string description: 'This is the role of the message to target. If not specified, will find the position in the message history ignoring role (effectively `any`).' example: user enum: - user - assistant position: type: number description: 'This is the position of the message to target. - Negative numbers: Count from end (-1 = most recent, -2 = second most recent) - 0: First/oldest message in history - Positive numbers: Specific position (0-indexed from start) @default -1 (most recent message)' example: -1 RegexCondition: type: object properties: type: type: string description: This is the type discriminator for regex condition example: regex enum: - regex regex: type: string description: 'This is the regular expression pattern to match against message content. Note: - This works by using the RegExp.test method in Node.JS. Eg. /hello/.test("hello there") will return true. Hot tips: - In JavaScript, escape \ when sending the regex pattern. Eg. "hello\sthere" will be sent over the wire as "hellosthere". Send "hello\\sthere" instead. - RegExp.test does substring matching, so /cat/.test("I love cats") will return true. To do full string matching, use anchors: /^cat$/ will only match exactly "cat". - Word boundaries \b are useful for matching whole words: /\bcat\b/ matches "cat" but not "cats" or "category". - Use inline flags for portability: (?i) for case insensitive, (?m) for multiline' examples: - \\b(cancel|stop|wait)\\b - Matches whole words - ^yes$ - Matches exactly yes (full string match) - (?i)hello - Case insensitive match target: description: 'This is the target for messages to check against. If not specified, the condition will run on the last message (position: -1). If role is not specified, it will look at the last message regardless of role. @default { position: -1 }' allOf: - $ref: '#/components/schemas/MessageTarget' negate: type: boolean description: 'This is the flag that when true, the condition matches if the pattern does NOT match. Useful for ensuring certain words/phrases are absent. @default false' example: 'true - Reject if user hasn"t said goodbye: { regex: "\\b(bye|goodbye)\\b", negate: true }' required: - type - regex LiquidCondition: type: object properties: type: type: string description: This is the type discriminator for liquid condition example: liquid enum: - liquid liquid: type: string description: "This is the Liquid template that must return exactly \"true\"\ \ or \"false\" as a string.\nThe template is evaluated and the entire\ \ output must be either \"true\" or \"false\" - nothing else.\n\nAvailable\ \ variables:\n- `messages`: Array of recent messages in OpenAI chat completions\ \ format (ChatCompletionMessageParam[])\n Each message has properties\ \ like: role ('user', 'assistant', 'system'), content (string), etc.\n\ - `now`: Current timestamp in milliseconds (built-in Liquid variable)\n\ - Any assistant variable values (e.g., `userName`, `accountStatus`)\n\n\ Useful Liquid filters for messages:\n- `messages | last: 5` - Get the\ \ 5 most recent messages\n- `messages | where: 'role', 'user'` - Filter\ \ to only user messages\n- `messages | reverse` - Reverse the order of\ \ messages" examples: - '{% if messages.last.content contains goodbye %}true{% else %}false{% endif %}' - '{% assign userMessages = messages | where: role, user %}{% if userMessages.size > 3 %}true{% else %}false{% endif %}' required: - type - liquid GroupCondition: type: object properties: type: type: string description: This is the type discriminator for group condition example: group enum: - group operator: type: string description: This is the logical operator for combining conditions in this group examples: - AND - OR enum: - AND - OR conditions: type: array description: 'This is the list of nested conditions to evaluate. Supports recursive nesting of groups for complex logic.' examples: - '[{ type: "regex", regex: "(?i)stop", target: { role: "user" } }]' - '[{ type: "group", operator: "AND", conditions: [...] }]' items: oneOf: - $ref: '#/components/schemas/RegexCondition' title: RegexCondition - $ref: '#/components/schemas/LiquidCondition' title: LiquidCondition - $ref: '#/components/schemas/GroupCondition' title: GroupCondition description: This is the GroupCondition object but Swagger does not display nested schemas correctly. required: - type - operator - conditions ToolRejectionPlan: type: object properties: conditions: type: array description: 'This is the list of conditions that must be evaluated. Usage: - If all conditions match (AND logic), the tool call is rejected. - For OR logic at the top level, use a single ''group'' condition with operator: ''OR''. @default [] - Empty array means tool always executes' examples: - '[{ type: "regex", regex: "(?i)\\b(cancel|stop)\\b", target: { role: "user" } }]' - '[{ type: "group", operator: "OR", conditions: [...] }]' items: oneOf: - $ref: '#/components/schemas/RegexCondition' title: RegexCondition - $ref: '#/components/schemas/LiquidCondition' title: LiquidCondition - $ref: '#/components/schemas/GroupCondition' title: GroupCondition description: This is the GroupCondition object but Swagger does not display nested schemas correctly. CreateDtmfToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - dtmf description: The type of tool. "dtmf" for DTMF tool. sipInfoDtmfEnabled: type: boolean description: This enables sending DTMF tones via SIP INFO messages instead of RFC 2833 (RTP events). When enabled, DTMF digits will be sent using the SIP INFO method, which can be more reliable in some network configurations. Only relevant when using the `vapi.sip` transport. default: false rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateEndCallToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - endCall description: The type of tool. "endCall" for End Call tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateVoicemailToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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: The type of tool. "voicemail" for Voicemail tool. enum: - voicemail beepDetectionEnabled: type: boolean description: 'This is the flag that enables beep detection for voicemail detection and applies only for twilio based calls. @default false' default: false example: false rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type JsonSchema: type: object properties: type: type: string description: 'This is the type of output you''d like. `string`, `number`, `integer`, `boolean` are the primitive types and should be obvious. `array` and `object` are more interesting and quite powerful. They allow you to define nested structures. For `array`, you can define the schema of the items in the array using the `items` property. For `object`, you can define the properties of the object using the `properties` property.' enum: - string - number - integer - boolean - array - object items: description: This is required if the type is "array". This is the schema of the items in the array. This is a recursive reference to JsonSchema. allOf: - $ref: '#/components/schemas/JsonSchema' properties: type: object description: This is required if the type is "object". This specifies the properties of the object. This is a map of property names to JsonSchema objects. additionalProperties: $ref: '#/components/schemas/JsonSchema' description: type: string description: This is the description to help the model understand what it needs to output. pattern: type: string description: 'This is the pattern of the string. This is a regex that will be used to validate the data in question. To use a common format, use the `format` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs#supported-properties' format: type: string description: 'This is the format of the string. To pass a regex, use the `pattern` property instead. OpenAI documentation: https://platform.openai.com/docs/guides/structured-outputs?api-mode=chat&type-restrictions=string-restrictions' enum: - date-time - time - date - duration - email - hostname - ipv4 - ipv6 - uuid required: description: 'This is a list of properties that are required. This only makes sense if the type is "object".' type: array items: type: string enum: description: This array specifies the allowed values that can be used to restrict the output of the model. type: array items: type: string title: type: string description: This is the title of the schema. required: - type VariableExtractionAlias: type: object properties: key: type: string description: 'This is the key of the variable. This variable will be accessible during the call as `{{key}}` and stored in `call.artifact.variableValues` after the call. Rules: - Must start with a letter (a-z, A-Z). - Subsequent characters can be letters, numbers, or underscores. - Minimum length of 1 and maximum length of 40.' minLength: 1 maxLength: 40 pattern: /^[a-zA-Z][a-zA-Z0-9_]*$/ value: type: string description: 'This is the value of the variable. This can reference existing variables, use filters, and perform transformations. Examples: "{{name}}", "{{customer.email}}", "Hello {{name | upcase}}"' maxLength: 10000 required: - key - value VariableExtractionPlan: type: object properties: schema: description: "This is the schema to extract.\n\nExamples:\n1. To extract\ \ object properties, you can use the following schema:\n```json\n{\n \ \ \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"\ type\": \"string\"\n },\n \"age\": {\n \"type\": \"number\"\ \n }\n }\n}\n```\n\nThese will be extracted as `{{ name }}` and `{{\ \ age }}` respectively. To emphasize, object properties are extracted\ \ as direct global variables.\n\n2. To extract nested properties, you\ \ can use the following schema:\n```json\n{\n \"type\": \"object\",\n\ \ \"properties\": {\n \"name\": {\n \"type\": \"object\",\n \ \ \"properties\": {\n \"first\": {\n \"type\": \"\ string\"\n },\n \"last\": {\n \"type\": \"string\"\ \n }\n }\n }\n }\n}\n```\n\nThese will be extracted as\ \ `{{ name }}`. And, `{{ name.first }}` and `{{ name.last }}` will be\ \ accessible.\n\n3. To extract array items, you can use the following\ \ schema:\n```json\n{\n \"type\": \"array\",\n \"title\": \"zipCodes\"\ ,\n \"items\": {\n \"type\": \"string\"\n }\n}\n```\n\nThis will\ \ be extracted as `{{ zipCodes }}`. To access the array items, you can\ \ use `{{ zipCodes[0] }}` and `{{ zipCodes[1] }}`.\n\n4. To extract array\ \ of objects, you can use the following schema:\n\n```json\n{\n \"type\"\ : \"array\",\n \"name\": \"people\",\n \"items\": {\n \"type\": \"\ object\",\n \"properties\": {\n \"name\": {\n \"type\"\ : \"string\"\n },\n \"age\": {\n \"type\": \"number\"\ \n },\n \"zipCodes\": {\n \"type\": \"array\",\n \ \ \"items\": {\n \"type\": \"string\"\n }\n }\n\ \ }\n }\n}\n```\n\nThis will be extracted as `{{ people }}`. To access\ \ the array items, you can use `{{ people[n].name }}`, `{{ people[n].age\ \ }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0] }}` and `{{\ \ people[n].zipCodes[1] }}`." allOf: - $ref: '#/components/schemas/JsonSchema' aliases: description: "These are additional variables to create.\n\nThese will be\ \ accessible during the call as `{{key}}` and stored in `call.artifact.variableValues`\ \ after the call.\n\nExample:\n```json\n{\n \"aliases\": [\n {\n \ \ \"key\": \"customerName\",\n \"value\": \"{{name}}\"\n },\n\ \ {\n \"key\": \"fullName\",\n \"value\": \"{{firstName}}\ \ {{lastName}}\"\n },\n {\n \"key\": \"greeting\",\n \"\ value\": \"Hello {{name}}, welcome to {{company}}!\"\n },\n {\n\ \ \"key\": \"customerCity\",\n \"value\": \"{{addresses[0].city}}\"\ \n },\n {\n \"key\": \"something\",\n \"value\": \"{{any\ \ liquid}}\"\n }\n ]\n}\n```\n\nThis will create variables `customerName`,\ \ `fullName`, `greeting`, `customerCity`, and `something`. To access these\ \ variables, you can reference them as `{{customerName}}`, `{{fullName}}`,\ \ `{{greeting}}`, `{{customerCity}}`, and `{{something}}`." type: array items: $ref: '#/components/schemas/VariableExtractionAlias' ToolParameter: type: object properties: key: type: string description: This is the key of the parameter. value: description: The value of the parameter. Any JSON type. String values support Liquid templates. oneOf: - type: string - type: number - type: boolean - type: object - type: array required: - key - value OpenAIFunctionParameters: type: object properties: type: type: string description: This must be set to 'object'. It instructs the model to return a JSON object containing the function call properties. enum: - object properties: type: object description: 'This provides a description of the properties required by the function. JSON Schema can be used to specify expectations for each property. Refer to [this doc](https://ajv.js.org/json-schema.html#json-data-type) for a comprehensive guide on JSON Schema.' additionalProperties: $ref: '#/components/schemas/JsonSchema' required: description: This specifies the properties that are required by the function. type: array items: type: string required: - type - properties OpenAIFunction: type: object properties: strict: type: boolean description: 'This is a boolean that controls whether to enable strict schema adherence when generating the function call. If set to true, the model will follow the exact schema defined in the parameters field. Only a subset of JSON Schema is supported when strict is true. Learn more about Structured Outputs in the [OpenAI guide](https://openai.com/index/introducing-structured-outputs-in-the-api/). @default false' default: false name: type: string description: 'This is the the name of the function to be called. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64.' maxLength: 64 pattern: /^[a-zA-Z0-9_-]{1,64}$/ description: type: string description: This is the description of what the function does, used by the AI to choose when and how to call the function. parameters: description: 'These are the parameters the functions accepts, described as a JSON Schema object. See the [OpenAI guide](https://platform.openai.com/docs/guides/function-calling) for examples, and the [JSON Schema reference](https://json-schema.org/understanding-json-schema) for documentation about the format. Omitting parameters defines a function with an empty parameter list.' allOf: - $ref: '#/components/schemas/OpenAIFunctionParameters' required: - name CreateFunctionToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - function description: The type of tool. "function" for Function tool. async: type: boolean example: false description: "This determines if the tool is async.\n\n If async, the assistant\ \ will move forward without waiting for your server to respond. This is\ \ useful if you just want to trigger something on your server.\n\n If\ \ sync, the assistant will wait for your server to respond. This is useful\ \ if want assistant to respond with the result from your server.\n\n \ \ Defaults to synchronous (`false`)." server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' variableExtractionPlan: description: Plan to extract variables from the tool response allOf: - $ref: '#/components/schemas/VariableExtractionPlan' parameters: description: Static key-value pairs merged into the request body. Values support Liquid templates. type: array items: $ref: '#/components/schemas/ToolParameter' function: description: This is the function definition of the tool. allOf: - $ref: '#/components/schemas/OpenAIFunction' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type GhlToolMetadata: type: object properties: workflowId: type: string locationId: type: string CreateGhlToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - ghl description: The type of tool. "ghl" for GHL tool. metadata: $ref: '#/components/schemas/GhlToolMetadata' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - metadata MakeToolMetadata: type: object properties: scenarioId: type: number triggerHookId: type: number CreateMakeToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - make description: The type of tool. "make" for Make tool. metadata: $ref: '#/components/schemas/MakeToolMetadata' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - metadata CustomMessage: type: object properties: contents: type: array description: 'This is an alternative to the `content` property. It allows to specify variants of the same content, one per language. Usage: - If your assistants are multilingual, you can provide content for each language. - 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. This will override the `content` property.' items: oneOf: - $ref: '#/components/schemas/TextContent' title: Text type: type: string description: This is a custom message. enum: - custom-message content: type: string description: This is the content that the assistant will say when this message is triggered. maxLength: 1000 required: - type TransferDestinationAssistant: type: object properties: message: description: 'This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.' oneOf: - type: string - $ref: '#/components/schemas/CustomMessage' type: type: string enum: - assistant transferMode: type: string description: "This is the mode to use for the transfer. Defaults to `rolling-history`.\n\ \n- `rolling-history`: This is the default mode. It keeps the entire conversation\ \ history and appends the new assistant's system message on transfer.\n\ \n Example:\n\n Pre-transfer:\n system: assistant1 system message\n\ \ assistant: assistant1 first message\n user: hey, good morning\n\ \ assistant: how can i help?\n user: i need help with my account\n\ \ assistant: (destination.message)\n\n Post-transfer:\n system:\ \ assistant1 system message\n assistant: assistant1 first message\n\ \ user: hey, good morning\n assistant: how can i help?\n user:\ \ i need help with my account\n assistant: (destination.message)\n\ \ system: assistant2 system message\n assistant: assistant2 first\ \ message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)\n\ \n- `swap-system-message-in-history`: This replaces the original system\ \ message with the new assistant's system message on transfer.\n\n Example:\n\ \n Pre-transfer:\n system: assistant1 system message\n assistant:\ \ assistant1 first message\n user: hey, good morning\n assistant:\ \ how can i help?\n user: i need help with my account\n assistant:\ \ (destination.message)\n\n Post-transfer:\n system: assistant2 system\ \ message\n assistant: assistant1 first message\n user: hey, good\ \ morning\n assistant: how can i help?\n user: i need help with\ \ my account\n assistant: (destination.message)\n assistant: assistant2\ \ first message (or model generated if firstMessageMode is set to `assistant-speaks-first-with-model-generated-message`)\n\ \n- `delete-history`: This deletes the entire conversation history on\ \ transfer.\n\n Example:\n\n Pre-transfer:\n system: assistant1 system\ \ message\n assistant: assistant1 first message\n user: hey, good\ \ morning\n assistant: how can i help?\n user: i need help with\ \ my account\n assistant: (destination.message)\n\n Post-transfer:\n\ \ system: assistant2 system message\n assistant: assistant2 first\ \ message\n user: Yes, please\n assistant: how can i help?\n \ \ user: i need help with my account\n\n- `swap-system-message-in-history-and-remove-transfer-tool-messages`:\ \ This replaces the original system message with the new assistant's system\ \ message on transfer and removes transfer tool messages from conversation\ \ history sent to the LLM.\n\n Example:\n\n Pre-transfer:\n system:\ \ assistant1 system message\n assistant: assistant1 first message\n\ \ user: hey, good morning\n assistant: how can i help?\n user:\ \ i need help with my account\n transfer-tool\n transfer-tool-result\n\ \ assistant: (destination.message)\n\n Post-transfer:\n system:\ \ assistant2 system message\n assistant: assistant1 first message\n\ \ user: hey, good morning\n assistant: how can i help?\n user:\ \ i need help with my account\n assistant: (destination.message)\n\ \ assistant: assistant2 first message (or model generated if firstMessageMode\ \ is set to `assistant-speaks-first-with-model-generated-message`)\n\n\ @default 'rolling-history'" enum: - rolling-history - swap-system-message-in-history - swap-system-message-in-history-and-remove-transfer-tool-messages - delete-history assistantName: type: string description: This is the assistant to transfer the call to. description: type: string description: This is the description of the destination, used by the AI to choose when and how to transfer the call. required: - type - assistantName TransferFallbackPlan: type: object properties: message: description: This is the message the assistant will deliver to the customer if the transfer fails. oneOf: - type: string - $ref: '#/components/schemas/CustomMessage' endCallEnabled: type: boolean description: 'This controls what happens after delivering the failure message to the customer. - true: End the call after delivering the failure message (default) - false: Keep the assistant on the call to continue handling the customer''s request @default true' default: true required: - message TransferAssistantModel: type: object properties: provider: type: string description: The model provider for the transfer assistant enum: - openai - anthropic - google - custom-llm model: type: string description: The model name - must be compatible with the selected provider example: gpt-4o messages: type: array description: "These are the messages used to configure the transfer assistant.\n\ \n@default: ```\n[\n {\n role: 'system',\n content: 'You are a\ \ transfer assistant designed to facilitate call transfers. Your core\ \ responsibility is to manage the transfer process efficiently.\\n\\n##\ \ Core Responsibility\\n- Facilitate the transfer process by using transferSuccessful\ \ or transferCancel tools appropriately\\n\\n## When to Respond\\n- Answer\ \ questions about the transfer process or provide summaries when specifically\ \ asked by the operator\\n- Respond to direct questions about the current\ \ transfer situation\\n\\n## What to Avoid\\n- Do not discuss topics unrelated\ \ to the transfer\\n- Do not engage in general conversation\\n- Keep all\ \ interactions focused on facilitating the transfer\\n\\n## Transfer Tools\\\ n- Use transferSuccessful when the transfer should proceed\\n- Use transferCancel\ \ when the transfer cannot be completed\\n\\nStay focused on your core\ \ responsibility of facilitating transfers.'\n }\n]```\n\n**Default Behavior:**\ \ If you don't provide any messages or don't include a system message\ \ as the first message, the default system message above will be automatically\ \ added.\n\n**Override Default:** To replace the default system message,\ \ provide your own system message as the first message in the array.\n\ \n**Add Context:** You can provide additional messages (user, assistant,\ \ etc.) to add context while keeping the default system message, or combine\ \ them with your custom system message." tools: type: array description: 'Tools available to the transfer assistant during warm-transfer-experimental. **Default Behavior:** The transfer assistant will ALWAYS have both `transferSuccessful` and `transferCancel` tools automatically added, regardless of what you provide here. **Default Tools:** - `transferSuccessful`: "Call this function to confirm the transfer is successful and connect the customer. Use this when you detect a human has answered and is ready to take the call." - `transferCancel`: "Call this function to cancel the transfer when no human answers or transfer should not proceed. Use this when you detect voicemail, busy signal, or no answer." **Customization:** You can override the default tools by providing `transferSuccessful` and/or `transferCancel` tools with custom `function` or `messages` configurations. **Additional Tools:** You can also provide other tools, but the two transfer tools will always be present and available to the assistant.' required: - provider - model RegexOption: type: object properties: type: type: string description: 'This is the type of the regex option. Options are: - `ignore-case`: Ignores the case of the text being matched. Add - `whole-word`: Matches whole words only. - `multi-line`: Matches across multiple lines.' enum: - ignore-case - whole-word - multi-line enabled: type: boolean description: 'This is whether to enable the option. @default false' required: - type - enabled AssistantCustomEndpointingRule: type: object properties: type: type: string description: 'This endpointing rule is based on the last assistant message before customer started speaking. Flow: - Assistant speaks - Customer starts speaking - Customer transcription comes in - This rule is evaluated on the last assistant message - If a match is found based on `regex`, the endpointing timeout is set to `timeoutSeconds` Usage: - If you have yes/no questions in your use case like "are you interested in a loan?", you can set a shorter timeout. - If you have questions where the customer may pause to look up information like "what''s my account number?", you can set a longer timeout.' enum: - assistant regex: type: string description: 'This is the regex pattern to match. Note: - This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test("hello there")` will return `true`. Hot tip: - In JavaScript, escape `\` when sending the regex pattern. Eg. `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send `"hello\\sthere"` instead. - `RegExp.test` does substring matching, so `/cat/.test("I love cats")` will return `true`. To do full string matching, send "^cat$".' regexOptions: description: 'These are the options for the regex match. Defaults to all disabled. @default []' type: array items: $ref: '#/components/schemas/RegexOption' timeoutSeconds: type: number description: This is the endpointing timeout in seconds, if the rule is matched. minimum: 0 maximum: 15 required: - type - regex - timeoutSeconds CustomerCustomEndpointingRule: type: object properties: type: type: string description: 'This endpointing rule is based on current customer message as they are speaking. Flow: - Assistant speaks - Customer starts speaking - Customer transcription comes in - This rule is evaluated on the current customer transcription - If a match is found based on `regex`, the endpointing timeout is set to `timeoutSeconds` Usage: - If you want to wait longer while customer is speaking numbers, you can set a longer timeout.' enum: - customer regex: type: string description: 'This is the regex pattern to match. Note: - This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test("hello there")` will return `true`. Hot tip: - In JavaScript, escape `\` when sending the regex pattern. Eg. `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send `"hello\\sthere"` instead. - `RegExp.test` does substring matching, so `/cat/.test("I love cats")` will return `true`. To do full string matching, send "^cat$".' regexOptions: description: 'These are the options for the regex match. Defaults to all disabled. @default []' type: array items: $ref: '#/components/schemas/RegexOption' timeoutSeconds: type: number description: This is the endpointing timeout in seconds, if the rule is matched. minimum: 0 maximum: 15 required: - type - regex - timeoutSeconds BothCustomEndpointingRule: type: object properties: type: type: string description: 'This endpointing rule is based on both the last assistant message and the current customer message as they are speaking. Flow: - Assistant speaks - Customer starts speaking - Customer transcription comes in - This rule is evaluated on the last assistant message and the current customer transcription - If assistant message matches `assistantRegex` AND customer message matches `customerRegex`, the endpointing timeout is set to `timeoutSeconds` Usage: - If you want to wait longer while customer is speaking numbers, you can set a longer timeout.' enum: - both assistantRegex: type: string description: 'This is the regex pattern to match the assistant''s message. Note: - This works by using the `RegExp.test` method in Node.JS. Eg. `/hello/.test("hello there")` will return `true`. Hot tip: - In JavaScript, escape `\` when sending the regex pattern. Eg. `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send `"hello\\sthere"` instead. - `RegExp.test` does substring matching, so `/cat/.test("I love cats")` will return `true`. To do full string matching, send "^cat$".' assistantRegexOptions: description: 'These are the options for the assistant''s message regex match. Defaults to all disabled. @default []' type: array items: $ref: '#/components/schemas/RegexOption' customerRegex: type: string customerRegexOptions: description: 'These are the options for the customer''s message regex match. Defaults to all disabled. @default []' type: array items: $ref: '#/components/schemas/RegexOption' timeoutSeconds: type: number description: This is the endpointing timeout in seconds, if the rule is matched. minimum: 0 maximum: 15 required: - type - assistantRegex - customerRegex - timeoutSeconds VapiSmartEndpointingPlan: type: object properties: provider: type: string description: This is the provider for the smart endpointing plan. enum: - vapi - livekit - custom-endpointing-model example: vapi required: - provider LivekitSmartEndpointingPlan: type: object properties: provider: type: string description: This is the provider for the smart endpointing plan. enum: - vapi - livekit - custom-endpointing-model 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. This is a millisecond valued function. It maps probabilities (real numbers on [0,1]) to milliseconds that the bot should wait before speaking ([0, \infty]). Any negative values that are returned are set to zero (the bot can''t start talking in the past). A 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. Under the hood, this is parsed into a mathjs expression. Whatever you use to write your expression needs to be valid with respect to mathjs @default "20 + 500 * sqrt(x) + 2500 * x^3"' examples: - 70 + 4000 * x - 200 + 8000 * x - 4000 * (1 - cos(pi * x)) required: - provider CustomEndpointingModelSmartEndpointingPlan: type: object properties: provider: type: string description: This is the provider for the smart endpointing plan. Use `custom-endpointing-model` for custom endpointing providers that are not natively supported. enum: - vapi - livekit - custom-endpointing-model example: custom-endpointing-model server: description: "This is where the endpointing request will be sent. If not\ \ provided, will be sent to `assistant.server`. If that does not exist\ \ either, will be sent to `org.server`.\n\nRequest Example:\n\nPOST https://{server.url}\n\ Content-Type: application/json\n\n{\n \"message\": {\n \"type\": \"\ call.endpointing.request\",\n \"messages\": [\n {\n \"\ role\": \"user\",\n \"message\": \"Hello, how are you?\",\n \ \ \"time\": 1234567890,\n \"secondsFromStart\": 0\n }\n\ \ ],\n ...other metadata about the call...\n }\n}\n\nResponse Expected:\n\ {\n \"timeoutSeconds\": 0.5\n}\n\nThe timeout is the number of seconds\ \ to wait before considering the user's speech as finished. The endpointing\ \ timeout is automatically reset each time a new transcript is received\ \ (and another `call.endpointing.request` is sent)." allOf: - $ref: '#/components/schemas/Server' required: - provider TranscriptionEndpointingPlan: type: object properties: onPunctuationSeconds: type: number description: 'The minimum number of seconds to wait after transcription ending with punctuation before sending a request to the model. Defaults to 0.1. This setting exists because the transcriber punctuates the transcription when it''s more confident that customer has completed a thought. @default 0.1' minimum: 0 maximum: 3 example: 0.1 onNoPunctuationSeconds: type: number description: 'The minimum number of seconds to wait after transcription ending without punctuation before sending a request to the model. Defaults to 1.5. This setting exists to catch the cases where the transcriber was not confident enough to punctuate the transcription, but the customer is done and has been silent for a long time. @default 1.5' minimum: 0 maximum: 3 example: 1.5 onNumberSeconds: type: number description: 'The minimum number of seconds to wait after transcription ending with a number before sending a request to the model. Defaults to 0.4. This setting exists because the transcriber will sometimes punctuate the transcription ending with a number, even though the customer hasn''t uttered the full number. This happens commonly for long numbers when the customer reads the number in chunks. @default 0.5' minimum: 0 maximum: 3 example: 0.5 StartSpeakingPlan: type: object properties: waitSeconds: type: number description: 'This is how long assistant waits before speaking. Defaults to 0.4. This is the minimum it will wait but if there is latency is the pipeline, this minimum will be exceeded. This is intended as a stopgap in case the pipeline is moving too fast. Example: - If model generates tokens and voice generates bytes within 100ms, the pipeline still waits 300ms before outputting speech. Usage: - If the customer is taking long pauses, set this to a higher value. - If the assistant is accidentally jumping in too much, set this to a higher value. @default 0.4' minimum: 0 maximum: 5 example: 0.4 smartEndpointingEnabled: example: false deprecated: true oneOf: - type: boolean - type: string enum: - livekit smartEndpointingPlan: description: 'This is the plan for smart endpointing. Pick between Vapi smart endpointing, LiveKit, or custom endpointing model (or nothing). We strongly recommend using livekit endpointing when working in English. LiveKit endpointing is not supported in other languages, yet. If this is set, it will override and take precedence over `transcriptionEndpointingPlan`. This plan will still be overridden by any matching `customEndpointingRules`. If this is not set, the system will automatically use the transcriber''s built-in endpointing capabilities if available.' oneOf: - $ref: '#/components/schemas/VapiSmartEndpointingPlan' title: Vapi - $ref: '#/components/schemas/LivekitSmartEndpointingPlan' title: Livekit - $ref: '#/components/schemas/CustomEndpointingModelSmartEndpointingPlan' title: Custom Endpointing Model 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. Usage: - If you have yes/no questions like "are you interested in a loan?", you can set a shorter timeout. - 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. - If you want to wait longer while customer is enumerating a list of numbers, you can set a longer timeout. These rules have the highest precedence and will override both `smartEndpointingPlan` and `transcriptionEndpointingPlan` when a rule is matched. The rules are evaluated in order and the first one that matches will be used. Order of precedence for endpointing: 1. customEndpointingRules (if any match) 2. smartEndpointingPlan (if set) 3. transcriptionEndpointingPlan @default []' items: oneOf: - $ref: '#/components/schemas/AssistantCustomEndpointingRule' title: Assistant - $ref: '#/components/schemas/CustomerCustomEndpointingRule' title: Customer - $ref: '#/components/schemas/BothCustomEndpointingRule' title: Both transcriptionEndpointingPlan: description: 'This determines how a customer speech is considered done (endpointing) using the transcription of customer''s speech. Once an endpoint is triggered, the request is sent to `assistant.model`. Note: This plan is only used if `smartEndpointingPlan` is not set and transcriber does not have built-in endpointing capabilities. If both are provided, `smartEndpointingPlan` takes precedence. This plan will also be overridden by any matching `customEndpointingRules`.' allOf: - $ref: '#/components/schemas/TranscriptionEndpointingPlan' SmartDenoisingPlan: type: object properties: enabled: type: boolean description: Whether smart denoising using Krisp is enabled. default: true FourierDenoisingPlan: type: object properties: enabled: type: boolean description: Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected. default: false mediaDetectionEnabled: type: boolean description: 'Whether automatic media detection is enabled. When enabled, the filter will automatically detect consistent background TV/music/radio and switch to more aggressive filtering settings. Only applies when enabled is true.' example: true default: true staticThreshold: type: number description: Static threshold in dB used as fallback when no baseline is established. example: -35 minimum: -80 maximum: 0 default: -35 baselineOffsetDb: type: number description: 'How far below the rolling baseline to filter audio, in dB. Lower values (e.g., -10) are more aggressive, higher values (e.g., -20) are more conservative.' example: -15 minimum: -30 maximum: -5 default: -15 windowSizeMs: type: number description: 'Rolling window size in milliseconds for calculating the audio baseline. Larger windows adapt more slowly but are more stable.' example: 3000 minimum: 1000 maximum: 30000 default: 3000 baselinePercentile: type: number description: 'Percentile to use for baseline calculation (1-99). Higher percentiles (e.g., 85) focus on louder speech, lower percentiles (e.g., 50) include quieter speech.' example: 85 minimum: 1 maximum: 99 default: 85 BackgroundSpeechDenoisingPlan: type: object properties: smartDenoisingPlan: description: Whether smart denoising using Krisp is enabled. allOf: - $ref: '#/components/schemas/SmartDenoisingPlan' fourierDenoisingPlan: description: 'Whether Fourier denoising is enabled. Note that this is experimental and may not work as expected. This can be combined with smart denoising, and will be run afterwards.' allOf: - $ref: '#/components/schemas/FourierDenoisingPlan' TransferAssistant: type: object properties: name: type: string description: Optional name for the transfer assistant maxLength: 100 default: transfer-assistant example: Sales Transfer Assistant model: description: Model configuration for the transfer assistant allOf: - $ref: '#/components/schemas/TransferAssistantModel' voice: description: These are the options for the transfer assistant's voice. oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice transcriber: description: These are the options for the transfer assistant's transcriber. oneOf: - $ref: '#/components/schemas/AssemblyAITranscriber' title: AssemblyAITranscriber - $ref: '#/components/schemas/AzureSpeechTranscriber' title: AzureSpeechTranscriber - $ref: '#/components/schemas/CustomTranscriber' title: CustomTranscriber - $ref: '#/components/schemas/DeepgramTranscriber' title: DeepgramTranscriber - $ref: '#/components/schemas/ElevenLabsTranscriber' title: ElevenLabsTranscriber - $ref: '#/components/schemas/GladiaTranscriber' title: GladiaTranscriber - $ref: '#/components/schemas/GoogleTranscriber' title: GoogleTranscriber - $ref: '#/components/schemas/SpeechmaticsTranscriber' title: SpeechmaticsTranscriber - $ref: '#/components/schemas/TalkscriberTranscriber' title: TalkscriberTranscriber - $ref: '#/components/schemas/OpenAITranscriber' title: OpenAITranscriber - $ref: '#/components/schemas/CartesiaTranscriber' title: CartesiaTranscriber - $ref: '#/components/schemas/SonioxTranscriber' title: SonioxTranscriber firstMessage: type: string description: 'This is the first message that the transfer assistant will say. This can also be a URL to a custom audio file. If unspecified, assistant will wait for user to speak and use the model to respond once they speak.' example: Hello! I understand you need to be transferred. Let me connect you. backgroundSound: description: 'This is the background sound in the transfer assistant call. Default for phone calls is ''office'' and default for web calls is ''off''. You can also provide a custom sound by providing a URL to an audio file.' oneOf: - type: string enum: - 'off' - office example: office - type: string format: uri example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3 startSpeakingPlan: description: 'This is the plan for when the transfer assistant should start talking. You should configure this if the transfer assistant needs different endpointing behavior than the base assistant. If this is not set, the transfer assistant will inherit the start speaking plan from the base assistant.' allOf: - $ref: '#/components/schemas/StartSpeakingPlan' firstMessageMode: type: string description: 'This is the mode for the first message. Default is ''assistant-speaks-first''. Use: - ''assistant-speaks-first'' to have the assistant speak first. - ''assistant-waits-for-user'' to have the assistant wait for the user to speak first. - ''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. @default ''assistant-speaks-first''' enum: - assistant-speaks-first - assistant-speaks-first-with-model-generated-message - assistant-waits-for-user example: assistant-speaks-first maxDurationSeconds: type: number description: 'This is the maximum duration in seconds for the transfer assistant conversation. After this time, the transfer will be cancelled automatically. @default 120' minimum: 10 maximum: 43200 example: 120 backgroundSpeechDenoisingPlan: description: 'This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Smart denoising can be combined with or used independently of Fourier denoising. Order of precedence: - Smart denoising - Fourier denoising' allOf: - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan' silenceTimeoutSeconds: type: number description: 'This is the number of seconds of silence to wait before ending the call. Defaults to 30. @default 30' minimum: 10 maximum: 3600 required: - model TransferCancelToolUserEditable: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - transferCancel description: The type of tool. "transferCancel" for Transfer Cancel tool. This tool can only be used during warm-transfer-experimental by the transfer assistant to cancel an ongoing transfer and return the call back to the original assistant when the transfer cannot be completed. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type TransferSuccessfulToolUserEditable: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - transferSuccessful description: The type of tool. "transferSuccessful" for Transfer Successful tool. This tool can only be used during warm-transfer-experimental by the transfer assistant to confirm that the transfer should proceed and finalize the handoff to the destination. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type SummaryPlan: type: object properties: messages: description: "These are the messages used to generate the summary.\n\n@default:\ \ ```\n[\n {\n \"role\": \"system\",\n \"content\": \"You are an\ \ expert note-taker. You will be given a transcript of a call. Summarize\ \ the call in 2-3 sentences. DO NOT return anything except the summary.\"\ \n },\n {\n \"role\": \"user\",\n \"content\": \"Here is the transcript:\\\ n\\n{{transcript}}\\n\\n. Here is the ended reason of the call:\\n\\n{{endedReason}}\\\ n\\n\"\n }\n]```\n\nYou can customize by providing any messages you want.\n\ \nHere are the template variables available:\n- {{transcript}}: The transcript\ \ of the call from `call.artifact.transcript` \n- {{systemPrompt}}: The\ \ system prompt of the call from `assistant.model.messages[type=system].content`\ \ \n- {{messages}}: The messages of the call from `assistant.model.messages`\ \ \n- {{endedReason}}: The ended reason of the call from `call.endedReason`" type: array items: type: object enabled: type: boolean description: 'This determines whether a summary is generated and stored in `call.analysis.summary`. Defaults to true. Usage: - If you want to disable the summary, set this to false. @default true' timeoutSeconds: type: number description: 'This is how long the request is tried before giving up. When request times out, `call.analysis.summary` will be empty. Usage: - To guarantee the summary is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond. @default 5 seconds' minimum: 1 maximum: 60 TransferPlan: type: object properties: mode: type: string description: 'This configures how transfer is executed and the experience of the destination party receiving the call. Usage: - `blind-transfer`: The assistant forwards the call to the destination without any message or summary. - `blind-transfer-add-summary-to-sip-header`: The assistant forwards the call to the destination and adds a SIP header X-Transfer-Summary to the call to include the summary. - `warm-transfer-say-message`: The assistant dials the destination, delivers the `message` to the destination party, connects the customer, and leaves the call. - `warm-transfer-say-summary`: The assistant dials the destination, provides a summary of the call to the destination party, connects the customer, and leaves the call. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`: The assistant dials the destination, waits for the operator to speak, delivers the `message` to the destination party, and then connects the customer. - `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary`: The assistant dials the destination, waits for the operator to speak, provides a summary of the call to the destination party, and then connects the customer. - `warm-transfer-twiml`: The assistant dials the destination, executes the twiml instructions on the destination call leg, connects the customer, and leaves the call. - `warm-transfer-experimental`: The assistant puts the customer on hold, dials the destination, and if the destination answers (and is human), delivers a message or summary before connecting the customer. If the destination is unreachable or not human (e.g., with voicemail detection), the assistant delivers the `fallbackMessage` to the customer and optionally ends the call. @default ''blind-transfer''' enum: - blind-transfer - blind-transfer-add-summary-to-sip-header - warm-transfer-say-message - warm-transfer-say-summary - warm-transfer-twiml - warm-transfer-wait-for-operator-to-speak-first-and-then-say-message - warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary - warm-transfer-experimental message: description: 'This is the message the assistant will deliver to the destination party before connecting the customer. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header`, `warm-transfer-say-message`, `warm-transfer-wait-for-operator-to-speak-first-and-then-say-message`, or `warm-transfer-experimental`.' oneOf: - type: string - $ref: '#/components/schemas/CustomMessage' timeout: type: number description: 'This is the timeout in seconds for the warm-transfer-wait-for-operator-to-speak-first-and-then-say-message/summary @default 60' minimum: 1 maximum: 600 default: 60 sipVerb: type: object description: 'This specifies the SIP verb to use while transferring the call. - ''refer'': Uses SIP REFER to transfer the call (default) - ''bye'': Ends current call with SIP BYE - ''dial'': Uses SIP DIAL to transfer the call' default: refer enum: - refer - bye - dial dialTimeout: type: number description: 'This sets the timeout for the dial operation in seconds. This is the duration the call will ring before timing out. Only applicable when `sipVerb=''dial''`. Not applicable for SIP REFER or BYE. @default 60' minimum: 1 maximum: 600 default: 60 holdAudioUrl: type: string description: 'This is the URL to an audio file played while the customer is on hold during transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the customer. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV. - If not provided, the default hold audio will be used.' transferCompleteAudioUrl: type: string description: 'This is the URL to an audio file played after the warm transfer message or summary is delivered to the destination party. It can be used to play a custom sound like ''beep'' to notify that the transfer is complete. Usage: - Used only when `mode` is `warm-transfer-experimental`. - Used when transferring calls to play hold audio for the destination party. - Must be a publicly accessible URL to an audio file. - Supported formats: MP3 and WAV.' contextEngineeringPlan: description: 'This is the plan for manipulating the message context before initiating the warm transfer. Usage: - Used only when `mode` is `warm-transfer-experimental`. - These messages will automatically be added to the transferAssistant''s system message. - If ''none'', we will not add any transcript to the transferAssistant''s system message. - If you want to provide your own messages, use transferAssistant.model.messages instead. @default { type: ''all'' }' oneOf: - $ref: '#/components/schemas/ContextEngineeringPlanLastNMessages' title: Last N Messages - $ref: '#/components/schemas/ContextEngineeringPlanNone' title: None - $ref: '#/components/schemas/ContextEngineeringPlanAll' title: All twiml: type: string description: 'This is the TwiML instructions to execute on the destination call leg before connecting the customer. Usage: - Used only when `mode` is `warm-transfer-twiml`. - Supports only `Play`, `Say`, `Gather`, `Hangup` and `Pause` verbs. - Maximum length is 4096 characters. Example: ``` Hello, transferring a customer to you. They called about billing questions. ```' maxLength: 4096 summaryPlan: description: 'This is the plan for generating a summary of the call to present to the destination party. Usage: - Used only when `mode` is `blind-transfer-add-summary-to-sip-header` or `warm-transfer-say-summary` or `warm-transfer-wait-for-operator-to-speak-first-and-then-say-summary` or `warm-transfer-experimental`.' allOf: - $ref: '#/components/schemas/SummaryPlan' sipHeadersInReferToEnabled: type: boolean description: 'This flag includes the sipHeaders from above in the refer to sip uri as url encoded query params. @default false' fallbackPlan: description: 'This configures the fallback plan when the transfer fails (destination unreachable, busy, or not human). Usage: - Used only when `mode` is `warm-transfer-experimental`. - If not provided when using `warm-transfer-experimental`, a default message will be used.' allOf: - $ref: '#/components/schemas/TransferFallbackPlan' required: - mode TransferDestinationNumber: type: object properties: message: description: 'This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.' oneOf: - type: string - $ref: '#/components/schemas/CustomMessage' type: type: string enum: - number numberE164CheckEnabled: type: boolean description: 'This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `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. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)' default: true number: type: string description: This is the phone number to transfer the call to. minLength: 3 maxLength: 40 extension: type: string description: This is the extension to dial after transferring the call to the `number`. minLength: 1 maxLength: 10 callerId: type: string description: "This is the caller ID to use when transferring the call to\ \ the `number`.\n\nUsage:\n- If not provided, the caller ID will be the\ \ number the call is coming **from**.\n Example: a customer with number\ \ +14151111111 calls in to and the assistant transfers out to +16470000000.\ \ +16470000000 will see +14151111111 as the caller.\n For inbound calls,\ \ the caller ID is the customer's number. For outbound calls, the caller\ \ ID is the phone number of the assistant.\n- To change this behavior,\ \ provide a `callerId`.\n- Set to '{{customer.number}}' to always use\ \ the customer's number as the caller ID.\n- Set to '{{phoneNumber.number}}'\ \ to always use the phone number of the assistant as the caller ID.\n\ - Set to any E164 number to always use that number as the caller ID. This\ \ needs to be a number that is owned or verified by your Transport provider\ \ like Twilio.\n\nFor Twilio, you can read up more here: https://www.twilio.com/docs/voice/twiml/dial#callerid" maxLength: 40 transferPlan: description: 'This configures how transfer is executed and the experience of the destination party receiving the call. Defaults to `blind-transfer`. @default `transferPlan.mode=''blind-transfer''`' allOf: - $ref: '#/components/schemas/TransferPlan' description: type: string description: This is the description of the destination, used by the AI to choose when and how to transfer the call. required: - type - number TransferDestinationSip: type: object properties: message: description: 'This is spoken to the customer before connecting them to the destination. Usage: - If this is not provided and transfer tool messages is not provided, default is "Transferring the call now". - If set to "", nothing is spoken. This is useful when you want to silently transfer. This is especially useful when transferring between assistants in a squad. In this scenario, you likely also want to set `assistant.firstMessageMode=assistant-speaks-first-with-model-generated-message` for the destination assistant. This accepts a string or a ToolMessageStart class. Latter is useful if you want to specify multiple messages for different languages through the `contents` field.' oneOf: - type: string - $ref: '#/components/schemas/CustomMessage' type: type: string enum: - sip sipUri: type: string description: This is the SIP URI to transfer the call to. callerId: type: string description: 'This is the caller ID to use when transferring the call to the `sipUri`. Usage: - If not provided, the caller ID will be determined by the SIP infrastructure. - Set to ''{{customer.number}}'' to always use the customer''s number as the caller ID. - Set to ''{{phoneNumber.number}}'' to always use the phone number of the assistant as the caller ID. - Set to any E164 number to always use that number as the caller ID. Only applicable when `transferPlan.sipVerb=''dial''`. Not applicable for SIP REFER.' maxLength: 40 transferPlan: description: 'This configures how transfer is executed and the experience of the destination party receiving the call. Defaults to `blind-transfer`. @default `transferPlan.mode=''blind-transfer''`' allOf: - $ref: '#/components/schemas/TransferPlan' sipHeaders: type: object description: These are custom headers to be added to SIP refer during transfer call. description: type: string description: This is the description of the destination, used by the AI to choose when and how to transfer the call. required: - type - sipUri CreateTransferCallToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - transferCall destinations: type: array description: These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called. items: oneOf: - $ref: '#/components/schemas/TransferDestinationAssistant' title: Assistant - $ref: '#/components/schemas/TransferDestinationNumber' title: Number - $ref: '#/components/schemas/TransferDestinationSip' title: Sip rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type ContextEngineeringPlanLastNMessages: type: object properties: type: type: string enum: - lastNMessages maxMessages: type: number description: This is the maximum number of messages to include in the context engineering plan. minimum: 0 required: - type - maxMessages ContextEngineeringPlanNone: type: object properties: type: type: string enum: - none required: - type ContextEngineeringPlanAll: type: object properties: type: type: string enum: - all required: - type ContextEngineeringPlanUserAndAssistantMessages: type: object properties: type: type: string enum: - userAndAssistantMessages required: - type ContextEngineeringPlanPreviousAssistantMessages: type: object properties: type: type: string enum: - previousAssistantMessages required: - type HandoffDestinationAssistant: type: object properties: type: type: string enum: - assistant contextEngineeringPlan: description: This is the plan for manipulating the message context before handing off the call to the next assistant. oneOf: - $ref: '#/components/schemas/ContextEngineeringPlanLastNMessages' title: Last N Messages - $ref: '#/components/schemas/ContextEngineeringPlanNone' title: None - $ref: '#/components/schemas/ContextEngineeringPlanAll' title: All - $ref: '#/components/schemas/ContextEngineeringPlanUserAndAssistantMessages' title: User And Assistant Messages - $ref: '#/components/schemas/ContextEngineeringPlanPreviousAssistantMessages' title: Previous Assistant Messages assistantName: type: string description: This is the assistant to transfer the call to. You must provide either assistantName or assistantId. assistantId: type: string description: This is the assistant id to transfer the call to. You must provide either assistantName or assistantId. assistant: description: This is a transient assistant to transfer the call to. You may provide a transient assistant in the response `handoff-destination-request` in a dynamic handoff. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' variableExtractionPlan: description: This is the variable extraction plan for the handoff tool. allOf: - $ref: '#/components/schemas/VariableExtractionPlan' assistantOverrides: description: These are the assistant overrides to apply to the destination assistant. allOf: - $ref: '#/components/schemas/AssistantOverrides' description: type: string description: This is the description of the destination, used by the AI to choose when and how to transfer the call. required: - type HandoffDestinationDynamic: type: object properties: type: type: string enum: - dynamic server: description: 'This is where Vapi will send the handoff-destination-request webhook in a dynamic handoff. The order of precedence is: 1. tool.server.url 2. assistant.server.url 3. phoneNumber.server.url 4. org.server.url' allOf: - $ref: '#/components/schemas/Server' description: type: string description: This is the description of the destination, used by the AI to choose when and how to transfer the call. required: - type SquadMemberDTO: type: object properties: assistantDestinations: type: array items: oneOf: - $ref: '#/components/schemas/TransferDestinationAssistant' title: Transfer Destination - $ref: '#/components/schemas/HandoffDestinationAssistant' title: Handoff Destination 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' 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. The 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. Both `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 HandoffDestinationSquad: type: object properties: type: type: string enum: - squad contextEngineeringPlan: description: This is the plan for manipulating the message context before handing off the call to the squad. oneOf: - $ref: '#/components/schemas/ContextEngineeringPlanLastNMessages' title: Last N Messages - $ref: '#/components/schemas/ContextEngineeringPlanNone' title: None - $ref: '#/components/schemas/ContextEngineeringPlanAll' title: All - $ref: '#/components/schemas/ContextEngineeringPlanUserAndAssistantMessages' title: User And Assistant Messages - $ref: '#/components/schemas/ContextEngineeringPlanPreviousAssistantMessages' title: Previous Assistant Messages squadId: type: string description: This is the squad id to transfer the call to. squad: description: This is a transient squad to transfer the call to. allOf: - $ref: '#/components/schemas/CreateSquadDTO' entryAssistantName: type: string description: 'This is the name of the entry assistant to start with when handing off to the squad. If not provided, the first member of the squad will be used.' variableExtractionPlan: description: This is the variable extraction plan for the handoff tool. allOf: - $ref: '#/components/schemas/VariableExtractionPlan' squadOverrides: description: 'These are the overrides to apply to the squad configuration. Maps to squad-level membersOverrides.' allOf: - $ref: '#/components/schemas/AssistantOverrides' description: type: string description: This is the description of the destination, used by the AI to choose when and how to transfer the call. required: - type CreateHandoffToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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 type of the tool. When you''re using handoff tool, we recommend adding this to your system prompt --- # System context You are part of a multi-agent system designed to make agent coordination and execution easy. Agents uses two primary abstraction: **Agents** and **Handoffs**. An agent encompasses instructions and tools and can hand off a conversation to another agent when appropriate. Handoffs are achieved by calling a handoff function, generally named `handoff_to_`. Handoffs between agents are handled seamlessly in the background; do not mention or draw attention to these handoffs in your conversation with the user. # Agent context {put your agent system prompt here} ---' enum: - handoff defaultResult: type: string description: This is the default local tool result message used when no runtime handoff result override is returned. destinations: type: array description: "These are the destinations that the call can be handed off\ \ to.\n\nUsage:\n1. Single destination\n\nUse `assistantId` to handoff\ \ the call to a saved assistant, or `assistantName` to handoff the call\ \ to an assistant in the same squad.\n\n```json\n{\n \"tools\": [\n \ \ {\n \"type\": \"handoff\",\n \"destinations\": [\n \ \ {\n \"type\": \"assistant\",\n \"assistantId\":\ \ \"assistant-123\", // or \"assistantName\": \"Assistant123\"\n \ \ \"description\": \"customer wants to be handed off to assistant-123\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n }\n ],\n }\n ]\n}\n```\n\n2. Multiple\ \ destinations\n\n2.1. Multiple Tools, Each With One Destination (OpenAI\ \ recommended)\n\n```json\n{\n \"tools\": [\n {\n \"type\": \"\ handoff\",\n \"destinations\": [\n {\n \"type\":\ \ \"assistant\",\n \"assistantId\": \"assistant-123\",\n \ \ \"description\": \"customer wants to be handed off to assistant-123\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n },\n ],\n },\n {\n \"type\": \"\ handoff\",\n \"destinations\": [\n {\n \"type\":\ \ \"assistant\",\n \"assistantId\": \"assistant-456\",\n \ \ \"description\": \"customer wants to be handed off to assistant-456\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n }\n ],\n }\n ]\n}\n```\n\n2.2. One Tool,\ \ Multiple Destinations (Anthropic recommended)\n\n```json\n{\n \"tools\"\ : [\n {\n \"type\": \"handoff\",\n \"destinations\": [\n\ \ {\n \"type\": \"assistant\",\n \"assistantId\"\ : \"assistant-123\",\n \"description\": \"customer wants to be\ \ handed off to assistant-123\",\n \"contextEngineeringPlan\"\ : {\n \"type\": \"all\"\n }\n },\n {\n\ \ \"type\": \"assistant\",\n \"assistantId\": \"assistant-456\"\ ,\n \"description\": \"customer wants to be handed off to assistant-456\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n }\n ],\n }\n ]\n}\n```\n\n3. Dynamic destination\n\ \n3.1 To determine the destination dynamically, supply a `dynamic` handoff\ \ destination type and a `server` object.\n VAPI will send a handoff-destination-request\ \ webhook to the `server.url`.\n The response from the server will\ \ be used as the destination (if valid).\n\n```json\n{\n \"tools\": [\n\ \ {\n \"type\": \"handoff\",\n \"destinations\": [\n \ \ {\n \"type\": \"dynamic\",\n \"server\": {\n \ \ \"url\": \"https://example.com\"\n }\n }\n\ \ ],\n }\n ]\n}\n```\n\n3.2. To pass custom parameters to the\ \ server, you can use the `function` object.\n\n```json\n{\n \"tools\"\ : [\n {\n \"type\": \"handoff\",\n \"destinations\": [\n\ \ {\n \"type\": \"dynamic\",\n \"server\": {\n\ \ \"url\": \"https://example.com\"\n },\n }\n\ \ ],\n \"function\": {\n \"name\": \"handoff\",\n \ \ \"description\": \"Call this function when the customer is ready\ \ to be handed off to the next assistant\",\n \"parameters\": {\n\ \ \"type\": \"object\",\n \"properties\": {\n \ \ \"destination\": {\n \"type\": \"string\",\n \ \ \"description\": \"Use dynamic when customer is ready to be\ \ handed off to the next assistant\",\n \"enum\": [\"dynamic\"\ ]\n },\n \"customerAreaCode\": {\n \ \ \"type\": \"number\",\n \"description\": \"Area code of\ \ the customer\"\n },\n \"customerIntent\": {\n\ \ \"type\": \"string\",\n \"enum\": [\"new-customer\"\ , \"existing-customer\"],\n \"description\": \"Use new-customer\ \ when customer is a new customer, existing-customer when customer is\ \ an existing customer\"\n },\n \"customerSentiment\"\ : {\n \"type\": \"string\",\n \"enum\": [\"\ positive\", \"negative\", \"neutral\"],\n \"description\"\ : \"Use positive when customer is happy, negative when customer is unhappy,\ \ neutral when customer is neutral\"\n }\n }\n \ \ }\n }\n }\n ]\n}\n```\n\nThe properties `customerAreaCode`,\ \ `customerIntent`, and `customerSentiment` will be passed to the server\ \ in the webhook request body." items: oneOf: - $ref: '#/components/schemas/HandoffDestinationAssistant' title: Assistant - $ref: '#/components/schemas/HandoffDestinationDynamic' title: Dynamic - $ref: '#/components/schemas/HandoffDestinationSquad' title: Squad function: description: "This is the optional function definition that will be passed\ \ to the LLM.\nIf this is not defined, we will construct this based on\ \ the other properties.\n\nFor example, given the following tools definition:\n\ ```json\n{\n \"tools\": [\n {\n \"type\": \"handoff\",\n \ \ \"destinations\": [\n {\n \"type\": \"assistant\",\n\ \ \"assistantId\": \"assistant-123\",\n \"description\"\ : \"customer wants to be handed off to assistant-123\",\n \"\ contextEngineeringPlan\": {\n \"type\": \"all\"\n \ \ }\n },\n {\n \"type\": \"assistant\",\n \ \ \"assistantId\": \"assistant-456\",\n \"description\":\ \ \"customer wants to be handed off to assistant-456\",\n \"\ contextEngineeringPlan\": {\n \"type\": \"all\"\n \ \ }\n }\n ],\n }\n ]\n}\n```\n\nWe will construct the\ \ following function definition:\n```json\n{\n \"function\": {\n \"\ name\": \"handoff_to_assistant-123\",\n \"description\": \"\n \ \ Use this function to handoff the call to the next assistant.\n \ \ Only use it when instructions explicitly ask you to use the handoff_to_assistant\ \ function.\n DO NOT call this function unless you are instructed\ \ to do so.\n Here are the destinations you can handoff the call\ \ to:\n 1. assistant-123. When: customer wants to be handed off\ \ to assistant-123\n 2. assistant-456. When: customer wants to\ \ be handed off to assistant-456\n \",\n \"parameters\": {\n \ \ \"type\": \"object\",\n \"properties\": {\n \"destination\"\ : {\n \"type\": \"string\",\n \"description\": \"Options:\ \ assistant-123 (customer wants to be handed off to assistant-123), assistant-456\ \ (customer wants to be handed off to assistant-456)\",\n \"\ enum\": [\"assistant-123\", \"assistant-456\"]\n },\n },\n\ \ \"required\": [\"destination\"]\n }\n }\n}\n```\n\nTo override\ \ this function, please provide an OpenAI function definition and refer\ \ to it in the system prompt.\nYou may override parts of the function\ \ definition (i.e. you may only want to change the function name for your\ \ prompt).\nIf you choose to override the function parameters, it must\ \ include `destination` as a required parameter, and it must evaluate\ \ to either an assistantId, assistantName, or a the string literal `dynamic`.\n\ \nTo pass custom parameters to the server in a dynamic handoff, you can\ \ use the function parameters, with `dynamic` as the destination.\n```json\n\ {\n \"function\": {\n \"name\": \"dynamic_handoff\",\n \"description\"\ : \"\n Call this function when the customer is ready to be handed\ \ off to the next assistant\n \",\n \"parameters\": {\n \"\ type\": \"object\",\n \"properties\": {\n \"destination\"\ : {\n \"type\": \"string\",\n \"enum\": [\"dynamic\"\ ]\n },\n \"customerAreaCode\": {\n \"type\": \"\ number\",\n \"description\": \"Area code of the customer\"\n\ \ },\n \"customerIntent\": {\n \"type\": \"string\"\ ,\n \"enum\": [\"new-customer\", \"existing-customer\"],\n \ \ \"description\": \"Use new-customer when customer is a new customer,\ \ existing-customer when customer is an existing customer\"\n },\n\ \ \"customerSentiment\": {\n \"type\": \"string\",\n \ \ \"enum\": [\"positive\", \"negative\", \"neutral\"],\n \ \ \"description\": \"Use positive when customer is happy, negative\ \ when customer is unhappy, neutral when customer is neutral\"\n \ \ }\n },\n \"required\": [\"destination\", \"customerAreaCode\"\ , \"customerIntent\", \"customerSentiment\"]\n }\n }\n}\n```" allOf: - $ref: '#/components/schemas/OpenAIFunction' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateCustomKnowledgeBaseDTO: type: object properties: provider: 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\n\ Request Example:\n\nPOST https://{server.url}\nContent-Type: application/json\n\ \n{\n \"messsage\": {\n \"type\": \"knowledge-base-request\",\n \ \ \"messages\": [\n {\n \"role\": \"user\",\n \"content\"\ : \"Why is ocean blue?\"\n }\n ],\n ...other metadata about\ \ the call...\n }\n}\n\nResponse Expected:\n```\n{\n \"message\": {\n\ \ \"role\": \"assistant\",\n \"content\": \"The ocean is blue\ \ because water absorbs everything but blue.\",\n }, // YOU CAN RETURN\ \ THE EXACT RESPONSE TO SPEAK\n \"documents\": [\n {\n \"content\"\ : \"The ocean is blue primarily because water absorbs colors in the red\ \ part of the light spectrum and scatters the blue light, making it more\ \ visible to our eyes.\",\n \"similarity\": 1\n },\n {\n \ \ \"content\": \"Blue light is scattered more by the water molecules\ \ than other colors, enhancing the blue appearance of the ocean.\",\n\ \ \"similarity\": .5\n }\n ] // OR, YOU CAN RETURN AN ARRAY OF\ \ DOCUMENTS THAT WILL BE SENT TO THE MODEL\n}\n```" allOf: - $ref: '#/components/schemas/Server' required: - provider - server 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: string description: The model to use for the knowledge base enum: - gemini-3-flash-preview - gemini-2.5-pro - gemini-2.5-flash - gemini-2.5-flash-lite - gemini-2.0-flash-thinking-exp - gemini-2.0-pro-exp-02-05 - gemini-2.0-flash - gemini-2.0-flash-lite - gemini-2.0-flash-exp - gemini-2.0-flash-realtime-exp - gemini-1.5-flash - gemini-1.5-flash-002 - gemini-1.5-pro - gemini-1.5-pro-002 - gemini-1.0-pro description: type: string description: A description of the knowledge base fileIds: description: The file IDs associated with this knowledge base type: array items: type: string required: - name - provider - description - fileIds CreateQueryToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - query description: The type of tool. "query" for Query tool. knowledgeBases: description: The knowledge bases to query type: array items: $ref: '#/components/schemas/KnowledgeBase' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateGoogleCalendarCreateEventToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - google.calendar.event.create description: The type of tool. "google.calendar.event.create" for Google Calendar Create Event tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateGoogleSheetsRowAppendToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - google.sheets.row.append description: The type of tool. "google.sheets.row.append" for Google Sheets Row Append tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateGoogleCalendarCheckAvailabilityToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - google.calendar.availability.check description: The type of tool. "google.calendar.availability.check" for Google Calendar Check Availability tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateSlackSendMessageToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - slack.message.send description: The type of tool. "slack.message.send" for Slack Send Message tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type McpToolMessages: type: object properties: name: type: string description: The name of the tool from the MCP server. messages: type: array description: Custom messages for this specific tool. Set to an empty array to suppress all messages for this tool. If not provided, the tool will use the default messages from the parent MCP tool configuration. 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 required: - name McpToolMetadata: type: object properties: protocol: type: string enum: - sse - shttp description: This is the protocol used for MCP communication. Defaults to Streamable HTTP. CreateMcpToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - mcp description: The type of tool. "mcp" for MCP tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' toolMessages: description: Per-tool message overrides for individual tools loaded from the MCP server. Set messages to an empty array to suppress messages for a specific tool. Tools not listed here will use the default messages from the parent tool. type: array items: $ref: '#/components/schemas/McpToolMessages' metadata: $ref: '#/components/schemas/McpToolMetadata' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateGoHighLevelCalendarAvailabilityToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.calendar.availability.check description: The type of tool. "gohighlevel.calendar.availability.check" for GoHighLevel Calendar Availability Check tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateGoHighLevelCalendarEventCreateToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.calendar.event.create description: The type of tool. "gohighlevel.calendar.event.create" for GoHighLevel Calendar Event Create tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateGoHighLevelContactCreateToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.contact.create description: The type of tool. "gohighlevel.contact.create" for GoHighLevel Contact Create tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateGoHighLevelContactGetToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.contact.get description: The type of tool. "gohighlevel.contact.get" for GoHighLevel Contact Get tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type OpenAIMessage: type: object properties: content: type: string nullable: true maxLength: 100000000 role: type: string enum: - assistant - function - user - system - tool required: - content - role AnyscaleModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 provider: type: string enum: - 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @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. Must 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 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 - claude-opus-4-20250514 - claude-opus-4-5-20251101 - claude-opus-4-6 - claude-sonnet-4-20250514 - claude-sonnet-4-5-20250929 - claude-sonnet-4-6 - claude-haiku-4-5-20251001 provider: type: string description: The provider identifier for Anthropic. enum: - anthropic thinking: description: 'Optional configuration for Anthropic''s thinking feature. Only applicable for claude-3-7-sonnet-20250219 model. If 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - model - provider AnthropicBedrockModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 provider: type: string description: The provider identifier for Anthropic via AWS Bedrock. enum: - anthropic-bedrock model: type: string description: The specific Anthropic/Claude model that will be used via Bedrock. enum: - claude-3-opus-20240229 - claude-3-sonnet-20240229 - claude-3-haiku-20240307 - claude-3-5-sonnet-20240620 - claude-3-5-sonnet-20241022 - claude-3-5-haiku-20241022 - claude-3-7-sonnet-20250219 - claude-opus-4-20250514 - claude-opus-4-5-20251101 - claude-opus-4-6 - claude-sonnet-4-20250514 - claude-sonnet-4-5-20250929 - claude-sonnet-4-6 - claude-haiku-4-5-20251001 thinking: description: 'Optional configuration for Anthropic''s thinking feature. Only applicable for claude-3-7-sonnet-20250219 model. If 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - provider - model CerebrasModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b enum: - llama3.1-8b - llama-3.3-70b provider: type: string enum: - cerebras 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - model - provider CustomLLMModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 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. - `off` will not send any metadata. payload will look like `{ messages }` - `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }` - `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }` Further, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload. Default is `variable`.' enum: - 'off' - variable - destructured headers: type: object description: Custom headers to send with requests. These headers can override default OpenAI headers except for Authorization (which should be specified using a custom-llm credential). additionalProperties: type: string example: X-Custom-Header: value url: type: string description: These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1 wordLevelConfidenceEnabled: type: boolean description: 'This determines whether the transcriber''s word level confidence is sent in requests to the custom provider. Default is false. This only works for Deepgram transcribers.' timeoutSeconds: type: number description: This sets the timeout for the connection to the custom provider without needing to stream any tokens back. Default is 20 seconds. minimum: 0 maximum: 300 model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - provider - url - model DeepInfraModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 provider: type: string enum: - deepinfra model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b temperature: type: number description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency. minimum: 0 maximum: 2 maxTokens: type: number description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. minimum: 50 maximum: 10000 emotionRecognitionEnabled: type: boolean description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - provider - model DeepSeekModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b enum: - deepseek-chat - deepseek-reasoner provider: type: string enum: - deep-seek temperature: type: number description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency. minimum: 0 maximum: 2 maxTokens: type: number description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. minimum: 50 maximum: 10000 emotionRecognitionEnabled: type: boolean description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - model - provider GeminiMultimodalLivePrebuiltVoiceConfig: type: object properties: voiceName: type: string enum: - Puck - Charon - Kore - Fenrir - Aoede required: - voiceName GeminiMultimodalLiveVoiceConfig: type: object properties: prebuiltVoiceConfig: $ref: '#/components/schemas/GeminiMultimodalLivePrebuiltVoiceConfig' required: - prebuiltVoiceConfig GeminiMultimodalLiveSpeechConfig: type: object properties: voiceConfig: $ref: '#/components/schemas/GeminiMultimodalLiveVoiceConfig' required: - voiceConfig GoogleRealtimeConfig: type: object properties: topP: type: number description: 'This is the nucleus sampling parameter that controls the cumulative probability of tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.' topK: type: number description: 'This is the top-k sampling parameter that limits the number of highest probability tokens considered during text generation. Only applicable with the Gemini Flash 2.0 Multimodal Live API.' presencePenalty: type: number description: 'This is the presence penalty parameter that influences the model''s likelihood to repeat information by penalizing tokens based on their presence in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.' frequencyPenalty: type: number description: 'This is the frequency penalty parameter that influences the model''s likelihood to repeat tokens by penalizing them based on their frequency in the text. Only applicable with the Gemini Flash 2.0 Multimodal Live API.' speechConfig: description: 'This is the speech configuration object that defines the voice settings to be used for the model''s speech output. Only applicable with the Gemini Flash 2.0 Multimodal Live API.' allOf: - $ref: '#/components/schemas/GeminiMultimodalLiveSpeechConfig' GoogleModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 model: type: string description: This is the Google model that will be used. enum: - gemini-3-flash-preview - gemini-2.5-pro - gemini-2.5-flash - gemini-2.5-flash-lite - gemini-2.0-flash-thinking-exp - gemini-2.0-pro-exp-02-05 - gemini-2.0-flash - gemini-2.0-flash-lite - gemini-2.0-flash-exp - gemini-2.0-flash-realtime-exp - gemini-1.5-flash - gemini-1.5-flash-002 - gemini-1.5-pro - gemini-1.5-pro-002 - gemini-1.0-pro provider: type: string enum: - google realtimeConfig: description: 'This is the session configuration for the Gemini Flash 2.0 Multimodal Live API. Only applicable if the model `gemini-2.0-flash-realtime-exp` is selected.' allOf: - $ref: '#/components/schemas/GoogleRealtimeConfig' 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - model - provider GroqModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b enum: - openai/gpt-oss-20b - openai/gpt-oss-120b - deepseek-r1-distill-llama-70b - llama-3.3-70b-versatile - llama-3.1-405b-reasoning - llama-3.1-8b-instant - llama3-8b-8192 - llama3-70b-8192 - gemma2-9b-it - moonshotai/kimi-k2-instruct-0905 - meta-llama/llama-4-maverick-17b-128e-instruct - meta-llama/llama-4-scout-17b-16e-instruct - mistral-saba-24b - compound-beta - compound-beta-mini provider: 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b enum: - inflection_3_pi provider: type: string enum: - inflection-ai 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - model - provider MinimaxLLMModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 provider: type: string enum: - minimax model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b enum: - MiniMax-M2.7 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - provider - model OpenAIModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 provider: type: string description: This is the provider that will be used for the model. enum: - openai model: type: string description: 'This is the OpenAI model that will be used. When using Vapi OpenAI or your own Azure Credentials, you have the option to specify the region for the selected model. This shouldn''t be specified unless you have a specific reason to do so. Vapi will automatically find the fastest region that make sense. This is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/. @default undefined' enum: - gpt-5.4 - gpt-5.4-mini - gpt-5.4-nano - gpt-5.2 - gpt-5.2-chat-latest - gpt-5.1 - gpt-5.1-chat-latest - gpt-5 - gpt-5-chat-latest - gpt-5-mini - gpt-5-nano - gpt-4.1-2025-04-14 - gpt-4.1-mini-2025-04-14 - gpt-4.1-nano-2025-04-14 - gpt-4.1 - gpt-4.1-mini - gpt-4.1-nano - chatgpt-4o-latest - o3 - o3-mini - o4-mini - o1-mini - o1-mini-2024-09-12 - gpt-4o-realtime-preview-2024-10-01 - gpt-4o-realtime-preview-2024-12-17 - gpt-4o-mini-realtime-preview-2024-12-17 - gpt-realtime-2025-08-28 - gpt-realtime-mini-2025-12-15 - gpt-4o-mini-2024-07-18 - gpt-4o-mini - gpt-4o - gpt-4o-2024-05-13 - gpt-4o-2024-08-06 - gpt-4o-2024-11-20 - gpt-4-turbo - gpt-4-turbo-2024-04-09 - gpt-4-turbo-preview - gpt-4-0125-preview - gpt-4-1106-preview - gpt-4 - gpt-4-0613 - gpt-3.5-turbo - gpt-3.5-turbo-0125 - gpt-3.5-turbo-1106 - gpt-3.5-turbo-16k - gpt-3.5-turbo-0613 - gpt-4.1-2025-04-14:westus - gpt-4.1-2025-04-14:eastus2 - gpt-4.1-2025-04-14:eastus - gpt-4.1-2025-04-14:westus3 - gpt-4.1-2025-04-14:northcentralus - gpt-4.1-2025-04-14:southcentralus - gpt-4.1-2025-04-14:westeurope - gpt-4.1-2025-04-14:germanywestcentral - gpt-4.1-2025-04-14:polandcentral - gpt-4.1-2025-04-14:spaincentral - gpt-4.1-mini-2025-04-14:westus - gpt-4.1-mini-2025-04-14:eastus2 - gpt-4.1-mini-2025-04-14:eastus - gpt-4.1-mini-2025-04-14:westus3 - gpt-4.1-mini-2025-04-14:northcentralus - gpt-4.1-mini-2025-04-14:southcentralus - gpt-4.1-mini-2025-04-14:westeurope - gpt-4.1-mini-2025-04-14:germanywestcentral - gpt-4.1-mini-2025-04-14:polandcentral - gpt-4.1-mini-2025-04-14:spaincentral - gpt-4.1-nano-2025-04-14:westus - gpt-4.1-nano-2025-04-14:eastus2 - gpt-4.1-nano-2025-04-14:westus3 - gpt-4.1-nano-2025-04-14:northcentralus - gpt-4.1-nano-2025-04-14:southcentralus - gpt-4o-2024-11-20:swedencentral - gpt-4o-2024-11-20:westus - gpt-4o-2024-11-20:eastus2 - gpt-4o-2024-11-20:eastus - gpt-4o-2024-11-20:westus3 - gpt-4o-2024-11-20:southcentralus - gpt-4o-2024-11-20:westeurope - gpt-4o-2024-11-20:germanywestcentral - gpt-4o-2024-11-20:polandcentral - gpt-4o-2024-11-20:spaincentral - gpt-4o-2024-08-06:westus - gpt-4o-2024-08-06:westus3 - gpt-4o-2024-08-06:eastus - gpt-4o-2024-08-06:eastus2 - gpt-4o-2024-08-06:northcentralus - gpt-4o-2024-08-06:southcentralus - gpt-4o-mini-2024-07-18:westus - gpt-4o-mini-2024-07-18:westus3 - gpt-4o-mini-2024-07-18:eastus - gpt-4o-mini-2024-07-18:eastus2 - gpt-4o-mini-2024-07-18:northcentralus - gpt-4o-mini-2024-07-18:southcentralus - gpt-4o-2024-05-13:eastus2 - gpt-4o-2024-05-13:eastus - gpt-4o-2024-05-13:northcentralus - gpt-4o-2024-05-13:southcentralus - gpt-4o-2024-05-13:westus3 - gpt-4o-2024-05-13:westus - gpt-4-turbo-2024-04-09:eastus2 - gpt-4-0125-preview:eastus - gpt-4-0125-preview:northcentralus - gpt-4-0125-preview:southcentralus - gpt-4-1106-preview:australiaeast - gpt-4-1106-preview:canadaeast - gpt-4-1106-preview:france - gpt-4-1106-preview:india - gpt-4-1106-preview:norway - gpt-4-1106-preview:swedencentral - gpt-4-1106-preview:uk - gpt-4-1106-preview:westus - gpt-4-1106-preview:westus3 - gpt-4-0613:canadaeast - gpt-3.5-turbo-0125:canadaeast - gpt-3.5-turbo-0125:northcentralus - gpt-3.5-turbo-0125:southcentralus - gpt-3.5-turbo-1106:canadaeast - gpt-3.5-turbo-1106:westus fallbackModels: type: array description: These are the fallback models that will be used if the primary model fails. This shouldn't be specified unless you have a specific reason to do so. Vapi will automatically find the fastest fallbacks that make sense. example: - gpt-4-0125-preview - gpt-4-0613 items: type: string enum: - gpt-5.4 - gpt-5.4-mini - gpt-5.4-nano - gpt-5.2 - gpt-5.2-chat-latest - gpt-5.1 - gpt-5.1-chat-latest - gpt-5 - gpt-5-chat-latest - gpt-5-mini - gpt-5-nano - gpt-4.1-2025-04-14 - gpt-4.1-mini-2025-04-14 - gpt-4.1-nano-2025-04-14 - gpt-4.1 - gpt-4.1-mini - gpt-4.1-nano - chatgpt-4o-latest - o3 - o3-mini - o4-mini - o1-mini - o1-mini-2024-09-12 - gpt-4o-realtime-preview-2024-10-01 - gpt-4o-realtime-preview-2024-12-17 - gpt-4o-mini-realtime-preview-2024-12-17 - gpt-realtime-2025-08-28 - gpt-realtime-mini-2025-12-15 - gpt-4o-mini-2024-07-18 - gpt-4o-mini - gpt-4o - gpt-4o-2024-05-13 - gpt-4o-2024-08-06 - gpt-4o-2024-11-20 - gpt-4-turbo - gpt-4-turbo-2024-04-09 - gpt-4-turbo-preview - gpt-4-0125-preview - gpt-4-1106-preview - gpt-4 - gpt-4-0613 - gpt-3.5-turbo - gpt-3.5-turbo-0125 - gpt-3.5-turbo-1106 - gpt-3.5-turbo-16k - gpt-3.5-turbo-0613 - gpt-4.1-2025-04-14:westus - gpt-4.1-2025-04-14:eastus2 - gpt-4.1-2025-04-14:eastus - gpt-4.1-2025-04-14:westus3 - gpt-4.1-2025-04-14:northcentralus - gpt-4.1-2025-04-14:southcentralus - gpt-4.1-2025-04-14:westeurope - gpt-4.1-2025-04-14:germanywestcentral - gpt-4.1-2025-04-14:polandcentral - gpt-4.1-2025-04-14:spaincentral - gpt-4.1-mini-2025-04-14:westus - gpt-4.1-mini-2025-04-14:eastus2 - gpt-4.1-mini-2025-04-14:eastus - gpt-4.1-mini-2025-04-14:westus3 - gpt-4.1-mini-2025-04-14:northcentralus - gpt-4.1-mini-2025-04-14:southcentralus - gpt-4.1-mini-2025-04-14:westeurope - gpt-4.1-mini-2025-04-14:germanywestcentral - gpt-4.1-mini-2025-04-14:polandcentral - gpt-4.1-mini-2025-04-14:spaincentral - gpt-4.1-nano-2025-04-14:westus - gpt-4.1-nano-2025-04-14:eastus2 - gpt-4.1-nano-2025-04-14:westus3 - gpt-4.1-nano-2025-04-14:northcentralus - gpt-4.1-nano-2025-04-14:southcentralus - gpt-4o-2024-11-20:swedencentral - gpt-4o-2024-11-20:westus - gpt-4o-2024-11-20:eastus2 - gpt-4o-2024-11-20:eastus - gpt-4o-2024-11-20:westus3 - gpt-4o-2024-11-20:southcentralus - gpt-4o-2024-11-20:westeurope - gpt-4o-2024-11-20:germanywestcentral - gpt-4o-2024-11-20:polandcentral - gpt-4o-2024-11-20:spaincentral - gpt-4o-2024-08-06:westus - gpt-4o-2024-08-06:westus3 - gpt-4o-2024-08-06:eastus - gpt-4o-2024-08-06:eastus2 - gpt-4o-2024-08-06:northcentralus - gpt-4o-2024-08-06:southcentralus - gpt-4o-mini-2024-07-18:westus - gpt-4o-mini-2024-07-18:westus3 - gpt-4o-mini-2024-07-18:eastus - gpt-4o-mini-2024-07-18:eastus2 - gpt-4o-mini-2024-07-18:northcentralus - gpt-4o-mini-2024-07-18:southcentralus - gpt-4o-2024-05-13:eastus2 - gpt-4o-2024-05-13:eastus - gpt-4o-2024-05-13:northcentralus - gpt-4o-2024-05-13:southcentralus - gpt-4o-2024-05-13:westus3 - gpt-4o-2024-05-13:westus - gpt-4-turbo-2024-04-09:eastus2 - gpt-4-0125-preview:eastus - gpt-4-0125-preview:northcentralus - gpt-4-0125-preview:southcentralus - gpt-4-1106-preview:australiaeast - gpt-4-1106-preview:canadaeast - gpt-4-1106-preview:france - gpt-4-1106-preview:india - gpt-4-1106-preview:norway - gpt-4-1106-preview:swedencentral - gpt-4-1106-preview:uk - gpt-4-1106-preview:westus - gpt-4-1106-preview:westus3 - gpt-4-0613:canadaeast - gpt-3.5-turbo-0125:canadaeast - gpt-3.5-turbo-0125:northcentralus - gpt-3.5-turbo-0125:southcentralus - gpt-3.5-turbo-1106:canadaeast - gpt-3.5-turbo-1106:westus toolStrictCompatibilityMode: type: string description: 'Azure OpenAI doesn''t support `maxLength` right now https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/structured-outputs?tabs=python-secure%2Cdotnet-entra-id&pivots=programming-language-csharp#unsupported-type-specific-keywords. Need to strip. - `strip-parameters-with-unsupported-validation` will strip parameters with unsupported validation. - `strip-unsupported-validation` will keep the parameters but strip unsupported validation. @default `strip-unsupported-validation`' enum: - strip-parameters-with-unsupported-validation - strip-unsupported-validation promptCacheRetention: type: string description: 'This controls the prompt cache retention policy for models that support extended caching (GPT-4.1, GPT-5 series). - `in_memory`: Default behavior, cache retained in GPU memory only - `24h`: Extended caching, keeps cached prefixes active for up to 24 hours by offloading to GPU-local storage Only applies to models: gpt-5.4, gpt-5.4-mini, gpt-5.4-nano, gpt-5.2, gpt-5.1, gpt-5.1-codex, gpt-5.1-codex-mini, gpt-5.1-chat-latest, gpt-5, gpt-5-codex, gpt-4.1 @default undefined (uses API default which is ''in_memory'')' enum: - in_memory - 24h promptCacheKey: type: string description: 'This is the prompt cache key for models that support extended caching (GPT-4.1, GPT-5 series). Providing a cache key allows you to share cached prefixes across requests. @default undefined' maxLength: 64 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - provider - model OpenRouterModel: type: object properties: messages: description: This is the starting state for the conversation. type: array items: $ref: '#/components/schemas/OpenAIMessage' tools: type: array description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 provider: type: string enum: - openrouter 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - provider - model PerplexityAIModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 provider: type: string enum: - perplexity-ai model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b temperature: type: number description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency. minimum: 0 maximum: 2 maxTokens: type: number description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. minimum: 50 maximum: 10000 emotionRecognitionEnabled: type: boolean description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - provider - model TogetherAIModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 provider: type: string enum: - together-ai model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b temperature: type: number description: This is the temperature that will be used for calls. Default is 0 to leverage caching for lower latency. minimum: 0 maximum: 2 maxTokens: type: number description: This is the max number of tokens that the assistant will be allowed to generate in each turn of the conversation. Default is 250. minimum: 50 maximum: 10000 emotionRecognitionEnabled: type: boolean description: 'This determines whether we detect user''s emotion while they speak and send it as an additional info to model. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - provider - model HangupNode: type: object properties: type: type: string enum: - hangup name: type: string maxLength: 80 isStart: type: boolean description: This is whether or not the node is the start of the workflow. metadata: type: object description: This is for metadata you want to store on the task. required: - type - name WorkflowOpenAIModel: type: object properties: provider: type: string description: This is the provider of the model (`openai`). enum: - openai model: type: string description: 'This is the OpenAI model that will be used. When using Vapi OpenAI or your own Azure Credentials, you have the option to specify the region for the selected model. This shouldn''t be specified unless you have a specific reason to do so. Vapi will automatically find the fastest region that make sense. This is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.' maxLength: 100 enum: - gpt-5.4 - gpt-5.4-mini - gpt-5.4-nano - gpt-5.2 - gpt-5.2-chat-latest - gpt-5.1 - gpt-5.1-chat-latest - gpt-5 - gpt-5-chat-latest - gpt-5-mini - gpt-5-nano - gpt-4.1-2025-04-14 - gpt-4.1-mini-2025-04-14 - gpt-4.1-nano-2025-04-14 - gpt-4.1 - gpt-4.1-mini - gpt-4.1-nano - chatgpt-4o-latest - o3 - o3-mini - o4-mini - o1-mini - o1-mini-2024-09-12 - gpt-4o-mini-2024-07-18 - gpt-4o-mini - gpt-4o - gpt-4o-2024-05-13 - gpt-4o-2024-08-06 - gpt-4o-2024-11-20 - gpt-4-turbo - gpt-4-turbo-2024-04-09 - gpt-4-turbo-preview - gpt-4-0125-preview - gpt-4-1106-preview - gpt-4 - gpt-4-0613 - gpt-3.5-turbo - gpt-3.5-turbo-0125 - gpt-3.5-turbo-1106 - gpt-3.5-turbo-16k - gpt-3.5-turbo-0613 - gpt-4.1-2025-04-14:westus - gpt-4.1-2025-04-14:eastus2 - gpt-4.1-2025-04-14:eastus - gpt-4.1-2025-04-14:westus3 - gpt-4.1-2025-04-14:northcentralus - gpt-4.1-2025-04-14:southcentralus - gpt-4.1-2025-04-14:westeurope - gpt-4.1-2025-04-14:germanywestcentral - gpt-4.1-2025-04-14:polandcentral - gpt-4.1-2025-04-14:spaincentral - gpt-4.1-mini-2025-04-14:westus - gpt-4.1-mini-2025-04-14:eastus2 - gpt-4.1-mini-2025-04-14:eastus - gpt-4.1-mini-2025-04-14:westus3 - gpt-4.1-mini-2025-04-14:northcentralus - gpt-4.1-mini-2025-04-14:southcentralus - gpt-4.1-mini-2025-04-14:westeurope - gpt-4.1-mini-2025-04-14:germanywestcentral - gpt-4.1-mini-2025-04-14:polandcentral - gpt-4.1-mini-2025-04-14:spaincentral - gpt-4.1-nano-2025-04-14:westus - gpt-4.1-nano-2025-04-14:eastus2 - gpt-4.1-nano-2025-04-14:westus3 - gpt-4.1-nano-2025-04-14:northcentralus - gpt-4.1-nano-2025-04-14:southcentralus - gpt-4o-2024-11-20:swedencentral - gpt-4o-2024-11-20:westus - gpt-4o-2024-11-20:eastus2 - gpt-4o-2024-11-20:eastus - gpt-4o-2024-11-20:westus3 - gpt-4o-2024-11-20:southcentralus - gpt-4o-2024-11-20:westeurope - gpt-4o-2024-11-20:germanywestcentral - gpt-4o-2024-11-20:polandcentral - gpt-4o-2024-11-20:spaincentral - gpt-4o-2024-08-06:westus - gpt-4o-2024-08-06:westus3 - gpt-4o-2024-08-06:eastus - gpt-4o-2024-08-06:eastus2 - gpt-4o-2024-08-06:northcentralus - gpt-4o-2024-08-06:southcentralus - gpt-4o-mini-2024-07-18:westus - gpt-4o-mini-2024-07-18:westus3 - gpt-4o-mini-2024-07-18:eastus - gpt-4o-mini-2024-07-18:eastus2 - gpt-4o-mini-2024-07-18:northcentralus - gpt-4o-mini-2024-07-18:southcentralus - gpt-4o-2024-05-13:eastus2 - gpt-4o-2024-05-13:eastus - gpt-4o-2024-05-13:northcentralus - gpt-4o-2024-05-13:southcentralus - gpt-4o-2024-05-13:westus3 - gpt-4o-2024-05-13:westus - gpt-4-turbo-2024-04-09:eastus2 - gpt-4-0125-preview:eastus - gpt-4-0125-preview:northcentralus - gpt-4-0125-preview:southcentralus - gpt-4-1106-preview:australiaeast - gpt-4-1106-preview:canadaeast - gpt-4-1106-preview:france - gpt-4-1106-preview:india - gpt-4-1106-preview:norway - gpt-4-1106-preview:swedencentral - gpt-4-1106-preview:uk - gpt-4-1106-preview:westus - gpt-4-1106-preview:westus3 - gpt-4-0613:canadaeast - gpt-3.5-turbo-0125:canadaeast - gpt-3.5-turbo-0125:northcentralus - gpt-3.5-turbo-0125:southcentralus - gpt-3.5-turbo-1106:canadaeast - gpt-3.5-turbo-1106:westus temperature: type: number description: This is the temperature of the model. minimum: 0 maximum: 2 maxTokens: type: number description: This is the max tokens of the model. minimum: 50 maximum: 10000 required: - provider - model WorkflowAnthropicModel: type: object properties: provider: type: string description: This is the provider of the model (`anthropic`). enum: - anthropic model: type: string description: This is the specific model that will be used. maxLength: 100 enum: - claude-3-opus-20240229 - claude-3-sonnet-20240229 - claude-3-haiku-20240307 - claude-3-5-sonnet-20240620 - claude-3-5-sonnet-20241022 - claude-3-5-haiku-20241022 - claude-3-7-sonnet-20250219 - claude-opus-4-20250514 - claude-opus-4-5-20251101 - claude-opus-4-6 - claude-sonnet-4-20250514 - claude-sonnet-4-5-20250929 - claude-sonnet-4-6 - claude-haiku-4-5-20251001 thinking: description: 'This is the optional configuration for Anthropic''s thinking feature. - If provided, `maxTokens` must be greater than `thinking.budgetTokens`.' allOf: - $ref: '#/components/schemas/AnthropicThinkingConfig' temperature: type: number description: This is the temperature of the model. minimum: 0 maximum: 2 maxTokens: type: number description: This is the max tokens of the model. minimum: 50 maximum: 10000 required: - provider - model WorkflowAnthropicBedrockModel: type: object properties: provider: type: string description: This is the provider of the model (`anthropic-bedrock`). enum: - anthropic-bedrock model: type: string description: This is the specific model that will be used. maxLength: 100 enum: - claude-3-opus-20240229 - claude-3-sonnet-20240229 - claude-3-haiku-20240307 - claude-3-5-sonnet-20240620 - claude-3-5-sonnet-20241022 - claude-3-5-haiku-20241022 - claude-3-7-sonnet-20250219 - claude-opus-4-20250514 - claude-opus-4-5-20251101 - claude-opus-4-6 - claude-sonnet-4-20250514 - claude-sonnet-4-5-20250929 - claude-sonnet-4-6 - claude-haiku-4-5-20251001 thinking: description: 'This is the optional configuration for Anthropic''s thinking feature. - If provided, `maxTokens` must be greater than `thinking.budgetTokens`.' allOf: - $ref: '#/components/schemas/AnthropicThinkingConfig' temperature: type: number description: This is the temperature of the model. minimum: 0 maximum: 2 maxTokens: type: number description: This is the max tokens of the model. minimum: 50 maximum: 10000 required: - provider - model WorkflowGoogleModel: type: object properties: provider: type: string description: This is the provider of the model (`google`). enum: - google model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b maxLength: 100 enum: - gemini-3-flash-preview - gemini-2.5-pro - gemini-2.5-flash - gemini-2.5-flash-lite - gemini-2.0-flash-thinking-exp - gemini-2.0-pro-exp-02-05 - gemini-2.0-flash - gemini-2.0-flash-lite - gemini-2.0-flash-exp - gemini-2.0-flash-realtime-exp - gemini-1.5-flash - gemini-1.5-flash-002 - gemini-1.5-pro - gemini-1.5-pro-002 - gemini-1.0-pro temperature: type: number description: This is the temperature of the model. minimum: 0 maximum: 2 maxTokens: type: number description: This is the max tokens of the model. minimum: 50 maximum: 10000 required: - provider - model WorkflowCustomModel: type: object properties: provider: type: string description: This is the provider of the model (`custom-llm`). enum: - custom-llm metadataSendMode: type: string description: 'This determines whether metadata is sent in requests to the custom provider. - `off` will not send any metadata. payload will look like `{ messages }` - `variable` will send `assistant.metadata` as a variable on the payload. payload will look like `{ messages, metadata }` - `destructured` will send `assistant.metadata` fields directly on the payload. payload will look like `{ messages, ...metadata }` Further, `variable` and `destructured` will send `call`, `phoneNumber`, and `customer` objects in the payload. Default is `variable`.' enum: - 'off' - variable - destructured url: type: string description: These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1 headers: type: object description: These are the headers we'll use for the OpenAI client's `headers`. timeoutSeconds: type: number description: This 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 maxLength: 100 temperature: type: number description: This is the temperature of the model. minimum: 0 maximum: 2 maxTokens: type: number description: This is the max tokens of the model. minimum: 50 maximum: 10000 required: - provider - url - model GlobalNodePlan: type: object properties: enabled: type: boolean description: 'This is the flag to determine if this node is a global node @default false' default: false enterCondition: type: string description: 'This is the condition that will be checked to determine if the global node should be executed. @default ''''' maxLength: 1000 default: '' ConversationNode: type: object properties: type: type: string description: 'This is the Conversation node. This can be used to start a conversation with the customer. The flow is: - Workflow starts the conversation node - Model is active with the `prompt` and global context. - Model will call a tool to exit this node. - Workflow will extract variables from the conversation. - Workflow continues.' enum: - conversation model: description: 'This is the model for the node. This overrides `workflow.model`.' oneOf: - $ref: '#/components/schemas/WorkflowOpenAIModel' title: WorkflowOpenAIModel - $ref: '#/components/schemas/WorkflowAnthropicModel' title: WorkflowAnthropicModel - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel' title: WorkflowAnthropicBedrockModel - $ref: '#/components/schemas/WorkflowGoogleModel' title: WorkflowGoogleModel - $ref: '#/components/schemas/WorkflowCustomModel' title: WorkflowCustomModel transcriber: description: 'This is the transcriber for the node. This overrides `workflow.transcriber`.' oneOf: - $ref: '#/components/schemas/AssemblyAITranscriber' title: AssemblyAITranscriber - $ref: '#/components/schemas/AzureSpeechTranscriber' title: AzureSpeechTranscriber - $ref: '#/components/schemas/CustomTranscriber' title: CustomTranscriber - $ref: '#/components/schemas/DeepgramTranscriber' title: DeepgramTranscriber - $ref: '#/components/schemas/ElevenLabsTranscriber' title: ElevenLabsTranscriber - $ref: '#/components/schemas/GladiaTranscriber' title: GladiaTranscriber - $ref: '#/components/schemas/GoogleTranscriber' title: GoogleTranscriber - $ref: '#/components/schemas/SpeechmaticsTranscriber' title: SpeechmaticsTranscriber - $ref: '#/components/schemas/TalkscriberTranscriber' title: TalkscriberTranscriber - $ref: '#/components/schemas/OpenAITranscriber' title: OpenAITranscriber - $ref: '#/components/schemas/CartesiaTranscriber' title: CartesiaTranscriber - $ref: '#/components/schemas/SonioxTranscriber' title: SonioxTranscriber voice: description: 'This is the voice for the node. This overrides `workflow.voice`.' oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice tools: type: array description: 'These are the tools that the conversation node can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the conversation node can use during the call. To use transient tools, use `tools`. Both `tools` and `toolIds` can be used together.' type: array items: type: string prompt: type: string maxLength: 5000 globalNodePlan: description: This is the plan for the global node. allOf: - $ref: '#/components/schemas/GlobalNodePlan' variableExtractionPlan: description: "This is the plan that controls the variable extraction from\ \ the user's responses.\n\nUsage:\nUse `schema` to specify what you want\ \ to extract from the user's responses.\n```json\n{\n \"schema\": {\n\ \ \"type\": \"object\",\n \"properties\": {\n \"user\": {\n\ \ \"type\": \"object\",\n \"properties\": {\n \"\ name\": {\n \"type\": \"string\"\n },\n \"\ age\": {\n \"type\": \"number\"\n }\n }\n \ \ }\n }\n }\n}\n```\n\nThis will be extracted as `{{ user.name\ \ }}` and `{{ user.age }}` respectively.\n\n(Optional) Use `aliases` to\ \ create new variables.\n\n```json\n{\n \"aliases\": [\n {\n \ \ \"key\": \"userAge\",\n \"value\": \"{{user.age}}\"\n },\n \ \ {\n \"key\": \"userName\",\n \"value\": \"{{user.name}}\"\ \n }\n ]\n}\n```\n\nThis will be extracted as `{{ userAge }}` and\ \ `{{ userName }}` respectively.\n\nNote: The `schema` field is required\ \ for Conversation nodes if you want to extract variables from the user's\ \ responses. `aliases` is just a convenience." allOf: - $ref: '#/components/schemas/VariableExtractionPlan' name: type: string maxLength: 80 isStart: type: boolean description: This is whether or not the node is the start of the workflow. metadata: type: object description: This is for metadata you want to store on the task. required: - type - name ToolNode: type: object properties: type: type: string description: 'This is the Tool node. This can be used to call a tool in your workflow. The flow is: - Workflow starts the tool node - Model is called to extract parameters needed by the tool from the conversation history - Tool is called with the parameters - Server returns a response - Workflow continues with the response' enum: - tool tool: description: This is the tool to call. To use an existing tool, send `toolId` instead. oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolId: type: string description: This is the tool to call. To use a transient tool, send `tool` instead. name: type: string maxLength: 80 isStart: type: boolean description: This is whether or not the node is the start of the workflow. metadata: type: object description: This is for metadata you want to store on the task. required: - type - name VoicemailDetectionBackoffPlan: type: object properties: startAtSeconds: type: number description: This is the number of seconds to wait before starting the first retry attempt. minimum: 0 default: 5 frequencySeconds: type: number description: This is the interval in seconds between retry attempts. minimum: 2.5 default: 5 maxRetries: type: number description: This is the maximum number of retry attempts before giving up. minimum: 1 maximum: 10 default: 6 GoogleVoicemailDetectionPlan: type: object properties: beepMaxAwaitSeconds: type: number description: 'This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message - If we detect a voicemail beep before this, we will speak the message at that point. - Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case. @default 30 @min 0 @max 60' minimum: 0 maximum: 30 default: 30 provider: type: string description: This is the provider to use for voicemail detection. enum: - google backoffPlan: description: This is the backoff plan for the voicemail detection. allOf: - $ref: '#/components/schemas/VoicemailDetectionBackoffPlan' type: type: string description: 'This is the detection type to use for voicemail detection. - ''audio'': Uses native audio models (default) - ''transcript'': Uses ASR/transcript-based detection @default ''audio'' (audio detection)' enum: - audio - transcript required: - provider OpenAIVoicemailDetectionPlan: type: object properties: beepMaxAwaitSeconds: type: number description: 'This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message - If we detect a voicemail beep before this, we will speak the message at that point. - Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case. @default 30 @min 0 @max 60' minimum: 0 maximum: 30 default: 30 provider: type: string description: This is the provider to use for voicemail detection. enum: - openai backoffPlan: description: This is the backoff plan for the voicemail detection. allOf: - $ref: '#/components/schemas/VoicemailDetectionBackoffPlan' type: type: string description: 'This is the detection type to use for voicemail detection. - ''audio'': Uses native audio models (default) - ''transcript'': Uses ASR/transcript-based detection @default ''audio'' (audio detection)' enum: - audio - transcript required: - provider TwilioVoicemailDetectionPlan: type: object properties: provider: type: string description: This is the provider to use for voicemail detection. enum: - twilio voicemailDetectionTypes: type: array description: 'These are the AMD messages from Twilio that are considered as voicemail. Default is [''machine_end_beep'', ''machine_end_silence'']. @default {Array} [''machine_end_beep'', ''machine_end_silence'']' enum: - machine_start - human - fax - unknown - machine_end_beep - machine_end_silence - machine_end_other example: - machine_end_beep - machine_end_silence items: type: string enum: - machine_start - human - fax - unknown - machine_end_beep - machine_end_silence - machine_end_other enabled: type: boolean description: 'This sets whether the assistant should detect voicemail. Defaults to true. @default true' machineDetectionTimeout: type: number description: 'The number of seconds that Twilio should attempt to perform answering machine detection before timing out and returning AnsweredBy as unknown. Default is 30 seconds. Increasing this value will provide the engine more time to make a determination. This can be useful when DetectMessageEnd is provided in the MachineDetection parameter and there is an expectation of long answering machine greetings that can exceed 30 seconds. Decreasing this value will reduce the amount of time the engine has to make a determination. This can be particularly useful when the Enable option is provided in the MachineDetection parameter and you want to limit the time for initial detection. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 30' minimum: 3 maximum: 59 machineDetectionSpeechThreshold: type: number description: 'The number of milliseconds that is used as the measuring stick for the length of the speech activity. Durations lower than this value will be interpreted as a human, longer as a machine. Default is 2400 milliseconds. Increasing this value will reduce the chance of a False Machine (detected machine, actually human) for a long human greeting (e.g., a business greeting) but increase the time it takes to detect a machine. Decreasing this value will reduce the chances of a False Human (detected human, actually machine) for short voicemail greetings. The value of this parameter may need to be reduced by more than 1000ms to detect very short voicemail greetings. A reduction of that significance can result in increased False Machine detections. Adjusting the MachineDetectionSpeechEndThreshold is likely the better approach for short voicemails. Decreasing MachineDetectionSpeechThreshold will also reduce the time it takes to detect a machine. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 2400' minimum: 1000 maximum: 6000 machineDetectionSpeechEndThreshold: type: number description: 'The number of milliseconds of silence after speech activity at which point the speech activity is considered complete. Default is 1200 milliseconds. Increasing this value will typically be used to better address the short voicemail greeting scenarios. For short voicemails, there is typically 1000-2000ms of audio followed by 1200-2400ms of silence and then additional audio before the beep. Increasing the MachineDetectionSpeechEndThreshold to ~2500ms will treat the 1200-2400ms of silence as a gap in the greeting but not the end of the greeting and will result in a machine detection. The downsides of such a change include: - Increasing the delay for human detection by the amount you increase this parameter, e.g., a change of 1200ms to 2500ms increases human detection delay by 1300ms. - Cases where a human has two utterances separated by a period of silence (e.g. a "Hello", then 2000ms of silence, and another "Hello") may be interpreted as a machine. Decreasing this value will result in faster human detection. The consequence is that it can lead to increased False Human (detected human, actually machine) detections because a silence gap in a voicemail greeting (not necessarily just in short voicemail scenarios) can be incorrectly interpreted as the end of speech. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 1200' minimum: 500 maximum: 5000 machineDetectionSilenceTimeout: type: number description: 'The number of milliseconds of initial silence after which an unknown AnsweredBy result will be returned. Default is 5000 milliseconds. Increasing this value will result in waiting for a longer period of initial silence before returning an ''unknown'' AMD result. Decreasing this value will result in waiting for a shorter period of initial silence before returning an ''unknown'' AMD result. Check the [Twilio docs](https://www.twilio.com/docs/voice/answering-machine-detection#optional-api-tuning-parameters) for more info. @default 5000' minimum: 2000 maximum: 10000 required: - provider VapiVoicemailDetectionPlan: type: object properties: beepMaxAwaitSeconds: type: number description: 'This is the maximum duration from the start of the call that we will wait for a voicemail beep, before speaking our message - If we detect a voicemail beep before this, we will speak the message at that point. - Setting too low a value means that the bot will start speaking its voicemail message too early. If it does so before the actual beep, it will get cut off. You should definitely tune this to your use case. @default 30 @min 0 @max 60' minimum: 0 maximum: 30 default: 30 provider: type: string description: This is the provider to use for voicemail detection. enum: - vapi backoffPlan: description: This is the backoff plan for the voicemail detection. allOf: - $ref: '#/components/schemas/VoicemailDetectionBackoffPlan' type: type: string description: 'This is the detection type to use for voicemail detection. - ''audio'': Uses native audio models (default) - ''transcript'': Uses ASR/transcript-based detection @default ''audio'' (audio detection)' enum: - audio - transcript required: - provider TransferHookAction: type: object properties: type: type: string description: This is the type of action - must be "transfer" enum: - transfer destination: description: This is the destination details for the transfer - can be a phone number or SIP URI oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination required: - type FunctionCallHookAction: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - function description: The type of tool. "function" for Function tool. async: type: boolean example: false description: "This determines if the tool is async.\n\n If async, the assistant\ \ will move forward without waiting for your server to respond. This is\ \ useful if you just want to trigger something on your server.\n\n If\ \ sync, the assistant will wait for your server to respond. This is useful\ \ if want assistant to respond with the result from your server.\n\n \ \ Defaults to synchronous (`false`)." server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' variableExtractionPlan: description: Plan to extract variables from the tool response allOf: - $ref: '#/components/schemas/VariableExtractionPlan' parameters: description: Static key-value pairs merged into the request body. Values support Liquid templates. type: array items: $ref: '#/components/schemas/ToolParameter' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' function: description: This is the function definition of the tool. allOf: - $ref: '#/components/schemas/OpenAIFunction' required: - type SayHookAction: type: object properties: type: type: string description: This is the type of action - must be "say" enum: - say prompt: description: 'This is the prompt for the assistant to generate a response based on existing conversation. Can be a string or an array of chat messages.' oneOf: - type: string title: String - type: array items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage title: MessageArray examples: - Ask the user if they're still in the call - - role: system content: You are a helpful assistant, and would like to know if the user is still in the call based on the conversation history in {{transcript}} exact: type: object description: This is the message to say required: - type MessageAddHookAction: type: object properties: type: type: string description: This is the type of action - must be "message.add" enum: - message.add message: description: The message to add to the conversation in OpenAI format example: role: system content: Context update from hook allOf: - $ref: '#/components/schemas/OpenAIMessage' triggerResponseEnabled: type: boolean description: Whether to trigger an assistant response after adding the message default: true required: - type - message CallHookFilter: type: object properties: type: type: string description: This is the type of filter - currently only "oneOf" is supported enum: - oneOf maxLength: 1000 key: type: string description: This is the key to filter on (e.g. "call.endedReason") maxLength: 1000 oneOf: description: This is the array of possible values to match against type: array items: type: string maxLength: 1000 required: - type - key - oneOf CallHookCallEnding: type: object properties: 'on': type: string description: This is the event that triggers this hook enum: - call.ending maxLength: 1000 do: type: array description: This is the set of actions to perform when the hook triggers items: oneOf: - $ref: '#/components/schemas/ToolCallHookAction' title: ToolCallHookAction - $ref: '#/components/schemas/MessageAddHookAction' title: MessageAddHookAction filters: description: This is the set of filters that must match for the hook to trigger type: array items: $ref: '#/components/schemas/CallHookFilter' required: - 'on' - do CallHookAssistantSpeechInterrupted: type: object properties: 'on': type: string description: This is the event that triggers this hook enum: - assistant.speech.interrupted maxLength: 1000 do: type: array description: This is the set of actions to perform when the hook triggers items: oneOf: - $ref: '#/components/schemas/SayHookAction' title: SayHookAction - $ref: '#/components/schemas/ToolCallHookAction' title: ToolCallHookAction - $ref: '#/components/schemas/MessageAddHookAction' title: MessageAddHookAction required: - 'on' - do CallHookCustomerSpeechInterrupted: type: object properties: 'on': type: string description: This is the event that triggers this hook enum: - customer.speech.interrupted maxLength: 1000 do: type: array description: This is the set of actions to perform when the hook triggers items: oneOf: - $ref: '#/components/schemas/SayHookAction' title: SayHookAction - $ref: '#/components/schemas/ToolCallHookAction' title: ToolCallHookAction - $ref: '#/components/schemas/MessageAddHookAction' title: MessageAddHookAction required: - 'on' - do ToolCallHookAction: type: object properties: type: type: string description: This is the type of action - must be "tool" enum: - tool tool: description: This is the tool to call. To use an existing tool, send `toolId` instead. oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolId: type: string description: This is the tool to call. To use a transient tool, send `tool` instead. required: - type CustomerSpeechTimeoutOptions: type: object properties: timeoutSeconds: type: number description: 'This is the timeout in seconds before action is triggered. The clock starts when the assistant finishes speaking and remains active until the user speaks. @default 7.5 @minimum 2 @maximum 1000' minimum: 1 maximum: 1000 triggerMaxCount: type: number description: 'This is the maximum number of times the hook will trigger in a call. @default 3' minimum: 1 maximum: 10 triggerResetMode: type: object description: 'This is whether the counter for hook trigger resets the user speaks. @default never' required: - timeoutSeconds CallHookCustomerSpeechTimeout: type: object properties: 'on': type: string description: Must be either "customer.speech.timeout" or match the pattern "customer.speech.timeout[property=value]" maxLength: 1000 do: type: array description: This is the set of actions to perform when the hook triggers items: oneOf: - $ref: '#/components/schemas/SayHookAction' title: SayHookAction - $ref: '#/components/schemas/ToolCallHookAction' title: ToolCallHookAction - $ref: '#/components/schemas/MessageAddHookAction' title: MessageAddHookAction options: description: This is the set of filters that must match for the hook to trigger allOf: - $ref: '#/components/schemas/CustomerSpeechTimeoutOptions' name: type: string description: 'This is the name of the hook, it can be set by the user to identify the hook. If no name is provided, the hook will be auto generated as UUID. @default UUID' maxLength: 1000 required: - 'on' - do CallHookModelResponseTimeout: type: object properties: 'on': type: string description: This is the event that triggers this hook enum: - model.response.timeout maxLength: 1000 do: type: array description: This is the set of actions to perform when the hook triggers items: oneOf: - $ref: '#/components/schemas/SayHookAction' title: SayHookAction - $ref: '#/components/schemas/ToolCallHookAction' title: ToolCallHookAction - $ref: '#/components/schemas/MessageAddHookAction' title: MessageAddHookAction required: - 'on' - do AIEdgeCondition: type: object properties: type: type: string enum: - ai prompt: type: string description: This is the prompt for the AI edge condition. It should evaluate to a boolean. maxLength: 1000 required: - type - prompt Edge: type: object properties: condition: oneOf: - $ref: '#/components/schemas/AIEdgeCondition' title: AIEdgeCondition from: type: string maxLength: 80 to: type: string maxLength: 80 metadata: type: object description: This is for metadata you want to store on the edge. required: - from - to RecordingConsentPlanStayOnLine: type: object properties: message: type: string description: 'This is the message asking for consent to record the call. If the type is `stay-on-line`, the message should ask the user to hang up if they do not consent. If the type is `verbal`, the message should ask the user to verbally consent or decline.' maxLength: 1000 examples: - For quality purposes, this call may be recorded. Please stay on the line if you agree or end the call if you do not consent. - This call may be recorded for quality and training purposes. Say "I agree" if you consent to being recorded, or "I disagree" if you do not consent. voice: description: 'This is the voice to use for the consent message. If not specified, inherits from the assistant''s voice. Use a different voice for the consent message for a better user experience.' oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice firstMessageMode: type: string description: 'This controls whether the consent assistant speaks first or waits for the caller to speak first. Use: - `assistant-speaks-first` (default) to have the consent assistant play the consent message as soon as the call is answered. - `assistant-waits-for-user` to have the consent assistant wait for the caller to speak before playing the consent message. We strongly recommend `assistant-waits-for-user` for outbound calls. Some telephony providers signal "answered" while the line is still ringing, which can cause the consent message to play into a ringing line and be missed by the caller. Waiting for the caller to speak first guarantees they hear the full consent message. Note: when combined with `type: ''stay-on-line''`, silence only counts toward consent after the caller has spoken at least once. @default ''assistant-speaks-first''' enum: - assistant-speaks-first - assistant-waits-for-user default: assistant-speaks-first example: assistant-speaks-first type: type: string description: This is the type of recording consent plan. This type assumes consent is granted if the user stays on the line. enum: - stay-on-line example: stay-on-line waitSeconds: type: number description: Number of seconds to wait before transferring to the assistant if user stays on the call minimum: 1 maximum: 6 default: 3 example: 3 required: - message - type RecordingConsentPlanVerbal: type: object properties: message: type: string description: 'This is the message asking for consent to record the call. If the type is `stay-on-line`, the message should ask the user to hang up if they do not consent. If the type is `verbal`, the message should ask the user to verbally consent or decline.' maxLength: 1000 examples: - For quality purposes, this call may be recorded. Please stay on the line if you agree or end the call if you do not consent. - This call may be recorded for quality and training purposes. Say "I agree" if you consent to being recorded, or "I disagree" if you do not consent. voice: description: 'This is the voice to use for the consent message. If not specified, inherits from the assistant''s voice. Use a different voice for the consent message for a better user experience.' oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice firstMessageMode: type: string description: 'This controls whether the consent assistant speaks first or waits for the caller to speak first. Use: - `assistant-speaks-first` (default) to have the consent assistant play the consent message as soon as the call is answered. - `assistant-waits-for-user` to have the consent assistant wait for the caller to speak before playing the consent message. We strongly recommend `assistant-waits-for-user` for outbound calls. Some telephony providers signal "answered" while the line is still ringing, which can cause the consent message to play into a ringing line and be missed by the caller. Waiting for the caller to speak first guarantees they hear the full consent message. Note: when combined with `type: ''stay-on-line''`, silence only counts toward consent after the caller has spoken at least once. @default ''assistant-speaks-first''' enum: - assistant-speaks-first - assistant-waits-for-user default: assistant-speaks-first example: assistant-speaks-first type: type: string description: This is the type of recording consent plan. This type assumes consent is granted if the user verbally consents or declines. enum: - verbal example: verbal declineTool: type: object description: Tool to execute if user verbally declines recording consent declineToolId: type: string description: ID of existing tool to execute if user verbally declines recording consent required: - message - type SecurityFilterBase: type: object properties: {} SecurityFilterPlan: type: object properties: enabled: type: boolean description: 'Whether the security filter is enabled. @default false' default: false filters: description: 'Array of security filter types to apply. If array is not empty, only those security filters are run.' example: '[{ type: "sql-injection" }, { type: "xss" }]' type: array items: $ref: '#/components/schemas/SecurityFilterBase' mode: type: string description: 'Mode of operation when a security threat is detected. - ''sanitize'': Remove or replace the threatening content - ''reject'': Replace the entire transcript with replacement text - ''replace'': Replace threatening patterns with replacement text @default ''sanitize''' enum: - sanitize - reject - replace default: sanitize replacementText: type: string description: 'Text to use when replacing filtered content. @default ''[FILTERED]''' default: '[FILTERED]' CompliancePlan: type: object properties: hipaaEnabled: type: boolean description: When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. Only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. This setting is only honored if the organization is on an Enterprise subscription or has purchased the HIPAA add-on. 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.' example: pciEnabled: false securityFilterPlan: description: This is the security filter plan for the assistant. It allows filtering of transcripts for security threats before sending to LLM. allOf: - $ref: '#/components/schemas/SecurityFilterPlan' recordingConsentPlan: oneOf: - $ref: '#/components/schemas/RecordingConsentPlanStayOnLine' title: RecordingConsentStayOnLinePlan - $ref: '#/components/schemas/RecordingConsentPlanVerbal' title: RecordingConsentPlanVerbal discriminator: propertyName: type mapping: stay-on-line: '#/components/schemas/RecordingConsentPlanStayOnLine' verbal: '#/components/schemas/RecordingConsentPlanVerbal' StructuredDataPlan: type: object properties: messages: description: "These are the messages used to generate the structured data.\n\ \n@default: ```\n[\n {\n \"role\": \"system\",\n \"content\": \"\ You are an expert data extractor. You will be given a transcript of a\ \ call. Extract structured data per the JSON Schema. DO NOT return anything\ \ except the structured data.\\n\\nJson Schema:\\\\n{{schema}}\\n\\nOnly\ \ respond with the JSON.\"\n },\n {\n \"role\": \"user\",\n \"\ content\": \"Here is the transcript:\\n\\n{{transcript}}\\n\\n. Here is\ \ the ended reason of the call:\\n\\n{{endedReason}}\\n\\n\"\n }\n]```\n\ \nYou can customize by providing any messages you want.\n\nHere are the\ \ template variables available:\n- {{transcript}}: the transcript of the\ \ call from `call.artifact.transcript`- {{systemPrompt}}: the system prompt\ \ of the call from `assistant.model.messages[type=system].content`- {{messages}}:\ \ the messages of the call from `assistant.model.messages`- {{schema}}:\ \ the schema of the structured data from `structuredDataPlan.schema`-\ \ {{endedReason}}: the ended reason of the call from `call.endedReason`" type: array items: type: object enabled: type: boolean description: 'This determines whether structured data is generated and stored in `call.analysis.structuredData`. Defaults to false. Usage: - If you want to extract structured data, set this to true and provide a `schema`. @default false' schema: description: 'This is the schema of the structured data. The output is stored in `call.analysis.structuredData`. Complete guide on JSON Schema can be found [here](https://ajv.js.org/json-schema.html#json-data-type).' allOf: - $ref: '#/components/schemas/JsonSchema' timeoutSeconds: type: number description: 'This is how long the request is tried before giving up. When request times out, `call.analysis.structuredData` will be empty. Usage: - To guarantee the structured data is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond. @default 5 seconds' minimum: 1 maximum: 60 StructuredDataMultiPlan: type: object properties: key: type: string description: This is the key of the structured data plan in the catalog. plan: description: This is an individual structured data plan in the catalog. allOf: - $ref: '#/components/schemas/StructuredDataPlan' required: - key - plan SuccessEvaluationPlan: type: object properties: rubric: type: string enum: - NumericScale - DescriptiveScale - Checklist - Matrix - PercentageScale - LikertScale - AutomaticRubric - PassFail description: 'This enforces the rubric of the evaluation. The output is stored in `call.analysis.successEvaluation`. Options include: - ''NumericScale'': A scale of 1 to 10. - ''DescriptiveScale'': A scale of Excellent, Good, Fair, Poor. - ''Checklist'': A checklist of criteria and their status. - ''Matrix'': A grid that evaluates multiple criteria across different performance levels. - ''PercentageScale'': A scale of 0% to 100%. - ''LikertScale'': A scale of Strongly Agree, Agree, Neutral, Disagree, Strongly Disagree. - ''AutomaticRubric'': Automatically break down evaluation into several criteria, each with its own score. - ''PassFail'': A simple ''true'' if call passed, ''false'' if not. Default is ''PassFail''.' messages: description: "These are the messages used to generate the success evaluation.\n\ \n@default: ```\n[\n {\n \"role\": \"system\",\n \"content\": \"\ You are an expert call evaluator. You will be given a transcript of a\ \ call and the system prompt of the AI participant. Determine if the call\ \ was successful based on the objectives inferred from the system prompt.\ \ DO NOT return anything except the result.\\n\\nRubric:\\\\n{{rubric}}\\\ n\\nOnly respond with the result.\"\n },\n {\n \"role\": \"user\"\ ,\n \"content\": \"Here is the transcript:\\n\\n{{transcript}}\\n\\\ n\"\n },\n {\n \"role\": \"user\",\n \"content\": \"Here was the\ \ system prompt of the call:\\n\\n{{systemPrompt}}\\n\\n. Here is the\ \ ended reason of the call:\\n\\n{{endedReason}}\\n\\n\"\n }\n]```\n\n\ You can customize by providing any messages you want.\n\nHere are the\ \ template variables available:\n- {{transcript}}: the transcript of the\ \ call from `call.artifact.transcript`- {{systemPrompt}}: the system prompt\ \ of the call from `assistant.model.messages[type=system].content`- {{messages}}:\ \ the messages of the call from `assistant.model.messages`- {{rubric}}:\ \ the rubric of the success evaluation from `successEvaluationPlan.rubric`-\ \ {{endedReason}}: the ended reason of the call from `call.endedReason`" type: array items: type: object enabled: type: boolean description: 'This determines whether a success evaluation is generated and stored in `call.analysis.successEvaluation`. Defaults to true. Usage: - If you want to disable the success evaluation, set this to false. @default true' timeoutSeconds: type: number description: 'This is how long the request is tried before giving up. When request times out, `call.analysis.successEvaluation` will be empty. Usage: - To guarantee the success evaluation is generated, set this value high. Note, this will delay the end of call report in cases where model is slow to respond. @default 5 seconds' minimum: 1 maximum: 60 AnalysisPlan: type: object properties: minMessagesThreshold: type: number description: 'The minimum number of messages required to run the analysis plan. If the number of messages is less than this, analysis will be skipped. @default 2' deprecated: true minimum: 0 summaryPlan: description: This is the plan for generating the summary of the call. This outputs to `call.analysis.summary`. deprecated: true allOf: - $ref: '#/components/schemas/SummaryPlan' structuredDataPlan: description: This is the plan for generating the structured data from the call. This outputs to `call.analysis.structuredData`. deprecated: true allOf: - $ref: '#/components/schemas/StructuredDataPlan' 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`. deprecated: true 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`. deprecated: true allOf: - $ref: '#/components/schemas/SuccessEvaluationPlan' outcomeIds: description: 'This is an array of outcome UUIDs to be calculated during analysis. The outcomes will be calculated and stored in `call.analysis.outcomes`.' deprecated: true type: array items: type: string TranscriptPlan: type: object properties: enabled: type: boolean description: 'This determines whether the transcript is stored in `call.artifact.transcript`. Defaults to true. @default true' example: true assistantName: type: string description: 'This is the name of the assistant in the transcript. Defaults to ''AI''. Usage: - 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'': ``` User: Hello, how are you? Buyer: I''m fine. User: Do you want to buy a car? Buyer: No. ``` @default ''AI''' userName: type: string description: 'This is the name of the user in the transcript. Defaults to ''User''. Usage: - 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'': ``` Seller: Hello, how are you? AI: I''m fine. Seller: Do you want to buy a car? AI: No. ``` @default ''User''' ComplianceOverride: type: object properties: forceStoreOnHipaaEnabled: type: boolean description: Force storage for this output under HIPAA. Only enable if output contains no sensitive data. example: false CreateStructuredOutputDTO: type: object properties: type: type: string description: 'This is the type of structured output. - ''ai'': Uses an LLM to extract structured data from the conversation (default). - ''regex'': Uses a regex pattern to extract data from the transcript without an LLM. Defaults to ''ai'' if not specified.' enum: - ai - regex default: ai regex: type: string description: 'This is the regex pattern to match against the transcript. Only used when type is ''regex''. Supports both raw patterns (e.g. ''\d+'') and regex literal format (e.g. ''/\d+/gi''). Uses RE2 syntax for safety. The result depends on the schema type: - boolean: true if the pattern matches, false otherwise - string: the first match or first capture group - number/integer: the first match parsed as a number - array: all matches' minLength: 1 maxLength: 1000 model: description: 'This is the model that will be used to extract the structured output. To provide your own custom system and user prompts for structured output extraction, populate the messages array with your system and user messages. You can specify liquid templating in your system and user messages. Between the system or user messages, you must reference either ''transcript'' or ''messages'' with the `{{}}` syntax to access the conversation history. Between the system or user messages, you must reference a variation of the structured output with the `{{}}` syntax to access the structured output definition. i.e.: `{{structuredOutput}}` `{{structuredOutput.name}}` `{{structuredOutput.description}}` `{{structuredOutput.schema}}` If model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts. If messages or required fields are not specified, the default system and user prompts will be used.' oneOf: - $ref: '#/components/schemas/WorkflowOpenAIModel' title: WorkflowOpenAIModel - $ref: '#/components/schemas/WorkflowAnthropicModel' title: WorkflowAnthropicModel - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel' title: WorkflowAnthropicBedrockModel - $ref: '#/components/schemas/WorkflowGoogleModel' title: WorkflowGoogleModel - $ref: '#/components/schemas/WorkflowCustomModel' title: WorkflowCustomModel compliancePlan: description: Compliance configuration for this output. Only enable overrides if no sensitive data will be stored. example: forceStoreOnHipaaEnabled: false allOf: - $ref: '#/components/schemas/ComplianceOverride' name: type: string description: This is the name of the structured output. minLength: 1 maxLength: 40 schema: description: 'This is the JSON Schema definition for the structured output. This is required when creating a structured output. Defines the structure and validation rules for the data that will be extracted. Supports all JSON Schema features including: - Objects and nested properties - Arrays and array validation - String, number, boolean, and null types - Enums and const values - Validation constraints (min/max, patterns, etc.) - Composition with allOf, anyOf, oneOf' allOf: - $ref: '#/components/schemas/JsonSchema' description: type: string description: 'This is the description of what the structured output extracts. Use this to provide context about what data will be extracted and how it will be used.' assistantIds: description: 'These are the assistant IDs that this structured output is linked to. When linked to assistants, this structured output will be available for extraction during those assistant''s calls.' type: array items: type: string workflowIds: description: 'These are the workflow IDs that this structured output is linked to. When linked to workflows, this structured output will be available for extraction during those workflow''s execution.' type: array items: type: string required: - name - schema ScorecardMetric: type: object properties: structuredOutputId: type: string description: 'This is the unique identifier for the structured output that will be used to evaluate the scorecard. The structured output must be of type number or boolean only for now.' conditions: description: 'These are the conditions that will be used to evaluate the scorecard. Each condition will have a comparator, value, and points that will be used to calculate the final score. The points will be added to the overall score if the condition is met. The overall score will be normalized to a 100 point scale to ensure uniformity across different scorecards.' type: array items: type: object required: - structuredOutputId - conditions CreateScorecardDTO: type: object properties: name: type: string description: This is the name of the scorecard. It is only for user reference and will not be used for any evaluation. maxLength: 80 description: type: string description: This is the description of the scorecard. It is only for user reference and will not be used for any evaluation. maxLength: 500 metrics: description: 'These are the metrics that will be used to evaluate the scorecard. Each metric will have a set of conditions and points that will be used to generate the score.' type: array items: $ref: '#/components/schemas/ScorecardMetric' assistantIds: description: 'These are the assistant IDs that this scorecard is linked to. When linked to assistants, this scorecard will be available for evaluation during those assistants'' calls.' type: array items: type: string required: - metrics ArtifactPlan: type: object properties: recordingEnabled: type: boolean description: 'This determines whether assistant''s calls are recorded. Defaults to true. Usage: - If you don''t want to record the calls, set this to false. - 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. You can find the recording at `call.artifact.recordingUrl` and `call.artifact.stereoRecordingUrl` after the call is ended. @default true' example: true recordingFormat: type: string description: 'This determines the format of the recording. Defaults to `wav;l16`. @default ''wav;l16''' enum: - wav;l16 - mp3 recordingUseCustomStorageEnabled: type: boolean description: 'This determines whether to use custom storage (S3 or GCP) for call recordings when storage credentials are configured. When set to false, recordings will be stored on Vapi''s storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store recordings on Vapi''s storage for this assistant. - Set to true (or leave unset) to use your custom storage for recordings when available. @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. You can find the video recording at `call.artifact.videoRecordingUrl` after the call is ended. @default false' example: false fullMessageHistoryEnabled: type: boolean description: This determines whether the artifact contains the full message history, even after handoff context engineering. Defaults to 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`. You can find the packet capture at `call.artifact.pcapUrl` after the call is ended. @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. If credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it. Usage: - If you want to upload the packet capture to a specific path, set this to the path. Example: `/my-assistant-captures`. - If you want to upload the packet capture to the root of the bucket, set this to `/`. @default ''/''' example: /pcaps pcapUseCustomStorageEnabled: type: boolean description: 'This determines whether to use custom storage (S3 or GCP) for SIP packet captures when storage credentials are configured. When set to false, packet captures will be stored on Vapi''s storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store packet captures on Vapi''s storage for this assistant. - Set to true (or leave unset) to use your custom storage for packet captures when available. @default true' example: true loggingEnabled: type: boolean description: 'This determines whether the call logs are enabled. Defaults to true. @default true' example: true loggingUseCustomStorageEnabled: type: boolean description: 'This determines whether to use custom storage (S3 or GCP) for call logs when storage credentials are configured. When set to false, logs will be stored on Vapi''s storage instead of your custom storage, even if you have custom storage credentials configured. Usage: - Set to false if you have custom storage configured but want to store logs on Vapi''s storage for this assistant. - Set to true (or leave unset) to use your custom storage for logs when available. @default true' example: true 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. If credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it. Usage: - If you want to upload the recording to a specific path, set this to the path. Example: `/my-assistant-recordings`. - If you want to upload the recording to the root of the bucket, set this to `/`. @default ''/''' structuredOutputIds: description: 'This is an array of structured output IDs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended.' type: array items: type: string structuredOutputs: description: 'This is an array of transient structured outputs to be calculated during the call. The outputs will be extracted and stored in `call.artifact.structuredOutputs` after the call is ended. Use this to provide inline structured output configurations instead of referencing existing ones via structuredOutputIds.' type: array items: $ref: '#/components/schemas/CreateStructuredOutputDTO' scorecardIds: description: 'This is an array of scorecard IDs that will be evaluated based on the structured outputs extracted during the call. The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has ended.' type: array items: type: string scorecards: description: 'This is the array of scorecards that will be evaluated based on the structured outputs extracted during the call. The scorecards will be evaluated and the results will be stored in `call.artifact.scorecards` after the call has ended.' type: array items: $ref: '#/components/schemas/CreateScorecardDTO' loggingPath: type: string description: 'This is the path where the call logs will be uploaded. This is only used if you have provided S3 or GCP credentials on the Provider Credentials page in the Dashboard. If credential.s3PathPrefix or credential.bucketPlan.path is set, this will append to it. Usage: - If you want to upload the call logs to a specific path, set this to the path. Example: `/my-assistant-logs`. - If you want to upload the call logs to the root of the bucket, set this to `/`. @default ''/''' StopSpeakingPlan: type: object properties: numWords: type: number description: 'This is the number of words that the customer has to say before the assistant will stop talking. Words like "stop", "actually", "no", etc. will always interrupt immediately regardless of this value. Words like "okay", "yeah", "right" will never interrupt. When set to 0, `voiceSeconds` is used in addition to the transcriptions to determine the customer has started speaking. Defaults to 0. @default 0' minimum: 0 maximum: 10 example: 0 voiceSeconds: type: number description: 'This is the seconds customer has to speak before the assistant stops talking. This uses the VAD (Voice Activity Detection) spike to determine if the customer has started speaking. Considerations: - A lower value might be more responsive but could potentially pick up non-speech sounds. - A higher value reduces false positives but might slightly delay the detection of speech onset. This is only used if `numWords` is set to 0. Defaults to 0.2 @default 0.2' minimum: 0 maximum: 0.5 example: 0.2 backoffSeconds: type: number description: 'This is the seconds to wait before the assistant will start talking again after being interrupted. Defaults to 1. @default 1' minimum: 0 maximum: 10 example: 1 acknowledgementPhrases: description: 'These are the phrases that will never interrupt the assistant, even if numWords threshold is met. These are typically acknowledgement or backchanneling phrases.' example: - i understand - i see - i got it - i hear you - im listening - im with you - right - okay - ok - sure - alright - got it - understood - yeah - 'yes' - uh-huh - mm-hmm - gotcha - mhmm - ah - yeah okay - yeah sure default: - i understand - i see - i got it - i hear you - im listening - im with you - right - okay - ok - sure - alright - got it - understood - yeah - 'yes' - uh-huh - mm-hmm - gotcha - mhmm - ah - yeah okay - yeah sure type: array items: type: string maxLength: 240 interruptionPhrases: description: 'These are the phrases that will always interrupt the assistant immediately, regardless of numWords. These are typically phrases indicating disagreement or desire to stop.' example: - stop - shut - up - enough - quiet - silence - but - dont - not - 'no' - hold - wait - cut - pause - nope - nah - nevermind - never - bad - actually default: - stop - shut - up - enough - quiet - silence - but - dont - not - 'no' - hold - wait - cut - pause - nope - nah - nevermind - never - bad - actually type: array items: type: string maxLength: 240 MonitorPlan: type: object properties: listenEnabled: type: boolean description: 'This determines whether the assistant''s calls allow live listening. Defaults to true. Fetch `call.monitor.listenUrl` to get the live listening URL. @default true' example: false listenAuthenticationEnabled: type: boolean description: 'This enables authentication on the `call.monitor.listenUrl`. If `listenAuthenticationEnabled` is `true`, the `call.monitor.listenUrl` will require an `Authorization: Bearer ` header. @default false' example: false controlEnabled: type: boolean description: 'This determines whether the assistant''s calls allow live control. Defaults to true. Fetch `call.monitor.controlUrl` to get the live control URL. To use, send any control message via a POST request to `call.monitor.controlUrl`. Here are the types of controls supported: https://docs.vapi.ai/api-reference/messages/client-inbound-message @default true' example: false controlAuthenticationEnabled: type: boolean description: 'This enables authentication on the `call.monitor.controlUrl`. If `controlAuthenticationEnabled` is `true`, the `call.monitor.controlUrl` will require an `Authorization: Bearer ` header. @default false' example: false monitorIds: description: 'This the set of monitor ids that are attached to the assistant. The source of truth for the monitor ids is the assistant_monitor join table. This field can be used for transient assistants and to update assistants with new monitor ids. @default []' example: - 123e4567-e89b-12d3-a456-426614174000 type: array items: type: string KeypadInputPlan: type: object properties: enabled: type: boolean description: 'This keeps track of whether the user has enabled keypad input. By default, it is off. @default false' timeoutSeconds: type: number description: 'This is the time in seconds to wait before processing the input. If the input is not received within this time, the input will be ignored. If set to "off", the input will be processed when the user enters a delimiter or immediately if no delimiter is used. @default 2' minimum: 0 maximum: 10 delimiters: type: string description: 'This is the delimiter(s) that will be used to process the input. Can be ''#'', ''*'', or an empty array.' enum: - '#' - '*' - '' WorkflowUserEditable: type: object properties: nodes: type: array items: oneOf: - $ref: '#/components/schemas/ConversationNode' title: ConversationNode - $ref: '#/components/schemas/ToolNode' title: ToolNode model: description: 'This is the model for the workflow. This can be overridden at node level using `nodes[n].model`.' oneOf: - $ref: '#/components/schemas/WorkflowOpenAIModel' title: WorkflowOpenAIModel - $ref: '#/components/schemas/WorkflowAnthropicModel' title: WorkflowAnthropicModel - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel' title: WorkflowAnthropicBedrockModel - $ref: '#/components/schemas/WorkflowGoogleModel' title: WorkflowGoogleModel - $ref: '#/components/schemas/WorkflowCustomModel' title: WorkflowCustomModel transcriber: description: 'This is the transcriber for the workflow. This can be overridden at node level using `nodes[n].transcriber`.' oneOf: - $ref: '#/components/schemas/AssemblyAITranscriber' title: AssemblyAITranscriber - $ref: '#/components/schemas/AzureSpeechTranscriber' title: AzureSpeechTranscriber - $ref: '#/components/schemas/CustomTranscriber' title: CustomTranscriber - $ref: '#/components/schemas/DeepgramTranscriber' title: DeepgramTranscriber - $ref: '#/components/schemas/ElevenLabsTranscriber' title: ElevenLabsTranscriber - $ref: '#/components/schemas/GladiaTranscriber' title: GladiaTranscriber - $ref: '#/components/schemas/GoogleTranscriber' title: GoogleTranscriber - $ref: '#/components/schemas/SpeechmaticsTranscriber' title: SpeechmaticsTranscriber - $ref: '#/components/schemas/TalkscriberTranscriber' title: TalkscriberTranscriber - $ref: '#/components/schemas/OpenAITranscriber' title: OpenAITranscriber - $ref: '#/components/schemas/CartesiaTranscriber' title: CartesiaTranscriber - $ref: '#/components/schemas/SonioxTranscriber' title: SonioxTranscriber voice: description: 'This is the voice for the workflow. This can be overridden at node level using `nodes[n].voice`.' oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice observabilityPlan: description: 'This is the plan for observability of workflow''s calls. Currently, only Langfuse is supported.' oneOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' title: Langfuse allOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' backgroundSound: description: 'This is the background sound in the call. Default for phone calls is ''office'' and default for web calls is ''off''. You can also provide a custom sound by providing a URL to an audio file.' oneOf: - type: enum enum: - 'off' - office example: office - type: string format: uri example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3 hooks: type: array description: This is a set of actions that will be performed on certain events. items: oneOf: - $ref: '#/components/schemas/CallHookCallEnding' title: CallHookCallEnding - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted' title: CallHookAssistantSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted' title: CallHookCustomerSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout' title: CallHookCustomerSpeechTimeout - $ref: '#/components/schemas/CallHookModelResponseTimeout' title: CallHookModelResponseTimeout credentials: type: array description: These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials. items: oneOf: - $ref: '#/components/schemas/CreateAnthropicCredentialDTO' title: AnthropicCredential - $ref: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' title: AnthropicBedrockCredential - $ref: '#/components/schemas/CreateAnyscaleCredentialDTO' title: AnyscaleCredential - $ref: '#/components/schemas/CreateAssemblyAICredentialDTO' title: AssemblyAICredential - $ref: '#/components/schemas/CreateAzureCredentialDTO' title: AzureCredential - $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO' title: AzureOpenAICredential - $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO' title: ByoSipTrunkCredential - $ref: '#/components/schemas/CreateCartesiaCredentialDTO' title: CartesiaCredential - $ref: '#/components/schemas/CreateCerebrasCredentialDTO' title: CerebrasCredential - $ref: '#/components/schemas/CreateCloudflareCredentialDTO' title: CloudflareCredential - $ref: '#/components/schemas/CreateCustomLLMCredentialDTO' title: CustomLLMCredential - $ref: '#/components/schemas/CreateDeepgramCredentialDTO' title: DeepgramCredential - $ref: '#/components/schemas/CreateDeepInfraCredentialDTO' title: DeepInfraCredential - $ref: '#/components/schemas/CreateDeepSeekCredentialDTO' title: DeepSeekCredential - $ref: '#/components/schemas/CreateElevenLabsCredentialDTO' title: ElevenLabsCredential - $ref: '#/components/schemas/CreateGcpCredentialDTO' title: GcpCredential - $ref: '#/components/schemas/CreateGladiaCredentialDTO' title: GladiaCredential - $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO' title: GhlCredential - $ref: '#/components/schemas/CreateGoogleCredentialDTO' title: GoogleCredential - $ref: '#/components/schemas/CreateGroqCredentialDTO' title: GroqCredential - $ref: '#/components/schemas/CreateHumeCredentialDTO' title: HumeCredential - $ref: '#/components/schemas/CreateInflectionAICredentialDTO' title: InflectionAICredential - $ref: '#/components/schemas/CreateLangfuseCredentialDTO' title: LangfuseCredential - $ref: '#/components/schemas/CreateLmntCredentialDTO' title: LmntCredential - $ref: '#/components/schemas/CreateMakeCredentialDTO' title: MakeCredential - $ref: '#/components/schemas/CreateMistralCredentialDTO' title: MistralCredential - $ref: '#/components/schemas/CreateNeuphonicCredentialDTO' title: NeuphonicCredential - $ref: '#/components/schemas/CreateOpenAICredentialDTO' title: OpenAICredential - $ref: '#/components/schemas/CreateOpenRouterCredentialDTO' title: OpenRouterCredential - $ref: '#/components/schemas/CreatePerplexityAICredentialDTO' title: PerplexityAICredential - $ref: '#/components/schemas/CreatePlayHTCredentialDTO' title: PlayHTCredential - $ref: '#/components/schemas/CreateRimeAICredentialDTO' title: RimeAICredential - $ref: '#/components/schemas/CreateRunpodCredentialDTO' title: RunpodCredential - $ref: '#/components/schemas/CreateS3CredentialDTO' title: S3Credential - $ref: '#/components/schemas/CreateSmallestAICredentialDTO' title: SmallestAICredential - $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO' title: SpeechmaticsCredential - $ref: '#/components/schemas/CreateSonioxCredentialDTO' title: SonioxCredential - $ref: '#/components/schemas/CreateSupabaseCredentialDTO' title: SupabaseCredential - $ref: '#/components/schemas/CreateTavusCredentialDTO' title: TavusCredential - $ref: '#/components/schemas/CreateTogetherAICredentialDTO' title: TogetherAICredential - $ref: '#/components/schemas/CreateTwilioCredentialDTO' title: TwilioCredential - $ref: '#/components/schemas/CreateVonageCredentialDTO' title: VonageCredential - $ref: '#/components/schemas/CreateWebhookCredentialDTO' title: WebhookCredential - $ref: '#/components/schemas/CreateCustomCredentialDTO' title: CustomCredential - $ref: '#/components/schemas/CreateXAiCredentialDTO' title: XAiCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' title: GoogleCalendarOAuth2ClientCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' title: GoogleCalendarOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' title: GoogleSheetsOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' title: SlackOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' title: GoHighLevelMCPCredential - $ref: '#/components/schemas/CreateInworldCredentialDTO' title: InworldCredential - $ref: '#/components/schemas/CreateMinimaxCredentialDTO' title: MinimaxCredential - $ref: '#/components/schemas/CreateWellSaidCredentialDTO' title: WellSaidCredential - $ref: '#/components/schemas/CreateEmailCredentialDTO' title: EmailCredential - $ref: '#/components/schemas/CreateSlackWebhookCredentialDTO' title: SlackWebhookCredential discriminator: propertyName: provider mapping: 11labs: '#/components/schemas/CreateElevenLabsCredentialDTO' anthropic: '#/components/schemas/CreateAnthropicCredentialDTO' anthropic-bedrock: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO' assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO' azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO' azure: '#/components/schemas/CreateAzureCredentialDTO' byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO' cartesia: '#/components/schemas/CreateCartesiaCredentialDTO' cerebras: '#/components/schemas/CreateCerebrasCredentialDTO' cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO' custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO' deepgram: '#/components/schemas/CreateDeepgramCredentialDTO' deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO' deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO' gcp: '#/components/schemas/CreateGcpCredentialDTO' gladia: '#/components/schemas/CreateGladiaCredentialDTO' gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO' google: '#/components/schemas/CreateGoogleCredentialDTO' groq: '#/components/schemas/CreateGroqCredentialDTO' inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO' langfuse: '#/components/schemas/CreateLangfuseCredentialDTO' lmnt: '#/components/schemas/CreateLmntCredentialDTO' make: '#/components/schemas/CreateMakeCredentialDTO' openai: '#/components/schemas/CreateOpenAICredentialDTO' openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO' perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO' playht: '#/components/schemas/CreatePlayHTCredentialDTO' rime-ai: '#/components/schemas/CreateRimeAICredentialDTO' runpod: '#/components/schemas/CreateRunpodCredentialDTO' s3: '#/components/schemas/CreateS3CredentialDTO' supabase: '#/components/schemas/CreateSupabaseCredentialDTO' smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO' tavus: '#/components/schemas/CreateTavusCredentialDTO' together-ai: '#/components/schemas/CreateTogetherAICredentialDTO' twilio: '#/components/schemas/CreateTwilioCredentialDTO' vonage: '#/components/schemas/CreateVonageCredentialDTO' webhook: '#/components/schemas/CreateWebhookCredentialDTO' custom-credential: '#/components/schemas/CreateCustomCredentialDTO' xai: '#/components/schemas/CreateXAiCredentialDTO' neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO' hume: '#/components/schemas/CreateHumeCredentialDTO' mistral: '#/components/schemas/CreateMistralCredentialDTO' speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO' soniox: '#/components/schemas/CreateSonioxCredentialDTO' google.calendar.oauth2-client: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' google.calendar.oauth2-authorization: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' google.sheets.oauth2-authorization: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' slack.oauth2-authorization: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' inworld: '#/components/schemas/CreateInworldCredentialDTO' minimax: '#/components/schemas/CreateMinimaxCredentialDTO' wellsaid: '#/components/schemas/CreateWellSaidCredentialDTO' email: '#/components/schemas/CreateEmailCredentialDTO' slack-webhook: '#/components/schemas/CreateSlackWebhookCredentialDTO' voicemailDetection: description: This is the voicemail detection plan for the workflow. oneOf: - type: string enum: - 'off' - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan' title: Google - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan' title: OpenAI - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan' title: Twilio - $ref: '#/components/schemas/VapiVoicemailDetectionPlan' title: Vapi maxDurationSeconds: type: number description: 'This is the maximum duration of the call in seconds. After this duration, the call will automatically end. Default is 1800 (30 minutes), max is 43200 (12 hours), and min is 10 seconds.' minimum: 10 maximum: 43200 example: 600 name: type: string maxLength: 80 edges: type: array items: $ref: '#/components/schemas/Edge' globalPrompt: type: string maxLength: 5000 server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. tool.server 2. workflow.server / assistant.server 3. phoneNumber.server 4. org.server' allOf: - $ref: '#/components/schemas/Server' compliancePlan: description: This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings. allOf: - $ref: '#/components/schemas/CompliancePlan' analysisPlan: description: This is the plan for analysis of workflow's calls. Stored in `call.analysis`. allOf: - $ref: '#/components/schemas/AnalysisPlan' artifactPlan: description: This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`. allOf: - $ref: '#/components/schemas/ArtifactPlan' startSpeakingPlan: description: 'This is the plan for when the workflow nodes should start talking. You should configure this if you''re running into these issues: - The assistant is too slow to start talking after the customer is done speaking. - The assistant is too fast to start talking after the customer is done speaking. - The assistant is so fast that it''s actually interrupting the customer.' allOf: - $ref: '#/components/schemas/StartSpeakingPlan' stopSpeakingPlan: description: 'This is the plan for when workflow nodes should stop talking on customer interruption. You should configure this if you''re running into these issues: - The assistant is too slow to recognize customer''s interruption. - The assistant is too fast to recognize customer''s interruption. - The assistant is getting interrupted by phrases that are just acknowledgments. - The assistant is getting interrupted by background noises. - The assistant is not properly stopping -- it starts talking right after getting interrupted.' allOf: - $ref: '#/components/schemas/StopSpeakingPlan' monitorPlan: description: 'This is the plan for real-time monitoring of the workflow''s calls. Usage: - To enable live listening of the workflow''s calls, set `monitorPlan.listenEnabled` to `true`. - To enable live control of the workflow''s calls, set `monitorPlan.controlEnabled` to `true`.' allOf: - $ref: '#/components/schemas/MonitorPlan' backgroundSpeechDenoisingPlan: description: 'This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Both can be used together. Order of precedence: - Smart denoising - Fourier denoising' allOf: - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan' credentialIds: description: These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this. type: array items: type: string keypadInputPlan: description: This is the plan for keypad input handling during workflow calls. allOf: - $ref: '#/components/schemas/KeypadInputPlan' voicemailMessage: type: string description: 'This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.' maxLength: 1000 required: - nodes - name - edges VapiModel: type: object properties: messages: description: This is the starting state for the conversation. type: array items: $ref: '#/components/schemas/OpenAIMessage' tools: type: array description: 'These are the tools that the assistant can use during the call. To use existing tools, use `toolIds`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 provider: type: string enum: - vapi workflowId: type: string description: This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead. workflow: description: This is the workflow that will be used for the call. To use an existing workflow, use `workflowId` instead. allOf: - $ref: '#/components/schemas/WorkflowUserEditable' 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - provider - model XaiModel: 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`. Both `tools` and `toolIds` can be used together.' items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool toolIds: description: 'These are the tools that the assistant can use during the call. To use transient tools, use `tools`. Both `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 model: type: string description: This is the name of the model. Ex. cognitivecomputations/dolphin-mixtral-8x7b enum: - grok-beta - grok-2 - grok-3 - grok-4-fast-reasoning - grok-4-fast-non-reasoning - grok-4.20-0309-reasoning - grok-4.20-0309-non-reasoning provider: type: string enum: - xai 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. Default `false` because the model is usually are good at understanding the user''s emotion from text. @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. Default is 0. @default 0' minimum: 0 required: - model - provider ExactReplacement: type: object properties: type: type: string description: 'This is the exact replacement type. You can use this to replace a specific word or phrase with a different word or phrase. Usage: - Replace "hello" with "hi": { type: ''exact'', key: ''hello'', value: ''hi'' } - Replace "good morning" with "good day": { type: ''exact'', key: ''good morning'', value: ''good day'' } - Replace a specific name: { type: ''exact'', key: ''John Doe'', value: ''Jane Smith'' } - Replace an acronym: { type: ''exact'', key: ''AI'', value: ''Artificial Intelligence'' } - Replace a company name with its phonetic pronunciation: { type: ''exact'', key: ''Vapi'', value: ''Vappy'' }' enum: - exact replaceAllEnabled: type: boolean description: 'This option let''s you control whether to replace all instances of the key or only the first one. By default, it only replaces the first instance. Examples: - For { type: ''exact'', key: ''hello'', value: ''hi'', replaceAllEnabled: false }. Before: "hello world, hello universe" | After: "hi world, hello universe" - For { type: ''exact'', key: ''hello'', value: ''hi'', replaceAllEnabled: true }. Before: "hello world, hello universe" | After: "hi world, hi universe" @default false' default: false key: type: string description: This is the key to replace. value: type: string description: This is the value that will replace the match. maxLength: 1000 required: - type - key - value RegexReplacement: type: object properties: type: type: string description: 'This is the regex replacement type. You can use this to replace a word or phrase that matches a pattern. Usage: - Replace all numbers with "some number": { type: ''regex'', regex: ''\\d+'', value: ''some number'' } - Replace email addresses with "[EMAIL]": { type: ''regex'', regex: ''\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b'', value: ''[EMAIL]'' } - Replace phone numbers with a formatted version: { type: ''regex'', regex: ''(\\d{3})(\\d{3})(\\d{4})'', value: ''($1) $2-$3'' } - Replace all instances of "color" or "colour" with "hue": { type: ''regex'', regex: ''colou?r'', value: ''hue'' } - Capitalize the first letter of every sentence: { type: ''regex'', regex: ''(?<=\\. |^)[a-z]'', value: (match) => match.toUpperCase() }' enum: - regex regex: type: string description: 'This is the regex pattern to replace. Note: - This works by using the `string.replace` method in Node.JS. Eg. `"hello there".replace(/hello/g, "hi")` will return `"hi there"`. Hot tip: - In JavaScript, escape `\` when sending the regex pattern. Eg. `"hello\sthere"` will be sent over the wire as `"hellosthere"`. Send `"hello\\sthere"` instead.' options: description: 'These are the options for the regex replacement. Defaults to all disabled. @default []' type: array items: $ref: '#/components/schemas/RegexOption' value: type: string description: This is the value that will replace the match. maxLength: 1000 required: - type - regex - value FormatPlan: type: object properties: enabled: type: boolean description: 'This determines whether the chunk is formatted before being sent to the voice provider. This helps with enunciation. This includes phone numbers, emails and addresses. Default `true`. Usage: - To rely on the voice provider''s formatting logic, set this to `false`. If `voice.chunkPlan.enabled` is `false`, this is automatically `false` since there''s no chunk to format. @default true' example: true numberToDigitsCutoff: type: number description: 'This is the cutoff after which a number is converted to individual digits instead of being spoken as words. Example: - If cutoff 2025, "12345" is converted to "1 2 3 4 5" while "1200" is converted to "twelve hundred". Usage: - If your use case doesn''t involve IDs like zip codes, set this to a high value. - If your use case involves IDs that are shorter than 5 digits, set this to a lower value. @default 2025' minimum: 0 example: 2025 replacements: type: array description: 'These are the custom replacements you can make to the chunk before it is sent to the voice provider. Usage: - To replace a specific word or phrase with a different word or phrase, use the `ExactReplacement` type. Eg. `{ type: ''exact'', key: ''hello'', value: ''hi'' }` - To replace a word or phrase that matches a pattern, use the `RegexReplacement` type. Eg. `{ type: ''regex'', regex: ''\\b[a-zA-Z]{5}\\b'', value: ''hi'' }` @default []' items: oneOf: - $ref: '#/components/schemas/ExactReplacement' title: ExactReplacement - $ref: '#/components/schemas/RegexReplacement' title: RegexReplacement formattersEnabled: type: array description: 'List of formatters to apply. If not provided, all default formatters will be applied. If provided, only the specified formatters will be applied. Note: Some essential formatters like angle bracket removal will always be applied. @default undefined' enum: - markdown - asterisk - quote - dash - newline - colon - acronym - dollarAmount - email - date - time - distance - unit - percentage - phoneNumber - number - stripAsterisk items: type: string enum: - markdown - asterisk - quote - dash - newline - colon - acronym - dollarAmount - email - date - time - distance - unit - percentage - phoneNumber - number - stripAsterisk ChunkPlan: type: object properties: enabled: type: boolean description: 'This determines whether the model output is chunked before being sent to the voice provider. Default `true`. Usage: - To rely on the voice provider''s audio generation logic, set this to `false`. - If seeing issues with quality, set this to `true`. If disabled, Vapi-provided audio control tokens like will not work. @default true' example: true minCharacters: type: number description: 'This is the minimum number of characters in a chunk. Usage: - To increase quality, set this to a higher value. - To decrease latency, set this to a lower value. @default 30' minimum: 1 maximum: 80 example: 30 punctuationBoundaries: type: array description: 'These are the punctuations that are considered valid boundaries for a chunk to be created. Usage: - To increase quality, constrain to fewer boundaries. - To decrease latency, enable all. Default is automatically set to balance the trade-off between quality and latency based on the provider.' enum: - "\u3002" - "\uFF0C" - . - '!' - '?' - ; - ) - "\u060C" - "\u06D4" - "\u0964" - "\u0965" - '|' - '||' - ',' - ':' example: - "\u3002" - "\uFF0C" - . - '!' - '?' - ; - "\u060C" - "\u06D4" - "\u0964" - "\u0965" - '|' - '||' - ',' - ':' items: type: string enum: - "\u3002" - "\uFF0C" - . - '!' - '?' - ; - ) - "\u060C" - "\u06D4" - "\u0964" - "\u0965" - '|' - '||' - ',' - ':' formatPlan: description: This is the plan for formatting the chunk before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/FormatPlan' FallbackPlan: type: object properties: voices: type: array description: This is the list of voices to fallback to in the event that the primary voice provider fails. items: oneOf: - $ref: '#/components/schemas/FallbackAzureVoice' title: Azure - $ref: '#/components/schemas/FallbackCartesiaVoice' title: Cartesia - $ref: '#/components/schemas/FallbackHumeVoice' title: Hume - $ref: '#/components/schemas/FallbackCustomVoice' title: CustomVoice - $ref: '#/components/schemas/FallbackDeepgramVoice' title: Deepgram - $ref: '#/components/schemas/FallbackElevenLabsVoice' title: ElevenLabs - $ref: '#/components/schemas/FallbackVapiVoice' title: Vapi - $ref: '#/components/schemas/FallbackLMNTVoice' title: LMNT - $ref: '#/components/schemas/FallbackOpenAIVoice' title: OpenAI - $ref: '#/components/schemas/FallbackPlayHTVoice' title: PlayHT - $ref: '#/components/schemas/FallbackWellSaidVoice' title: WellSaid - $ref: '#/components/schemas/FallbackRimeAIVoice' title: RimeAI - $ref: '#/components/schemas/FallbackSmallestAIVoice' title: Smallest AI - $ref: '#/components/schemas/FallbackTavusVoice' title: TavusVoice - $ref: '#/components/schemas/FallbackNeuphonicVoice' title: Neuphonic - $ref: '#/components/schemas/FallbackSesameVoice' title: Sesame - $ref: '#/components/schemas/FallbackInworldVoice' title: Inworld required: - voices AzureVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - azure voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - andrew - brian - emma title: Preset Voice Options - type: string title: Azure Voice ID chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' speed: type: number description: This is the speed multiplier that will be used. minimum: 0.5 maximum: 2 fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId CartesiaExperimentalControls: type: object properties: speed: oneOf: - type: string enum: - slowest - slow - normal - fast - fastest example: normal - type: number minimum: -1 maximum: 1 example: 0.5 emotion: type: string enum: - anger:lowest - anger:low - anger:high - anger:highest - positivity:lowest - positivity:low - positivity:high - positivity:highest - surprise:lowest - surprise:low - surprise:high - surprise:highest - sadness:lowest - sadness:low - sadness:high - sadness:highest - curiosity:lowest - curiosity:low - curiosity:high - curiosity:highest example: - happiness:high CartesiaGenerationConfigExperimental: type: object properties: accentLocalization: type: integer description: 'Toggle accent localization for sonic-3: 0 (disabled, default) or 1 (enabled). When enabled, the voice adapts to match the transcript language accent while preserving vocal characteristics.' example: 0 minimum: 0 maximum: 1 default: 0 CartesiaGenerationConfig: type: object properties: speed: type: number description: Fine-grained speed control for sonic-3. Only available for sonic-3 model. example: 1 minimum: 0.6 maximum: 1.5 default: 1 volume: type: number description: Fine-grained volume control for sonic-3. Only available for sonic-3 model. example: 1 minimum: 0.5 maximum: 2 default: 1 experimental: description: Experimental model controls for sonic-3. These are subject to breaking changes. allOf: - $ref: '#/components/schemas/CartesiaGenerationConfigExperimental' CartesiaVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - cartesia voiceId: type: string description: The ID of the particular voice you want to use. model: type: string description: This is the model that will be used. This is optional and will default to the correct model for the voiceId. enum: - sonic-3 - sonic-3-2026-01-12 - sonic-3-2025-10-27 - sonic-2 - sonic-2-2025-06-11 - sonic-english - sonic-multilingual - sonic-preview - sonic example: sonic-english language: type: string description: This is the language that will be used. This is optional and will default to the correct language for the voiceId. enum: - ar - bg - bn - cs - da - de - el - en - es - fi - fr - gu - he - hi - hr - hu - id - it - ja - ka - kn - ko - ml - mr - ms - nl - 'no' - pa - pl - pt - ro - ru - sk - sv - ta - te - th - tl - tr - uk - vi - zh example: en experimentalControls: description: Experimental controls for Cartesia voice generation allOf: - $ref: '#/components/schemas/CartesiaExperimentalControls' generationConfig: description: Generation config for fine-grained control of sonic-3 voice output (speed, volume, and experimental controls). Only available for sonic-3 model. allOf: - $ref: '#/components/schemas/CartesiaGenerationConfig' pronunciationDictId: type: string description: Pronunciation dictionary ID for sonic-3. Allows custom pronunciations for specific words. Only available for sonic-3 model. example: dict_abc123 chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId CustomVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported. enum: - custom-voice voiceId: type: string description: This is the provider-specific ID that will be used. This is passed in the voice request payload to identify the voice to use. chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' server: description: "This is where the voice request will be sent.\n\nRequest Example:\n\ \nPOST https://{server.url}\nContent-Type: application/json\n\n{\n \"\ message\": {\n \"type\": \"voice-request\",\n \"text\": \"Hello,\ \ world!\",\n \"sampleRate\": 24000,\n ...other metadata about the\ \ call...\n }\n}\n\nResponse Expected: 1-channel 16-bit raw PCM audio\ \ at the sample rate specified in the request. Here is how the response\ \ will be piped to the transport:\n```\nresponse.on('data', (chunk: Buffer)\ \ => {\n outputStream.write(chunk);\n});\n```" allOf: - $ref: '#/components/schemas/Server' 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 - server DeepgramVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - deepgram voiceId: type: string description: This is the provider-specific ID that will be used. enum: - asteria - luna - stella - athena - hera - orion - arcas - perseus - angus - orpheus - helios - zeus - thalia - andromeda - helena - apollo - arcas - aries - amalthea - asteria - athena - atlas - aurora - callista - cora - cordelia - delia - draco - electra - harmonia - hera - hermes - hyperion - iris - janus - juno - jupiter - luna - mars - minerva - neptune - odysseus - ophelia - orion - orpheus - pandora - phoebe - pluto - saturn - selene - theia - vesta - zeus - celeste - estrella - nestor - sirio - carina - alvaro - diana - aquila - selena - javier title: This is the Deepgram Voice ID model: type: string description: This is the model that will be used. Defaults to 'aura-2' when not specified. enum: - aura - aura-2 example: aura-2 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 This will only be used if you are using your own Deepgram API key. @default false' example: false default: false chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' 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 ElevenLabsPronunciationDictionaryLocator: type: object properties: pronunciationDictionaryId: type: string description: This is the ID of the pronunciation dictionary to use. title: This is the ElevenLabs Pronunciation Dictionary ID versionId: type: string description: This is the version ID of the pronunciation dictionary to use. title: This is the ElevenLabs Pronunciation Dictionary Version ID required: - pronunciationDictionaryId - versionId ElevenLabsVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - 11labs voiceId: description: This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library. oneOf: - type: string enum: - burt - marissa - andrea - sarah - phillip - steve - joseph - myra - paula - ryan - drew - paul - mrb - matilda - mark title: Preset Voice Options - type: string title: 11Labs Voice ID stability: type: number description: Defines the stability for voice settings. minimum: 0 maximum: 1 example: 0.5 similarityBoost: type: number description: Defines the similarity boost for voice settings. minimum: 0 maximum: 1 example: 0.75 style: type: number description: Defines the style for voice settings. minimum: 0 maximum: 1 example: 0 useSpeakerBoost: type: boolean description: Defines the use speaker boost for voice settings. example: false speed: type: number description: Defines the speed for voice settings. minimum: 0.7 maximum: 1.2 example: 0.9 optimizeStreamingLatency: type: number description: Defines the optimize streaming latency for voice settings. Defaults to 3. minimum: 0 maximum: 4 example: 3 enableSsmlParsing: type: boolean description: 'This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency. @default false' example: false autoMode: type: boolean description: Defines the auto mode for voice settings. Defaults to false. example: false model: type: string description: This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified. enum: - eleven_multilingual_v2 - eleven_turbo_v2 - eleven_turbo_v2_5 - eleven_flash_v2 - eleven_flash_v2_5 - eleven_monolingual_v1 - eleven_v3 example: eleven_turbo_v2_5 language: type: string description: This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports language enforcement. For other models, an error will be returned if language code is provided. chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' pronunciationDictionaryLocators: description: This is the pronunciation dictionary locators to use. type: array items: $ref: '#/components/schemas/ElevenLabsPronunciationDictionaryLocator' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId WellSaidVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - wellsaid voiceId: type: string description: The WellSaid speaker ID to synthesize. model: type: string description: This is the model that will be used. enum: - caruso - legacy enableSsml: type: boolean description: Enables limited SSML translation for input text. libraryIds: description: Array of library IDs to use for voice synthesis. type: array items: type: string chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId HumeVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - hume model: type: string description: This is the model that will be used. enum: - octave - octave2 example: octave2 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''). If a Voice is specified in the request, this description serves as acting instructions. If 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: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - lmnt voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - amy - ansel - autumn - ava - brandon - caleb - cassian - chloe - dalton - daniel - dustin - elowen - evander - huxley - james - juniper - kennedy - lauren - leah - lily - lucas - magnus - miles - morgan - natalie - nathan - noah - nyssa - oliver - paige - ryan - sadie - sophie - stella - terrence - tyler - vesper - violet - warrick - zain - zeke - zoe title: Preset Voice Options - type: string title: LMNT Voice ID speed: type: number description: This is the speed multiplier that will be used. minimum: 0.25 maximum: 2 example: null language: description: Two letter ISO 639-1 language code. Use "auto" for auto-detection. enum: - aa - ab - ae - af - ak - am - an - ar - as - av - ay - az - ba - be - bg - bh - bi - bm - bn - bo - br - bs - ca - ce - ch - co - cr - cs - cu - cv - cy - da - de - dv - dz - ee - el - en - eo - es - et - eu - fa - ff - fi - fj - fo - fr - fy - ga - gd - gl - gn - gu - gv - ha - he - hi - ho - hr - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - io - is - it - iu - ja - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ku - kv - kw - ky - la - lb - lg - li - ln - lo - lt - lu - lv - mg - mh - mi - mk - ml - mn - mr - ms - mt - my - na - nb - nd - ne - ng - nl - nn - 'no' - nr - nv - ny - oc - oj - om - or - os - pa - pi - pl - ps - pt - qu - rm - rn - ro - ru - rw - sa - sc - sd - se - sg - si - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - tg - th - ti - tk - tl - tn - to - tr - ts - tt - tw - ty - ug - uk - ur - uz - ve - vi - vo - wa - wo - xh - yi - yue - yo - za - zh - zu - auto example: en oneOf: - type: string enum: - aa - ab - ae - af - ak - am - an - ar - as - av - ay - az - ba - be - bg - bh - bi - bm - bn - bo - br - bs - ca - ce - ch - co - cr - cs - cu - cv - cy - da - de - dv - dz - ee - el - en - eo - es - et - eu - fa - ff - fi - fj - fo - fr - fy - ga - gd - gl - gn - gu - gv - ha - he - hi - ho - hr - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - io - is - it - iu - ja - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ku - kv - kw - ky - la - lb - lg - li - ln - lo - lt - lu - lv - mg - mh - mi - mk - ml - mn - mr - ms - mt - my - na - nb - nd - ne - ng - nl - nn - 'no' - nr - nv - ny - oc - oj - om - or - os - pa - pi - pl - ps - pt - qu - rm - rn - ro - ru - rw - sa - sc - sd - se - sg - si - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - tg - th - ti - tk - tl - tn - to - tr - ts - tt - tw - ty - ug - uk - ur - uz - ve - vi - vo - wa - wo - xh - yi - yue - yo - za - zh - zu title: ISO 639-1 Language Code - type: string enum: - auto title: Auto-detect chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId NeuphonicVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - neuphonic voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: [] title: Preset Voice Options - type: string title: Neuphonic Voice ID 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: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId - language OpenAIVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - openai voiceId: description: 'This is the provider-specific ID that will be used. Please note that ash, ballad, coral, sage, and verse may only be used with realtime models.' oneOf: - type: string enum: - alloy - echo - fable - onyx - nova - shimmer - marin - cedar title: Preset Voice Options - type: string title: OpenAI Voice ID 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. Does not work with ''tts-1'' or ''tts-1-hd'' models.' maxLength: 10000 speed: type: number description: This is the speed multiplier that will be used. minimum: 0.25 maximum: 4 example: null chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId PlayHTVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - playht voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - jennifer - melissa - will - chris - matt - jack - ruby - davis - donna - michael title: Preset Voice Options - type: string title: PlayHT Voice ID speed: type: number description: This is the speed multiplier that will be used. minimum: 0.1 maximum: 5 example: null temperature: type: number description: A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model's default temperature will be used. The temperature parameter controls variance. Lower temperatures result in more predictable results, higher temperatures allow each run to vary more, so the voice may sound less like the baseline voice. minimum: 0.1 maximum: 2 example: null emotion: type: string description: An emotion to be applied to the speech. enum: - female_happy - female_sad - female_angry - female_fearful - female_disgust - female_surprised - male_happy - male_sad - male_angry - male_fearful - male_disgust - male_surprised example: null voiceGuidance: type: number description: A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared to other voices. minimum: 1 maximum: 6 example: null styleGuidance: type: number description: A number between 1 and 30. Use lower numbers to to reduce how strong your chosen emotion will be. Higher numbers will create a very emotional performance. minimum: 1 maximum: 30 example: null textGuidance: type: number description: A number between 1 and 2. This number influences how closely the generated speech adheres to the input text. Use lower values to create more fluid speech, but with a higher chance of deviating from the input text. Higher numbers will make the generated speech more accurate to the input text, ensuring that the words spoken align closely with the provided text. minimum: 1 maximum: 2 example: null model: type: string description: Playht voice model/engine to use. enum: - PlayHT2.0 - PlayHT2.0-turbo - Play3.0-mini - PlayDialog language: type: string description: The language to use for the speech. enum: - afrikaans - albanian - amharic - arabic - bengali - bulgarian - catalan - croatian - czech - danish - dutch - english - french - galician - german - greek - hebrew - hindi - hungarian - indonesian - italian - japanese - korean - malay - mandarin - polish - portuguese - russian - serbian - spanish - swedish - tagalog - thai - turkish - ukrainian - urdu - xhosa chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId RimeAIVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - rime-ai voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - cove - moon - wildflower - eva - amber - maya - lagoon - breeze - helen - joy - marsh - creek - cedar - alpine - summit - nicholas - tyler - colin - hank - thunder - astra - eucalyptus - moraine - peak - tundra - mesa_extra - talon - marlu - glacier - falcon - luna - celeste - estelle - andromeda - esther - lyra - lintel - oculus - vespera - transom - bond - arcade - atrium - cupola - fern - sirius - orion - masonry - albion - parapet title: Suggested Voice Options description: Popular Rime AI voices across mist, mistv2, and arcana models. Any valid Rime AI voice ID is accepted, not just these suggestions. - type: string title: Any Rime AI Voice ID description: Any valid Rime AI voice ID. See https://docs.rime.ai/docs/voices for the full catalog. model: type: string description: This is the model that will be used. Defaults to 'arcana' when not specified. enum: - arcana - mistv2 - mist example: arcana speed: type: number description: This is the speed multiplier that will be used. minimum: 0.1 example: null pauseBetweenBrackets: type: boolean description: 'This is a flag that controls whether to add slight pauses using angle brackets. Example: "Hi. <200> I''d love to have a conversation with you." adds a 200ms pause between the first and second sentences.' example: false phonemizeBetweenBrackets: type: boolean description: 'This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic pronunciation) - Example: "{h''El.o} World" will pronounce "Hello" as expected.' example: false reduceLatency: type: boolean description: This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency example: false inlineSpeedAlpha: type: string description: This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha example: null language: type: string description: 'Language for speech synthesis. Uses ISO 639 codes. Supported: en, es, de, fr, ar, hi, ja, he, pt, ta, si.' enum: - en - es - de - fr - ar - hi - ja - he - pt - ta - si example: en chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId SesameVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - sesame voiceId: type: string description: This is the provider-specific ID that will be used. title: Sesame Voice ID. This should be either a name (a built-in voice) or a UUID (a custom voice). model: type: string description: This is the model that will be used. enum: - csm-1b chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId - model SmallestAIVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - smallest-ai voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - emily - jasmine - arman - james - mithali - aravind - raj - diya - raman - ananya - isha - william - aarav - monika - niharika - deepika - raghav - kajal - radhika - mansi - nisha - saurabh - pooja - saina - sanya title: Preset Voice Options - type: string title: Smallest AI Voice ID model: type: string description: Smallest AI voice model to use. Defaults to 'lightning' when not specified. enum: - lightning speed: type: number description: This is the speed multiplier that will be used. example: null chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId TavusConversationProperties: type: object properties: maxCallDuration: type: number description: 'The maximum duration of the call in seconds. The default `maxCallDuration` is 3600 seconds (1 hour). Once the time limit specified by this parameter has been reached, the conversation will automatically shut down.' participantLeftTimeout: type: number description: The duration in seconds after which the call will be automatically shut down once the last participant leaves. participantAbsentTimeout: type: number description: 'Starting from conversation creation, the duration in seconds after which the call will be automatically shut down if no participant joins the call. Default is 300 seconds (5 minutes).' enableRecording: type: boolean description: If true, the user will be able to record the conversation. enableTranscription: type: boolean description: 'If true, the user will be able to transcribe the conversation. You can find more instructions on displaying transcriptions if you are using your custom DailyJS components here. You need to have an event listener on Daily that listens for `app-messages`.' applyGreenscreen: type: boolean description: 'If true, the background will be replaced with a greenscreen (RGB values: `[0, 255, 155]`). You can use WebGL on the frontend to make the greenscreen transparent or change its color.' language: type: string description: 'The language of the conversation. Please provide the **full language name**, not the two-letter code. If you are using your own TTS voice, please ensure it supports the language you provide. If you are using a stock replica or default persona, please note that only ElevenLabs and Cartesia supported languages are available. You can find a full list of supported languages for Cartesia here, for ElevenLabs here, and for PlayHT here.' recordingS3BucketName: type: string description: The name of the S3 bucket where the recording will be stored. recordingS3BucketRegion: type: string description: The region of the S3 bucket where the recording will be stored. awsAssumeRoleArn: type: string description: The ARN of the role that will be assumed to access the S3 bucket. TavusVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - tavus voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - r52da2535a title: Preset Voice Options - type: string title: Tavus Voice ID chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' personaId: type: string description: This is the unique identifier for the persona that the replica will use in the conversation. callbackUrl: type: string description: This is the url that will receive webhooks with updates regarding the conversation state. conversationName: type: string description: This is the name for the conversation. conversationalContext: type: string description: This is the context that will be appended to any context provided in the persona, if one is provided. customGreeting: type: string description: This is the custom greeting that the replica will give once a participant joines the conversation. properties: description: These are optional properties used to customize the conversation. allOf: - $ref: '#/components/schemas/TavusConversationProperties' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId VapiPronunciationDictionaryLocator: type: object properties: pronunciationDictId: type: string description: The pronunciation dictionary ID example: pdict_abc123 versionId: type: string description: Version ID (only required for ElevenLabs, ignored for Cartesia) example: ver_abc123 required: - pronunciationDictId VapiVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - vapi voiceId: type: string description: The voices provided by Vapi enum: - Clara - Godfrey - Layla - Sid - Gustavo - Elliot - Kylie - Rohan - Lily - Savannah - Hana - Neha - Cole - Harry - Paige - Spencer - Nico - Kai - Emma - Sagar - Neil - Naina - Leah - Tara - Jess - Leo - Dan - Mia - Zac - Zoe speed: type: number description: 'This is the speed multiplier that will be used. @default 1' minimum: 0.25 maximum: 2 default: 1 pronunciationDictionary: description: List of pronunciation dictionary locators for custom word pronunciations. type: array items: $ref: '#/components/schemas/VapiPronunciationDictionaryLocator' chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId InworldVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - inworld voiceId: type: string description: "Available voices by language:\n\u2022 en: Alex, Ashley, Craig,\ \ Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia,\ \ Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus, Hana,\ \ Clive, Carter, Blake, Luna\n\u2022 zh: Yichen, Xiaoyin, Xinyi, Jing\n\ \u2022 nl: Erik, Katrien, Lennart, Lore\n\u2022 fr: Alain, H\xE9l\xE8\ ne, Mathieu, \xC9tienne\n\u2022 de: Johanna, Josef\n\u2022 it: Gianni,\ \ Orietta\n\u2022 ja: Asuka, Satoshi\n\u2022 ko: Hyunwoo, Minji, Seojun,\ \ Yoona\n\u2022 pl: Szymon, Wojciech\n\u2022 pt: Heitor, Mait\xEA\n\u2022\ \ es: Diego, Lupita, Miguel, Rafael\n\u2022 ru: Svetlana, Elena, Dmitry,\ \ Nikolai\n\u2022 hi: Riya, Manoj\n\u2022 he: Yael, Oren\n\u2022 ar: Nour,\ \ Omar" maxLength: 120 title: Inworld Voice ID enum: - Alex - Ashley - Craig - Deborah - Dennis - Edward - Elizabeth - Hades - Julia - Pixie - Mark - Olivia - Priya - Ronald - Sarah - Shaun - Theodore - Timothy - Wendy - Dominus - Hana - Clive - Carter - Blake - Luna - Yichen - Xiaoyin - Xinyi - Jing - Erik - Katrien - Lennart - Lore - Alain - "H\xE9l\xE8ne" - Mathieu - "\xC9tienne" - Johanna - Josef - Gianni - Orietta - Asuka - Satoshi - Hyunwoo - Minji - Seojun - Yoona - Szymon - Wojciech - Heitor - "Mait\xEA" - Diego - Lupita - Miguel - Rafael - Svetlana - Elena - Dmitry - Nikolai - Riya - Manoj - Yael - Oren - Nour - Omar example: Alex model: type: string description: This is the model that will be used. enum: - inworld-tts-1 default: inworld-tts-1 languageCode: type: string description: Language code for Inworld TTS synthesis default: en enum: - en - zh - ko - nl - fr - es - ja - de - it - pl - pt - ru - hi - he - ar temperature: type: number description: 'A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model''s default temperature of 1.1 will be used. The temperature parameter controls variance. Higher values will make the output more random and can lead to more expressive results. Lower values will make it more deterministic. See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details.' minimum: 0.1 maximum: 2 default: 1.1 example: null speakingRate: type: number description: 'A floating point number between 0.5, inclusive, and 1.5, inclusive. If equal to null or not provided, the model''s default speaking speed of 1.0 will be used. Values above 0.8 are recommended for higher quality. See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details.' minimum: 0.5 maximum: 1.5 default: 1 example: null chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' fallbackPlan: description: This is the plan for voice provider fallbacks in the event that the primary voice provider fails. allOf: - $ref: '#/components/schemas/FallbackPlan' required: - provider - voiceId MinimaxVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - minimax voiceId: type: string description: This is the provider-specific ID that will be used. Use a voice from MINIMAX_PREDEFINED_VOICES or a custom cloned voice ID. title: This is the Minimax Voice ID model: type: string description: 'This is the model that will be used. Options are ''speech-02-hd'' and ''speech-02-turbo''. speech-02-hd is optimized for high-fidelity applications like voiceovers and audiobooks. speech-02-turbo is designed for real-time applications with low latency. @default "speech-02-turbo"' enum: - speech-02-hd - speech-02-turbo - speech-2.5-turbo-preview example: speech-02-turbo default: speech-02-turbo emotion: type: string description: 'The emotion to use for the voice. If not provided, will use auto-detect mode. Options include: ''happy'', ''sad'', ''angry'', ''fearful'', ''surprised'', ''disgusted'', ''neutral''' example: happy subtitleType: type: string description: 'Controls the granularity of subtitle/timing data returned by Minimax during synthesis. Set to ''word'' to receive per-word timestamps in assistant.speechStarted events for karaoke-style caption rendering. @default "sentence"' enum: - word - sentence default: sentence pitch: type: number description: 'Voice pitch adjustment. Range from -12 to 12 semitones. @default 0' minimum: -12 maximum: 12 example: 0 default: 0 speed: type: number description: 'Voice speed adjustment. Range from 0.5 to 2.0. @default 1.0' minimum: 0.5 maximum: 2 example: 1 default: 1 volume: type: number description: 'Voice volume adjustment. Range from 0.5 to 2.0. @default 1.0' minimum: 0.5 maximum: 2 example: 1 default: 1 region: type: string description: The region for Minimax API. Defaults to "worldwide". enum: - worldwide - china default: worldwide languageBoost: type: string description: 'Language hint for MiniMax T2A. Example: yue (Cantonese), zh (Chinese), en (English).' enum: - Chinese - Chinese,Yue - English - Arabic - Russian - Spanish - French - Portuguese - German - Turkish - Dutch - Ukrainian - Vietnamese - Indonesian - Japanese - Italian - Korean - Thai - Polish - Romanian - Greek - Czech - Finnish - Hindi - Bulgarian - Danish - Hebrew - Malay - Persian - Slovak - Swedish - Croatian - Filipino - Hungarian - Norwegian - Slovenian - Catalan - Nynorsk - Tamil - Afrikaans - auto textNormalizationEnabled: type: boolean description: Enable MiniMax text normalization to improve number reading and formatting. default: true chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' 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 FallbackMinimaxVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - minimax voiceId: type: string description: This is the provider-specific ID that will be used. Use a voice from MINIMAX_PREDEFINED_VOICES or a custom cloned voice ID. title: This is the Minimax Voice ID model: type: string description: 'This is the model that will be used. Options are ''speech-02-hd'' and ''speech-02-turbo''. speech-02-hd is optimized for high-fidelity applications like voiceovers and audiobooks. speech-02-turbo is designed for real-time applications with low latency. @default "speech-02-turbo"' enum: - speech-02-hd - speech-02-turbo - speech-2.5-turbo-preview example: speech-02-turbo default: speech-02-turbo emotion: type: string description: 'The emotion to use for the voice. If not provided, will use auto-detect mode. Options include: ''happy'', ''sad'', ''angry'', ''fearful'', ''surprised'', ''disgusted'', ''neutral''' example: happy subtitleType: type: string description: 'Controls the granularity of subtitle/timing data returned by Minimax during synthesis. Set to ''word'' to receive per-word timestamps in assistant.speechStarted events for karaoke-style caption rendering. @default "sentence"' enum: - word - sentence default: sentence pitch: type: number description: 'Voice pitch adjustment. Range from -12 to 12 semitones. @default 0' minimum: -12 maximum: 12 example: 0 default: 0 speed: type: number description: 'Voice speed adjustment. Range from 0.5 to 2.0. @default 1.0' minimum: 0.5 maximum: 2 example: 1 default: 1 volume: type: number description: 'Voice volume adjustment. Range from 0.5 to 2.0. @default 1.0' minimum: 0.5 maximum: 2 example: 1 default: 1 region: type: string description: The region for Minimax API. Defaults to "worldwide". enum: - worldwide - china default: worldwide languageBoost: type: string description: 'Language hint for MiniMax T2A. Example: yue (Cantonese), zh (Chinese), en (English).' enum: - Chinese - Chinese,Yue - English - Arabic - Russian - Spanish - French - Portuguese - German - Turkish - Dutch - Ukrainian - Vietnamese - Indonesian - Japanese - Italian - Korean - Thai - Polish - Romanian - Greek - Czech - Finnish - Hindi - Bulgarian - Danish - Hebrew - Malay - Persian - Slovak - Swedish - Croatian - Filipino - Hungarian - Norwegian - Slovenian - Catalan - Nynorsk - Tamil - Afrikaans - auto textNormalizationEnabled: type: boolean description: Enable MiniMax text normalization to improve number reading and formatting. default: true chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' required: - provider - voiceId FallbackWellSaidVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - wellsaid voiceId: type: string description: The WellSaid speaker ID to synthesize. model: type: string description: This is the model that will be used. enum: - caruso - legacy enableSsml: type: boolean description: Enables limited SSML translation for input text. libraryIds: description: Array of library IDs to use for voice synthesis. type: array items: type: string chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' required: - provider - voiceId FallbackAzureVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - azure voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - andrew - brian - emma title: Preset Voice Options - type: string title: Azure Voice ID speed: type: number description: This is the speed multiplier that will be used. minimum: 0.5 maximum: 2 chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' required: - provider - voiceId FallbackCartesiaVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - cartesia voiceId: type: string description: The ID of the particular voice you want to use. model: type: string description: This is the model that will be used. This is optional and will default to the correct model for the voiceId. enum: - sonic-3 - sonic-3-2026-01-12 - sonic-3-2025-10-27 - sonic-2 - sonic-2-2025-06-11 - sonic-english - sonic-multilingual - sonic-preview - sonic example: sonic-english language: type: string description: This is the language that will be used. This is optional and will default to the correct language for the voiceId. enum: - ar - bg - bn - cs - da - de - el - en - es - fi - fr - gu - he - hi - hr - hu - id - it - ja - ka - kn - ko - ml - mr - ms - nl - 'no' - pa - pl - pt - ro - ru - sk - sv - ta - te - th - tl - tr - uk - vi - zh example: en experimentalControls: description: Experimental controls for Cartesia voice generation allOf: - $ref: '#/components/schemas/CartesiaExperimentalControls' generationConfig: description: Generation config for fine-grained control of sonic-3 voice output (speed, volume, and experimental controls). Only available for sonic-3 model. allOf: - $ref: '#/components/schemas/CartesiaGenerationConfig' pronunciationDictId: type: string description: Pronunciation dictionary ID for sonic-3. Allows custom pronunciations for specific words. Only available for sonic-3 model. example: dict_abc123 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 FallbackCustomVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. Use `custom-voice` for providers that are not natively supported. enum: - custom-voice voiceId: type: string description: This is the provider-specific ID that will be used. This is passed in the voice request payload to identify the voice to use. server: description: "This is where the voice request will be sent.\n\nRequest Example:\n\ \nPOST https://{server.url}\nContent-Type: application/json\n\n{\n \"\ message\": {\n \"type\": \"voice-request\",\n \"text\": \"Hello,\ \ world!\",\n \"sampleRate\": 24000,\n ...other metadata about the\ \ call...\n }\n}\n\nResponse Expected: 1-channel 16-bit raw PCM audio\ \ at the sample rate specified in the request. Here is how the response\ \ will be piped to the transport:\n```\nresponse.on('data', (chunk: Buffer)\ \ => {\n outputStream.write(chunk);\n});\n```" allOf: - $ref: '#/components/schemas/Server' 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 - server FallbackDeepgramVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - deepgram voiceId: type: string description: This is the provider-specific ID that will be used. enum: - asteria - luna - stella - athena - hera - orion - arcas - perseus - angus - orpheus - helios - zeus - thalia - andromeda - helena - apollo - arcas - aries - amalthea - asteria - athena - atlas - aurora - callista - cora - cordelia - delia - draco - electra - harmonia - hera - hermes - hyperion - iris - janus - juno - jupiter - luna - mars - minerva - neptune - odysseus - ophelia - orion - orpheus - pandora - phoebe - pluto - saturn - selene - theia - vesta - zeus - celeste - estrella - nestor - sirio - carina - alvaro - diana - aquila - selena - javier title: This is the Deepgram Voice ID model: type: string description: This is the model that will be used. Defaults to 'aura-2' when not specified. enum: - aura - aura-2 example: aura-2 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 This will only be used if you are using your own Deepgram API key. @default false' example: false default: false chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' required: - provider - voiceId FallbackElevenLabsVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - 11labs voiceId: description: This is the provider-specific ID that will be used. Ensure the Voice is present in your 11Labs Voice Library. oneOf: - type: string enum: - burt - marissa - andrea - sarah - phillip - steve - joseph - myra - paula - ryan - drew - paul - mrb - matilda - mark title: Preset Voice Options - type: string title: 11Labs Voice ID stability: type: number description: Defines the stability for voice settings. minimum: 0 maximum: 1 example: 0.5 similarityBoost: type: number description: Defines the similarity boost for voice settings. minimum: 0 maximum: 1 example: 0.75 style: type: number description: Defines the style for voice settings. minimum: 0 maximum: 1 example: 0 useSpeakerBoost: type: boolean description: Defines the use speaker boost for voice settings. example: false speed: type: number description: Defines the speed for voice settings. minimum: 0.7 maximum: 1.2 example: 0.9 optimizeStreamingLatency: type: number description: Defines the optimize streaming latency for voice settings. Defaults to 3. minimum: 0 maximum: 4 example: 3 enableSsmlParsing: type: boolean description: 'This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency. @default false' example: false autoMode: type: boolean description: Defines the auto mode for voice settings. Defaults to false. example: false model: type: string description: This is the model that will be used. Defaults to 'eleven_turbo_v2' if not specified. enum: - eleven_multilingual_v2 - eleven_turbo_v2 - eleven_turbo_v2_5 - eleven_flash_v2 - eleven_flash_v2_5 - eleven_monolingual_v1 - eleven_v3 example: eleven_turbo_v2_5 language: type: string description: This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5 supports language enforcement. For other models, an error will be returned if language code is provided. pronunciationDictionaryLocators: description: This is the pronunciation dictionary locators to use. type: array items: $ref: '#/components/schemas/ElevenLabsPronunciationDictionaryLocator' 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 FallbackHumeVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - hume model: type: string description: This is the model that will be used. enum: - octave - octave2 example: octave2 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''). If a Voice is specified in the request, this description serves as acting instructions. If 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: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - lmnt voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - amy - ansel - autumn - ava - brandon - caleb - cassian - chloe - dalton - daniel - dustin - elowen - evander - huxley - james - juniper - kennedy - lauren - leah - lily - lucas - magnus - miles - morgan - natalie - nathan - noah - nyssa - oliver - paige - ryan - sadie - sophie - stella - terrence - tyler - vesper - violet - warrick - zain - zeke - zoe title: Preset Voice Options - type: string title: LMNT Voice ID speed: type: number description: This is the speed multiplier that will be used. minimum: 0.25 maximum: 2 example: null language: description: Two letter ISO 639-1 language code. Use "auto" for auto-detection. enum: - aa - ab - ae - af - ak - am - an - ar - as - av - ay - az - ba - be - bg - bh - bi - bm - bn - bo - br - bs - ca - ce - ch - co - cr - cs - cu - cv - cy - da - de - dv - dz - ee - el - en - eo - es - et - eu - fa - ff - fi - fj - fo - fr - fy - ga - gd - gl - gn - gu - gv - ha - he - hi - ho - hr - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - io - is - it - iu - ja - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ku - kv - kw - ky - la - lb - lg - li - ln - lo - lt - lu - lv - mg - mh - mi - mk - ml - mn - mr - ms - mt - my - na - nb - nd - ne - ng - nl - nn - 'no' - nr - nv - ny - oc - oj - om - or - os - pa - pi - pl - ps - pt - qu - rm - rn - ro - ru - rw - sa - sc - sd - se - sg - si - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - tg - th - ti - tk - tl - tn - to - tr - ts - tt - tw - ty - ug - uk - ur - uz - ve - vi - vo - wa - wo - xh - yi - yue - yo - za - zh - zu - auto example: en oneOf: - type: string enum: - aa - ab - ae - af - ak - am - an - ar - as - av - ay - az - ba - be - bg - bh - bi - bm - bn - bo - br - bs - ca - ce - ch - co - cr - cs - cu - cv - cy - da - de - dv - dz - ee - el - en - eo - es - et - eu - fa - ff - fi - fj - fo - fr - fy - ga - gd - gl - gn - gu - gv - ha - he - hi - ho - hr - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - io - is - it - iu - ja - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ku - kv - kw - ky - la - lb - lg - li - ln - lo - lt - lu - lv - mg - mh - mi - mk - ml - mn - mr - ms - mt - my - na - nb - nd - ne - ng - nl - nn - 'no' - nr - nv - ny - oc - oj - om - or - os - pa - pi - pl - ps - pt - qu - rm - rn - ro - ru - rw - sa - sc - sd - se - sg - si - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - tg - th - ti - tk - tl - tn - to - tr - ts - tt - tw - ty - ug - uk - ur - uz - ve - vi - vo - wa - wo - xh - yi - yue - yo - za - zh - zu title: ISO 639-1 Language Code - type: string enum: - auto title: Auto-detect 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 FallbackNeuphonicVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - neuphonic voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: [] title: Preset Voice Options - type: string title: Neuphonic Voice ID 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: - $ref: '#/components/schemas/ChunkPlan' required: - provider - voiceId - language FallbackOpenAIVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - openai voiceId: description: 'This is the provider-specific ID that will be used. Please note that ash, ballad, coral, sage, and verse may only be used with realtime models.' oneOf: - type: string enum: - alloy - echo - fable - onyx - nova - shimmer - marin - cedar title: Preset Voice Options - type: string title: OpenAI Voice ID 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. Does not work with ''tts-1'' or ''tts-1-hd'' models.' maxLength: 10000 speed: type: number description: This is the speed multiplier that will be used. minimum: 0.25 maximum: 4 example: null chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' required: - provider - voiceId FallbackPlayHTVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - playht voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - jennifer - melissa - will - chris - matt - jack - ruby - davis - donna - michael title: Preset Voice Options - type: string title: PlayHT Voice ID speed: type: number description: This is the speed multiplier that will be used. minimum: 0.1 maximum: 5 example: null temperature: type: number description: A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model's default temperature will be used. The temperature parameter controls variance. Lower temperatures result in more predictable results, higher temperatures allow each run to vary more, so the voice may sound less like the baseline voice. minimum: 0.1 maximum: 2 example: null emotion: type: string description: An emotion to be applied to the speech. enum: - female_happy - female_sad - female_angry - female_fearful - female_disgust - female_surprised - male_happy - male_sad - male_angry - male_fearful - male_disgust - male_surprised example: null voiceGuidance: type: number description: A number between 1 and 6. Use lower numbers to reduce how unique your chosen voice will be compared to other voices. minimum: 1 maximum: 6 example: null styleGuidance: type: number description: A number between 1 and 30. Use lower numbers to to reduce how strong your chosen emotion will be. Higher numbers will create a very emotional performance. minimum: 1 maximum: 30 example: null textGuidance: type: number description: A number between 1 and 2. This number influences how closely the generated speech adheres to the input text. Use lower values to create more fluid speech, but with a higher chance of deviating from the input text. Higher numbers will make the generated speech more accurate to the input text, ensuring that the words spoken align closely with the provided text. minimum: 1 maximum: 2 example: null model: type: string description: Playht voice model/engine to use. enum: - PlayHT2.0 - PlayHT2.0-turbo - Play3.0-mini - PlayDialog language: type: string description: The language to use for the speech. enum: - afrikaans - albanian - amharic - arabic - bengali - bulgarian - catalan - croatian - czech - danish - dutch - english - french - galician - german - greek - hebrew - hindi - hungarian - indonesian - italian - japanese - korean - malay - mandarin - polish - portuguese - russian - serbian - spanish - swedish - tagalog - thai - turkish - ukrainian - urdu - xhosa 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 FallbackRimeAIVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - rime-ai voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - cove - moon - wildflower - eva - amber - maya - lagoon - breeze - helen - joy - marsh - creek - cedar - alpine - summit - nicholas - tyler - colin - hank - thunder - astra - eucalyptus - moraine - peak - tundra - mesa_extra - talon - marlu - glacier - falcon - luna - celeste - estelle - andromeda - esther - lyra - lintel - oculus - vespera - transom - bond - arcade - atrium - cupola - fern - sirius - orion - masonry - albion - parapet title: Suggested Voice Options description: Popular Rime AI voices across mist, mistv2, and arcana models. Any valid Rime AI voice ID is accepted, not just these suggestions. - type: string title: Any Rime AI Voice ID description: Any valid Rime AI voice ID. See https://docs.rime.ai/docs/voices for the full catalog. model: type: string description: This is the model that will be used. Defaults to 'arcana' when not specified. enum: - arcana - mistv2 - mist example: arcana speed: type: number description: This is the speed multiplier that will be used. minimum: 0.1 example: null pauseBetweenBrackets: type: boolean description: 'This is a flag that controls whether to add slight pauses using angle brackets. Example: "Hi. <200> I''d love to have a conversation with you." adds a 200ms pause between the first and second sentences.' example: false phonemizeBetweenBrackets: type: boolean description: 'This is a flag that controls whether text inside brackets should be phonemized (converted to phonetic pronunciation) - Example: "{h''El.o} World" will pronounce "Hello" as expected.' example: false reduceLatency: type: boolean description: This is a flag that controls whether to optimize for reduced latency in streaming. https://docs.rime.ai/api-reference/endpoint/websockets#param-reduce-latency example: false inlineSpeedAlpha: type: string description: This is a string that allows inline speed control using alpha notation. https://docs.rime.ai/api-reference/endpoint/websockets#param-inline-speed-alpha example: null language: type: string description: 'Language for speech synthesis. Uses ISO 639 codes. Supported: en, es, de, fr, ar, hi, ja, he, pt, ta, si.' enum: - en - es - de - fr - ar - hi - ja - he - pt - ta - si example: en 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 FallbackSesameVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - sesame voiceId: type: string description: This is the provider-specific ID that will be used. title: Sesame Voice ID. This should be either a name (a built-in voice) or a UUID (a custom voice). model: type: string description: This is the model that will be used. enum: - csm-1b 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 - model FallbackSmallestAIVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - smallest-ai voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - emily - jasmine - arman - james - mithali - aravind - raj - diya - raman - ananya - isha - william - aarav - monika - niharika - deepika - raghav - kajal - radhika - mansi - nisha - saurabh - pooja - saina - sanya title: Preset Voice Options - type: string title: Smallest AI Voice ID model: type: string description: Smallest AI voice model to use. Defaults to 'lightning' when not specified. enum: - lightning speed: type: number description: This is the speed multiplier that will be used. example: null chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' required: - provider - voiceId FallbackTavusVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - tavus voiceId: description: This is the provider-specific ID that will be used. oneOf: - type: string enum: - r52da2535a title: Preset Voice Options - type: string title: Tavus Voice ID 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' 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 FallbackVapiVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - vapi voiceId: type: string description: The voices provided by Vapi enum: - Clara - Godfrey - Layla - Sid - Gustavo - Elliot - Kylie - Rohan - Lily - Savannah - Hana - Neha - Cole - Harry - Paige - Spencer - Nico - Kai - Emma - Sagar - Neil - Naina - Leah - Tara - Jess - Leo - Dan - Mia - Zac - Zoe speed: type: number description: 'This is the speed multiplier that will be used. @default 1' minimum: 0.25 maximum: 2 default: 1 pronunciationDictionary: description: List of pronunciation dictionary locators for custom word pronunciations. type: array items: $ref: '#/components/schemas/VapiPronunciationDictionaryLocator' 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 FallbackInworldVoice: type: object properties: cachingEnabled: type: boolean description: This is the flag to toggle voice caching for the assistant. example: true default: true provider: type: string description: This is the voice provider that will be used. enum: - inworld voiceId: type: string description: "Available voices by language:\n\u2022 en: Alex, Ashley, Craig,\ \ Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia,\ \ Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus, Hana,\ \ Clive, Carter, Blake, Luna\n\u2022 zh: Yichen, Xiaoyin, Xinyi, Jing\n\ \u2022 nl: Erik, Katrien, Lennart, Lore\n\u2022 fr: Alain, H\xE9l\xE8\ ne, Mathieu, \xC9tienne\n\u2022 de: Johanna, Josef\n\u2022 it: Gianni,\ \ Orietta\n\u2022 ja: Asuka, Satoshi\n\u2022 ko: Hyunwoo, Minji, Seojun,\ \ Yoona\n\u2022 pl: Szymon, Wojciech\n\u2022 pt: Heitor, Mait\xEA\n\u2022\ \ es: Diego, Lupita, Miguel, Rafael\n\u2022 ru: Svetlana, Elena, Dmitry,\ \ Nikolai\n\u2022 hi: Riya, Manoj\n\u2022 he: Yael, Oren\n\u2022 ar: Nour,\ \ Omar" maxLength: 120 title: Inworld Voice ID enum: - Alex - Ashley - Craig - Deborah - Dennis - Edward - Elizabeth - Hades - Julia - Pixie - Mark - Olivia - Priya - Ronald - Sarah - Shaun - Theodore - Timothy - Wendy - Dominus - Hana - Clive - Carter - Blake - Luna - Yichen - Xiaoyin - Xinyi - Jing - Erik - Katrien - Lennart - Lore - Alain - "H\xE9l\xE8ne" - Mathieu - "\xC9tienne" - Johanna - Josef - Gianni - Orietta - Asuka - Satoshi - Hyunwoo - Minji - Seojun - Yoona - Szymon - Wojciech - Heitor - "Mait\xEA" - Diego - Lupita - Miguel - Rafael - Svetlana - Elena - Dmitry - Nikolai - Riya - Manoj - Yael - Oren - Nour - Omar example: Alex model: type: string description: This is the model that will be used. enum: - inworld-tts-1 default: inworld-tts-1 languageCode: type: string description: Language code for Inworld TTS synthesis default: en enum: - en - zh - ko - nl - fr - es - ja - de - it - pl - pt - ru - hi - he - ar temperature: type: number description: 'A floating point number between 0, exclusive, and 2, inclusive. If equal to null or not provided, the model''s default temperature of 1.1 will be used. The temperature parameter controls variance. Higher values will make the output more random and can lead to more expressive results. Lower values will make it more deterministic. See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details.' minimum: 0.1 maximum: 2 default: 1.1 example: null speakingRate: type: number description: 'A floating point number between 0.5, inclusive, and 1.5, inclusive. If equal to null or not provided, the model''s default speaking speed of 1.0 will be used. Values above 0.8 are recommended for higher quality. See https://docs.inworld.ai/docs/tts/capabilities/generating-audio#additional-configurations for more details.' minimum: 0.5 maximum: 1.5 default: 1 example: null chunkPlan: description: This is the plan for chunking the model output before it is sent to the voice provider. allOf: - $ref: '#/components/schemas/ChunkPlan' required: - provider - voiceId TransportConfigurationTwilio: type: object properties: provider: type: string enum: - twilio timeout: type: number description: 'The integer number of seconds that we should allow the phone to ring before assuming there is no answer. The default is `60` seconds and the maximum is `600` seconds. For some call flows, we will add a 5-second buffer to the timeout value you provide. For this reason, a timeout value of 10 seconds could result in an actual timeout closer to 15 seconds. You can set this to a short time, such as `15` seconds, to hang up before reaching an answering machine or voicemail. @default 60' minimum: 1 maximum: 600 example: 60 record: type: boolean description: 'Whether to record the call. Can be `true` to record the phone call, or `false` to not. The default is `false`. @default false' example: false recordingChannels: type: string description: 'The number of channels in the final recording. Can be: `mono` or `dual`. The default is `mono`. `mono` records both legs of the call in a single channel of the recording file. `dual` records each leg to a separate channel of the recording file. The first channel of a dual-channel recording contains the parent call and the second channel contains the child call. @default ''mono''' enum: - mono - dual example: mono required: - provider CreateAnthropicCredentialDTO: type: object properties: provider: type: string enum: - anthropic 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 CreateAnthropicBedrockCredentialDTO: type: object properties: provider: type: string enum: - anthropic-bedrock region: type: string description: AWS region where Bedrock is configured. enum: - us-east-1 - us-west-2 - eu-west-1 - eu-west-3 - ap-northeast-1 - ap-southeast-2 authenticationPlan: description: Authentication method - either direct IAM credentials or cross-account role assumption. oneOf: - $ref: '#/components/schemas/AWSIAMCredentialsAuthenticationPlan' - $ref: '#/components/schemas/AWSStsAuthenticationPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - region - authenticationPlan CreateAnyscaleCredentialDTO: type: object properties: provider: type: string enum: - anyscale 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 CreateAssemblyAICredentialDTO: type: object properties: provider: type: string enum: - assembly-ai apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey AzureBlobStorageBucketPlan: type: object properties: connectionString: type: string description: This is the blob storage connection string for the Azure resource. containerName: type: string description: This is the container name for the Azure blob storage. path: type: string description: 'This is the path where call artifacts will be stored. Usage: - To store call artifacts in a specific folder, set this to the full path. Eg. "/folder-name1/folder-name2". - To store call artifacts in the root of the bucket, leave this blank. @default "/"' required: - connectionString - containerName CreateAzureCredentialDTO: type: object properties: provider: type: string enum: - azure service: type: string description: This is the service being used in Azure. enum: - speech - blob_storage default: speech region: type: string description: This is the region of the Azure resource. enum: - australiaeast - canadaeast - canadacentral - centralus - eastus2 - eastus - france - germanywestcentral - india - japaneast - japanwest - northcentralus - norway - polandcentral - southcentralus - spaincentral - swedencentral - switzerland - uaenorth - uk - westeurope - westus - westus3 apiKey: type: string description: This is not returned in the API. maxLength: 10000 fallbackIndex: type: number minimum: 1 description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. bucketPlan: description: This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage. allOf: - $ref: '#/components/schemas/AzureBlobStorageBucketPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - service CreateAzureOpenAICredentialDTO: type: object properties: provider: type: string enum: - azure-openai region: type: string enum: - australiaeast - canadaeast - canadacentral - centralus - eastus2 - eastus - france - germanywestcentral - india - japaneast - japanwest - northcentralus - norway - polandcentral - southcentralus - spaincentral - swedencentral - switzerland - uaenorth - uk - westeurope - westus - westus3 models: type: array enum: - gpt-5.4 - gpt-5.4-mini - gpt-5.4-nano - gpt-5.2 - gpt-5.2-chat - gpt-5.1 - gpt-5.1-chat - gpt-5 - gpt-5-mini - gpt-5-nano - gpt-4.1-2025-04-14 - gpt-4.1-mini-2025-04-14 - gpt-4.1-nano-2025-04-14 - gpt-4o-2024-11-20 - gpt-4o-2024-08-06 - gpt-4o-2024-05-13 - gpt-4o-mini-2024-07-18 - gpt-4-turbo-2024-04-09 - gpt-4-0125-preview - gpt-4-1106-preview - gpt-4-0613 - gpt-35-turbo-0125 - gpt-35-turbo-1106 example: - gpt-4-0125-preview - gpt-4-0613 items: type: string enum: - gpt-5.4 - gpt-5.4-mini - gpt-5.4-nano - gpt-5.2 - gpt-5.2-chat - gpt-5.1 - gpt-5.1-chat - gpt-5 - gpt-5-mini - gpt-5-nano - gpt-4.1-2025-04-14 - gpt-4.1-mini-2025-04-14 - gpt-4.1-nano-2025-04-14 - gpt-4o-2024-11-20 - gpt-4o-2024-08-06 - gpt-4o-2024-05-13 - gpt-4o-mini-2024-07-18 - gpt-4-turbo-2024-04-09 - gpt-4-0125-preview - gpt-4-1106-preview - gpt-4-0613 - gpt-35-turbo-0125 - gpt-35-turbo-1106 openAIKey: type: string maxLength: 10000 description: This is not returned in the API. ocpApimSubscriptionKey: type: string description: This is not returned in the API. openAIEndpoint: type: string maxLength: 10000 name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - region - models - openAIKey - openAIEndpoint SipTrunkGateway: type: object properties: ip: type: string description: This is the address of the gateway. It can be an IPv4 address like 1.1.1.1 or a fully qualified domain name like my-sip-trunk.pstn.twilio.com. port: type: number description: 'This is the port number of the gateway. Default is 5060. @default 5060' minimum: 1 maximum: 65535 netmask: type: number description: 'This is the netmask of the gateway. Defaults to 32. @default 32' minimum: 24 maximum: 32 inboundEnabled: type: boolean description: 'This is whether inbound calls are allowed from this gateway. Default is true. @default true' outboundEnabled: type: boolean description: 'This is whether outbound calls should be sent to this gateway. Default is true. Note, if netmask is less than 32, it doesn''t affect the outbound IPs that are tried. 1 attempt is made to `ip:port`. @default true' outboundProtocol: type: string description: 'This is the protocol to use for SIP signaling outbound calls. Default is udp. @default udp' enum: - tls/srtp - tcp - tls - udp optionsPingEnabled: type: boolean description: 'This is whether to send options ping to the gateway. This can be used to check if the gateway is reachable. Default is false. This is useful for high availability setups where you want to check if the gateway is reachable before routing calls to it. Note, if no gateway for a trunk is reachable, outbound calls will be rejected. @default false' required: - ip SipTrunkOutboundSipRegisterPlan: type: object properties: domain: type: string username: type: string realm: type: string SipTrunkOutboundAuthenticationPlan: type: object properties: authPassword: type: string description: This is not returned in the API. authUsername: type: string sipRegisterPlan: description: This can be used to configure if SIP register is required by the SIP trunk. If not provided, no SIP registration will be attempted. allOf: - $ref: '#/components/schemas/SipTrunkOutboundSipRegisterPlan' SbcConfiguration: type: object properties: {} CreateByoSipTrunkCredentialDTO: 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 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. Usage: - Vonage/Twilio requires leading plus for all outbound calls. Set this to true. @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' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - gateways CreateCartesiaCredentialDTO: type: object properties: provider: type: string enum: - cartesia apiKey: type: string description: This is not returned in the API. apiUrl: type: string description: This can be used to point to an onprem Cartesia instance. Defaults to api.cartesia.ai. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CloudflareR2BucketPlan: type: object properties: accessKeyId: type: string description: Cloudflare R2 Access key ID. secretAccessKey: type: string description: Cloudflare R2 access key secret. This is not returned in the API. url: type: string description: Cloudflare R2 base url. name: type: string description: This is the name of the bucket. path: type: string description: 'This is the path where call artifacts will be stored. Usage: - To store call artifacts in a specific folder, set this to the full path. Eg. "/folder-name1/folder-name2". - To store call artifacts in the root of the bucket, leave this blank. @default "/"' required: - name CreateCloudflareCredentialDTO: type: object properties: provider: type: string enum: - cloudflare description: Credential provider. Only allowed value is cloudflare accountId: type: string description: Cloudflare Account Id. apiKey: type: string description: Cloudflare API Key / Token. accountEmail: type: string description: Cloudflare Account Email. fallbackIndex: type: number description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. minimum: 1 bucketPlan: description: This is the bucket plan that can be provided to store call artifacts in R2 allOf: - $ref: '#/components/schemas/CloudflareR2BucketPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider OAuth2AuthenticationPlan: type: object properties: type: type: string enum: - oauth2 url: type: string description: This is the OAuth2 URL. clientId: type: string description: This is the OAuth2 client ID. clientSecret: type: string description: This is the OAuth2 client secret. scope: type: string description: This is the scope of the OAuth2 token. maxLength: 1000 required: - type - url - clientId - clientSecret CreateCustomLLMCredentialDTO: type: object properties: provider: type: string enum: - custom-llm apiKey: type: string maxLength: 10000 description: This is not returned in the API. authenticationPlan: description: This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey allOf: - $ref: '#/components/schemas/OAuth2AuthenticationPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateDeepgramCredentialDTO: type: object properties: provider: type: string enum: - deepgram apiKey: type: string description: This is not returned in the API. apiUrl: type: string description: This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateDeepInfraCredentialDTO: type: object properties: provider: type: string enum: - deepinfra apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateDeepSeekCredentialDTO: type: object properties: provider: type: string enum: - deep-seek apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateElevenLabsCredentialDTO: type: object properties: provider: type: string enum: - 11labs apiKey: type: string maxLength: 10000 description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey GcpKey: type: object properties: type: type: string description: This is the type of the key. Most likely, this is "service_account". projectId: type: string description: This is the ID of the Google Cloud project associated with this key. privateKeyId: type: string description: This is the unique identifier for the private key. privateKey: type: string description: 'This is the private key in PEM format. Note: This is not returned in the API.' clientEmail: type: string description: This is the email address associated with the service account. clientId: type: string description: This is the unique identifier for the client. authUri: type: string description: This is the URI for the auth provider's authorization endpoint. tokenUri: type: string description: This is the URI for the auth provider's token endpoint. authProviderX509CertUrl: type: string description: This is the URL of the public x509 certificate for the auth provider. clientX509CertUrl: type: string description: This is the URL of the public x509 certificate for the client. universeDomain: type: string description: This is the domain associated with the universe this service account belongs to. required: - type - projectId - privateKeyId - privateKey - clientEmail - clientId - authUri - tokenUri - authProviderX509CertUrl - clientX509CertUrl - universeDomain BucketPlan: type: object properties: name: type: string description: This is the name of the bucket. region: type: string description: 'This is the region of the bucket. Usage: - If `credential.type` is `aws`, then this is required. - If `credential.type` is `gcp`, then this is optional since GCP allows buckets to be accessed without a region but region is required for data residency requirements. Read here: https://cloud.google.com/storage/docs/request-endpoints This overrides the `credential.region` field if it is provided.' path: type: string description: 'This is the path where call artifacts will be stored. Usage: - To store call artifacts in a specific folder, set this to the full path. Eg. "/folder-name1/folder-name2". - To store call artifacts in the root of the bucket, leave this blank. @default "/"' hmacAccessKey: type: string description: 'This is the HMAC access key offered by GCP for interoperability with S3 clients. Here is the guide on how to create: https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console Usage: - If `credential.type` is `gcp`, then this is required. - If `credential.type` is `aws`, then this is not required since credential.awsAccessKeyId is used instead.' hmacSecret: type: string description: 'This is the secret for the HMAC access key. Here is the guide on how to create: https://cloud.google.com/storage/docs/authentication/managing-hmackeys#console Usage: - If `credential.type` is `gcp`, then this is required. - If `credential.type` is `aws`, then this is not required since credential.awsSecretAccessKey is used instead. Note: This is not returned in the API.' required: - name CreateGcpCredentialDTO: type: object properties: provider: type: string enum: - gcp fallbackIndex: type: number description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. minimum: 1 gcpKey: description: 'This is the GCP key. This is the JSON that can be generated in the Google Cloud Console at https://console.cloud.google.com/iam-admin/serviceaccounts/details//keys. The schema is identical to the JSON that GCP outputs.' allOf: - $ref: '#/components/schemas/GcpKey' region: type: string description: This is the region of the GCP resource. maxLength: 40 bucketPlan: $ref: '#/components/schemas/BucketPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - gcpKey CreateGladiaCredentialDTO: type: object properties: provider: type: string enum: - gladia apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateGoHighLevelCredentialDTO: type: object properties: provider: type: string enum: - gohighlevel apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateGroqCredentialDTO: type: object properties: provider: type: string enum: - groq apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateLangfuseCredentialDTO: type: object properties: provider: type: string enum: - langfuse publicKey: type: string description: 'The public key for Langfuse project. Eg: pk-lf-...' apiKey: type: string description: 'The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API.' apiUrl: type: string description: 'The host URL for Langfuse project. Eg: https://cloud.langfuse.com' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - publicKey - apiKey - apiUrl CreateLmntCredentialDTO: type: object properties: provider: type: string enum: - lmnt apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateMakeCredentialDTO: type: object properties: provider: type: string enum: - make teamId: type: string description: Team ID region: type: string description: 'Region of your application. For example: eu1, eu2, us1, us2' apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - teamId - region - apiKey CreateOpenAICredentialDTO: type: object properties: provider: type: string enum: - openai apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateOpenRouterCredentialDTO: type: object properties: provider: type: string enum: - openrouter apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreatePerplexityAICredentialDTO: type: object properties: provider: type: string enum: - perplexity-ai apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreatePlayHTCredentialDTO: type: object properties: provider: type: string enum: - playht apiKey: type: string description: This is not returned in the API. userId: type: string name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey - userId CreateRimeAICredentialDTO: type: object properties: provider: type: string enum: - rime-ai apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateRunpodCredentialDTO: type: object properties: provider: type: string enum: - runpod apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateS3CredentialDTO: type: object properties: provider: type: string enum: - s3 description: Credential provider. Only allowed value is s3 awsAccessKeyId: type: string description: AWS access key ID. awsSecretAccessKey: type: string description: AWS access key secret. This is not returned in the API. region: type: string description: AWS region in which the S3 bucket is located. s3BucketName: type: string description: AWS S3 bucket name. s3PathPrefix: type: string description: The path prefix for the uploaded recording. Ex. "recordings/" fallbackIndex: type: number minimum: 1 description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - awsAccessKeyId - awsSecretAccessKey - region - s3BucketName - s3PathPrefix SupabaseBucketPlan: type: object properties: region: type: string description: 'This is the S3 Region. It should look like us-east-1 It should be one of the supabase regions defined in the SUPABASE_REGION enum Check https://supabase.com/docs/guides/platform/regions for up to date regions' enum: - us-west-1 - us-east-1 - us-east-2 - ca-central-1 - eu-west-1 - eu-west-2 - eu-west-3 - eu-central-1 - eu-central-2 - eu-north-1 - ap-south-1 - ap-southeast-1 - ap-northeast-1 - ap-northeast-2 - ap-southeast-2 - sa-east-1 url: type: string description: 'This is the S3 compatible URL for Supabase S3 This should look like https://.supabase.co/storage/v1/s3' accessKeyId: type: string description: 'This is the Supabase S3 Access Key ID. The user creates this in the Supabase project Storage settings' secretAccessKey: type: string description: 'This is the Supabase S3 Secret Access Key. The user creates this in the Supabase project Storage settings along with the access key id' name: type: string description: 'This is the Supabase S3 Bucket Name. The user must create this in Supabase under Storage > Buckets A bucket that does not exist will not be checked now, but file uploads will fail' path: type: string description: 'This is the Supabase S3 Bucket Folder Path. The user can create this in Supabase under Storage > Buckets A path that does not exist will not be checked now, but file uploads will fail A Path is like a folder in the bucket Eg. If the bucket is called "my-bucket" and the path is "my-folder", the full path is "my-bucket/my-folder"' required: - region - url - accessKeyId - secretAccessKey - name CreateSupabaseCredentialDTO: type: object properties: provider: type: string enum: - supabase description: This is for supabase storage. fallbackIndex: type: number minimum: 1 description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. bucketPlan: $ref: '#/components/schemas/SupabaseBucketPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider CreateSmallestAICredentialDTO: type: object properties: provider: type: string enum: - smallest-ai apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateTavusCredentialDTO: type: object properties: provider: type: string enum: - tavus apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateTogetherAICredentialDTO: type: object properties: provider: type: string enum: - together-ai apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateTwilioCredentialDTO: type: object properties: provider: type: string enum: - twilio authToken: type: string description: This is not returned in the API. apiKey: type: string description: This is not returned in the API. apiSecret: type: string description: This is not returned in the API. accountSid: type: string name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - accountSid CreateVonageCredentialDTO: type: object properties: provider: type: string enum: - vonage apiSecret: type: string description: This is not returned in the API. apiKey: type: string name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiSecret - apiKey CreateWebhookCredentialDTO: type: object properties: provider: type: string enum: - webhook authenticationPlan: description: This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. oneOf: - $ref: '#/components/schemas/OAuth2AuthenticationPlan' - $ref: '#/components/schemas/HMACAuthenticationPlan' - $ref: '#/components/schemas/BearerAuthenticationPlan' discriminator: propertyName: type mapping: oauth2: '#/components/schemas/OAuth2AuthenticationPlan' hmac: '#/components/schemas/HMACAuthenticationPlan' bearer: '#/components/schemas/BearerAuthenticationPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - authenticationPlan CreateXAiCredentialDTO: type: object properties: provider: type: string description: 'This is the api key for Grok in XAi''s console. Get it from here: https://console.x.ai' enum: - xai apiKey: type: string maxLength: 10000 description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateGoogleCalendarOAuth2ClientCredentialDTO: type: object properties: provider: type: string enum: - google.calendar.oauth2-client name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider CreateGoogleCalendarOAuth2AuthorizationCredentialDTO: type: object properties: provider: type: string enum: - google.calendar.oauth2-authorization authorizationId: type: string description: The authorization ID for the OAuth2 authorization name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - authorizationId CreateGoogleSheetsOAuth2AuthorizationCredentialDTO: type: object properties: provider: type: string enum: - google.sheets.oauth2-authorization authorizationId: type: string description: The authorization ID for the OAuth2 authorization name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - authorizationId CreateSlackOAuth2AuthorizationCredentialDTO: type: object properties: provider: type: string enum: - slack.oauth2-authorization authorizationId: type: string description: The authorization ID for the OAuth2 authorization name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - authorizationId CreateMinimaxCredentialDTO: type: object properties: provider: type: string enum: - minimax apiKey: type: string description: This is not returned in the API. groupId: type: string description: This is the Minimax Group ID. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey - groupId EndpointedSpeechLowConfidenceOptions: type: object properties: confidenceMin: type: number description: 'This is the minimum confidence threshold. Transcripts with confidence below this value will be discarded. @default confidenceMax - 0.2' minimum: 0 maximum: 1 confidenceMax: type: number description: 'This is the maximum confidence threshold. Transcripts with confidence at or above this value will be processed normally. @default transcriber''s confidenceThreshold' minimum: 0 maximum: 1 CallHookTranscriberEndpointedSpeechLowConfidence: type: object properties: do: type: array description: This is the set of actions to perform when the hook triggers items: oneOf: - $ref: '#/components/schemas/SayHookAction' title: SayHookAction - $ref: '#/components/schemas/ToolCallHookAction' title: ToolCallHookAction - $ref: '#/components/schemas/MessageAddHookAction' title: MessageAddHookAction 'on': type: string description: This is the event that triggers this hook maxLength: 1000 options: description: This is the options for the hook including confidence thresholds allOf: - $ref: '#/components/schemas/EndpointedSpeechLowConfidenceOptions' required: - do - 'on' SessionCreatedHook: type: object properties: 'on': type: string description: This is the event that triggers this hook enum: - session.created maxLength: 1000 do: type: array description: This is the set of actions to perform when the hook triggers. items: oneOf: - $ref: '#/components/schemas/ToolCallHookAction' title: ToolCallHookAction name: type: string description: 'Optional name for this hook instance. If no name is provided, the hook will be auto generated as UUID. @default UUID' maxLength: 1000 required: - 'on' - do SQLInjectionSecurityFilter: type: object properties: type: type: string description: The type of security threat to filter. enum: - sql-injection required: - type XSSSecurityFilter: type: object properties: type: type: string description: The type of security threat to filter. enum: - xss required: - type SSRFSecurityFilter: type: object properties: type: type: string description: The type of security threat to filter. enum: - ssrf required: - type RCESecurityFilter: type: object properties: type: type: string description: The type of security threat to filter. enum: - rce required: - type PromptInjectionSecurityFilter: type: object properties: type: type: string description: The type of security threat to filter. enum: - prompt-injection required: - type RegexSecurityFilter: type: object properties: type: type: string description: The type of security threat to filter. enum: - regex regex: type: string description: The regex pattern to filter. example: badword1|badword2 required: - type - regex AssistantOverrides: type: object properties: transcriber: description: These are the options for the assistant's transcriber. oneOf: - $ref: '#/components/schemas/AssemblyAITranscriber' title: AssemblyAITranscriber - $ref: '#/components/schemas/AzureSpeechTranscriber' title: AzureSpeechTranscriber - $ref: '#/components/schemas/CustomTranscriber' title: CustomTranscriber - $ref: '#/components/schemas/DeepgramTranscriber' title: DeepgramTranscriber - $ref: '#/components/schemas/ElevenLabsTranscriber' title: ElevenLabsTranscriber - $ref: '#/components/schemas/GladiaTranscriber' title: GladiaTranscriber - $ref: '#/components/schemas/GoogleTranscriber' title: GoogleTranscriber - $ref: '#/components/schemas/SpeechmaticsTranscriber' title: SpeechmaticsTranscriber - $ref: '#/components/schemas/TalkscriberTranscriber' title: TalkscriberTranscriber - $ref: '#/components/schemas/OpenAITranscriber' title: OpenAITranscriber - $ref: '#/components/schemas/CartesiaTranscriber' title: CartesiaTranscriber - $ref: '#/components/schemas/SonioxTranscriber' title: SonioxTranscriber model: description: These are the options for the assistant's LLM. oneOf: - $ref: '#/components/schemas/AnthropicModel' title: Anthropic - $ref: '#/components/schemas/AnthropicBedrockModel' title: AnthropicBedrock - $ref: '#/components/schemas/AnyscaleModel' title: Anyscale - $ref: '#/components/schemas/CerebrasModel' title: Cerebras - $ref: '#/components/schemas/CustomLLMModel' title: CustomLLM - $ref: '#/components/schemas/DeepInfraModel' title: DeepInfra - $ref: '#/components/schemas/DeepSeekModel' title: DeepSeek - $ref: '#/components/schemas/GoogleModel' title: Google - $ref: '#/components/schemas/GroqModel' title: Groq - $ref: '#/components/schemas/InflectionAIModel' title: InflectionAI - $ref: '#/components/schemas/MinimaxLLMModel' title: MiniMaxLLM - $ref: '#/components/schemas/OpenAIModel' title: OpenAI - $ref: '#/components/schemas/OpenRouterModel' title: OpenRouter - $ref: '#/components/schemas/PerplexityAIModel' title: PerplexityAI - $ref: '#/components/schemas/TogetherAIModel' title: Together - $ref: '#/components/schemas/XaiModel' title: XAI voice: description: These are the options for the assistant's voice. oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice firstMessage: type: string description: 'This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If 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''. Use: - ''assistant-speaks-first'' to have the assistant speak first. - ''assistant-waits-for-user'' to have the assistant wait for the user to speak first. - ''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). @default ''assistant-speaks-first''' enum: - assistant-speaks-first - assistant-speaks-first-with-model-generated-message - assistant-waits-for-user example: assistant-speaks-first voicemailDetection: description: 'These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. By default, voicemail detection is disabled.' oneOf: - type: string enum: - 'off' - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan' title: Google - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan' title: OpenAI - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan' title: Twilio - $ref: '#/components/schemas/VapiVoicemailDetectionPlan' title: Vapi clientMessages: type: array enum: - conversation-update - assistant.speechStarted - function-call - function-call-result - hang - language-changed - metadata - model-output - speech-update - status-update - transcript - tool-calls - tool-calls-result - tool.completed - transfer-update - user-interrupted - voice-input - workflow.node.started - assistant.started example: - conversation-update - function-call - hang - model-output - speech-update - status-update - transfer-update - transcript - tool-calls - user-interrupted - voice-input - workflow.node.started - assistant.started description: These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema. items: type: string enum: - conversation-update - assistant.speechStarted - function-call - function-call-result - hang - language-changed - metadata - model-output - speech-update - status-update - transcript - tool-calls - tool-calls-result - tool.completed - transfer-update - user-interrupted - voice-input - workflow.node.started - assistant.started serverMessages: type: array enum: - assistant.started - assistant.speechStarted - conversation-update - end-of-call-report - function-call - hang - language-changed - language-change-detected - model-output - phone-call-control - speech-update - status-update - transcript - transcript[transcriptType="final"] - tool-calls - transfer-destination-request - handoff-destination-request - transfer-update - user-interrupted - voice-input - chat.created - chat.deleted - session.created - session.updated - session.deleted - call.deleted - call.delete.failed example: - conversation-update - end-of-call-report - function-call - hang - speech-update - status-update - tool-calls - transfer-destination-request - handoff-destination-request - user-interrupted - assistant.started description: These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema. items: type: string enum: - assistant.started - assistant.speechStarted - conversation-update - end-of-call-report - function-call - hang - language-changed - language-change-detected - model-output - phone-call-control - speech-update - status-update - transcript - transcript[transcriptType="final"] - tool-calls - transfer-destination-request - handoff-destination-request - transfer-update - user-interrupted - voice-input - chat.created - chat.deleted - session.created - session.updated - session.deleted - call.deleted - call.delete.failed maxDurationSeconds: type: number description: 'This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)' minimum: 10 maximum: 43200 example: 600 backgroundSound: description: 'This is the background sound in the call. Default for phone calls is ''office'' and default for web calls is ''off''. You can also provide a custom sound by providing a URL to an audio file.' oneOf: - type: string enum: - 'off' - office example: office - type: string format: uri example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3 modelOutputInMessagesEnabled: type: boolean description: 'This determines whether the model''s output is used in conversation history rather than the transcription of assistant''s speech. @default false' example: false transportConfigurations: type: array description: These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used. items: oneOf: - $ref: '#/components/schemas/TransportConfigurationTwilio' title: Twilio observabilityPlan: description: 'This is the plan for observability of assistant''s calls. Currently, only Langfuse is supported.' oneOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' title: Langfuse allOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' credentials: type: array description: These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials. items: oneOf: - $ref: '#/components/schemas/CreateAnthropicCredentialDTO' title: AnthropicCredential - $ref: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' title: AnthropicBedrockCredential - $ref: '#/components/schemas/CreateAnyscaleCredentialDTO' title: AnyscaleCredential - $ref: '#/components/schemas/CreateAssemblyAICredentialDTO' title: AssemblyAICredential - $ref: '#/components/schemas/CreateAzureCredentialDTO' title: AzureCredential - $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO' title: AzureOpenAICredential - $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO' title: ByoSipTrunkCredential - $ref: '#/components/schemas/CreateCartesiaCredentialDTO' title: CartesiaCredential - $ref: '#/components/schemas/CreateCerebrasCredentialDTO' title: CerebrasCredential - $ref: '#/components/schemas/CreateCloudflareCredentialDTO' title: CloudflareCredential - $ref: '#/components/schemas/CreateCustomLLMCredentialDTO' title: CustomLLMCredential - $ref: '#/components/schemas/CreateDeepgramCredentialDTO' title: DeepgramCredential - $ref: '#/components/schemas/CreateDeepInfraCredentialDTO' title: DeepInfraCredential - $ref: '#/components/schemas/CreateDeepSeekCredentialDTO' title: DeepSeekCredential - $ref: '#/components/schemas/CreateElevenLabsCredentialDTO' title: ElevenLabsCredential - $ref: '#/components/schemas/CreateGcpCredentialDTO' title: GcpCredential - $ref: '#/components/schemas/CreateGladiaCredentialDTO' title: GladiaCredential - $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO' title: GhlCredential - $ref: '#/components/schemas/CreateGoogleCredentialDTO' title: GoogleCredential - $ref: '#/components/schemas/CreateGroqCredentialDTO' title: GroqCredential - $ref: '#/components/schemas/CreateHumeCredentialDTO' title: HumeCredential - $ref: '#/components/schemas/CreateInflectionAICredentialDTO' title: InflectionAICredential - $ref: '#/components/schemas/CreateLangfuseCredentialDTO' title: LangfuseCredential - $ref: '#/components/schemas/CreateLmntCredentialDTO' title: LmntCredential - $ref: '#/components/schemas/CreateMakeCredentialDTO' title: MakeCredential - $ref: '#/components/schemas/CreateMistralCredentialDTO' title: MistralCredential - $ref: '#/components/schemas/CreateNeuphonicCredentialDTO' title: NeuphonicCredential - $ref: '#/components/schemas/CreateOpenAICredentialDTO' title: OpenAICredential - $ref: '#/components/schemas/CreateOpenRouterCredentialDTO' title: OpenRouterCredential - $ref: '#/components/schemas/CreatePerplexityAICredentialDTO' title: PerplexityAICredential - $ref: '#/components/schemas/CreatePlayHTCredentialDTO' title: PlayHTCredential - $ref: '#/components/schemas/CreateRimeAICredentialDTO' title: RimeAICredential - $ref: '#/components/schemas/CreateRunpodCredentialDTO' title: RunpodCredential - $ref: '#/components/schemas/CreateS3CredentialDTO' title: S3Credential - $ref: '#/components/schemas/CreateSmallestAICredentialDTO' title: SmallestAICredential - $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO' title: SpeechmaticsCredential - $ref: '#/components/schemas/CreateSonioxCredentialDTO' title: SonioxCredential - $ref: '#/components/schemas/CreateSupabaseCredentialDTO' title: SupabaseCredential - $ref: '#/components/schemas/CreateTavusCredentialDTO' title: TavusCredential - $ref: '#/components/schemas/CreateTogetherAICredentialDTO' title: TogetherAICredential - $ref: '#/components/schemas/CreateTwilioCredentialDTO' title: TwilioCredential - $ref: '#/components/schemas/CreateVonageCredentialDTO' title: VonageCredential - $ref: '#/components/schemas/CreateWebhookCredentialDTO' title: WebhookCredential - $ref: '#/components/schemas/CreateCustomCredentialDTO' title: CustomCredential - $ref: '#/components/schemas/CreateXAiCredentialDTO' title: XAiCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' title: GoogleCalendarOAuth2ClientCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' title: GoogleCalendarOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' title: GoogleSheetsOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' title: SlackOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' title: GoHighLevelMCPCredential - $ref: '#/components/schemas/CreateInworldCredentialDTO' title: InworldCredential - $ref: '#/components/schemas/CreateMinimaxCredentialDTO' title: MinimaxCredential - $ref: '#/components/schemas/CreateWellSaidCredentialDTO' title: WellSaidCredential - $ref: '#/components/schemas/CreateEmailCredentialDTO' title: EmailCredential - $ref: '#/components/schemas/CreateSlackWebhookCredentialDTO' title: SlackWebhookCredential discriminator: propertyName: provider mapping: 11labs: '#/components/schemas/CreateElevenLabsCredentialDTO' anthropic: '#/components/schemas/CreateAnthropicCredentialDTO' anthropic-bedrock: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO' assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO' azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO' azure: '#/components/schemas/CreateAzureCredentialDTO' byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO' cartesia: '#/components/schemas/CreateCartesiaCredentialDTO' cerebras: '#/components/schemas/CreateCerebrasCredentialDTO' cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO' custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO' deepgram: '#/components/schemas/CreateDeepgramCredentialDTO' deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO' deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO' gcp: '#/components/schemas/CreateGcpCredentialDTO' gladia: '#/components/schemas/CreateGladiaCredentialDTO' gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO' google: '#/components/schemas/CreateGoogleCredentialDTO' groq: '#/components/schemas/CreateGroqCredentialDTO' inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO' langfuse: '#/components/schemas/CreateLangfuseCredentialDTO' lmnt: '#/components/schemas/CreateLmntCredentialDTO' make: '#/components/schemas/CreateMakeCredentialDTO' openai: '#/components/schemas/CreateOpenAICredentialDTO' openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO' perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO' playht: '#/components/schemas/CreatePlayHTCredentialDTO' rime-ai: '#/components/schemas/CreateRimeAICredentialDTO' runpod: '#/components/schemas/CreateRunpodCredentialDTO' s3: '#/components/schemas/CreateS3CredentialDTO' supabase: '#/components/schemas/CreateSupabaseCredentialDTO' smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO' tavus: '#/components/schemas/CreateTavusCredentialDTO' together-ai: '#/components/schemas/CreateTogetherAICredentialDTO' twilio: '#/components/schemas/CreateTwilioCredentialDTO' vonage: '#/components/schemas/CreateVonageCredentialDTO' webhook: '#/components/schemas/CreateWebhookCredentialDTO' custom-credential: '#/components/schemas/CreateCustomCredentialDTO' xai: '#/components/schemas/CreateXAiCredentialDTO' neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO' hume: '#/components/schemas/CreateHumeCredentialDTO' mistral: '#/components/schemas/CreateMistralCredentialDTO' speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO' soniox: '#/components/schemas/CreateSonioxCredentialDTO' google.calendar.oauth2-client: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' google.calendar.oauth2-authorization: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' google.sheets.oauth2-authorization: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' slack.oauth2-authorization: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' inworld: '#/components/schemas/CreateInworldCredentialDTO' minimax: '#/components/schemas/CreateMinimaxCredentialDTO' wellsaid: '#/components/schemas/CreateWellSaidCredentialDTO' email: '#/components/schemas/CreateEmailCredentialDTO' slack-webhook: '#/components/schemas/CreateSlackWebhookCredentialDTO' hooks: type: array description: This is a set of actions that will be performed on certain events. items: oneOf: - $ref: '#/components/schemas/CallHookCallEnding' title: CallHookCallEnding - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted' title: CallHookAssistantSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted' title: CallHookCustomerSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout' title: CallHookCustomerSpeechTimeout - $ref: '#/components/schemas/SessionCreatedHook' title: SessionCreatedHook tools:append: type: array items: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool 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. This 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. If 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. If unspecified, it will hang up without saying anything.' maxLength: 1000 endCallPhrases: description: This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive. type: array items: type: string maxLength: 140 minLength: 2 compliancePlan: $ref: '#/components/schemas/CompliancePlan' metadata: type: object description: This is for metadata you want to store on the assistant. backgroundSpeechDenoisingPlan: description: 'This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Smart denoising can be combined with or used independently of Fourier denoising. Order of precedence: - Smart denoising - Fourier denoising' allOf: - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan' analysisPlan: description: This is the plan for analysis of assistant's calls. Stored in `call.analysis`. deprecated: true allOf: - $ref: '#/components/schemas/AnalysisPlan' artifactPlan: description: This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. allOf: - $ref: '#/components/schemas/ArtifactPlan' startSpeakingPlan: description: 'This is the plan for when the assistant should start talking. You should configure this if you''re running into these issues: - The assistant is too slow to start talking after the customer is done speaking. - The assistant is too fast to start talking after the customer is done speaking. - 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. You should configure this if you''re running into these issues: - The assistant is too slow to recognize customer''s interruption. - The assistant is too fast to recognize customer''s interruption. - The assistant is getting interrupted by phrases that are just acknowledgments. - The assistant is getting interrupted by background noises. - 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. Usage: - To enable live listening of the assistant''s calls, set `monitorPlan.listenEnabled` to `true`. - To enable live control of the assistant''s calls, set `monitorPlan.controlEnabled` to `true`. - To attach monitors to the assistant, set `monitorPlan.monitorIds` to the set of monitor ids.' 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. The order of precedence is: 1. assistant.server.url 2. phoneNumber.serverUrl 3. org.serverUrl' allOf: - $ref: '#/components/schemas/Server' keypadInputPlan: $ref: '#/components/schemas/KeypadInputPlan' CreateAssistantDTO: type: object properties: transcriber: description: These are the options for the assistant's transcriber. oneOf: - $ref: '#/components/schemas/AssemblyAITranscriber' title: AssemblyAITranscriber - $ref: '#/components/schemas/AzureSpeechTranscriber' title: AzureSpeechTranscriber - $ref: '#/components/schemas/CustomTranscriber' title: CustomTranscriber - $ref: '#/components/schemas/DeepgramTranscriber' title: DeepgramTranscriber - $ref: '#/components/schemas/ElevenLabsTranscriber' title: ElevenLabsTranscriber - $ref: '#/components/schemas/GladiaTranscriber' title: GladiaTranscriber - $ref: '#/components/schemas/GoogleTranscriber' title: GoogleTranscriber - $ref: '#/components/schemas/SpeechmaticsTranscriber' title: SpeechmaticsTranscriber - $ref: '#/components/schemas/TalkscriberTranscriber' title: TalkscriberTranscriber - $ref: '#/components/schemas/OpenAITranscriber' title: OpenAITranscriber - $ref: '#/components/schemas/CartesiaTranscriber' title: CartesiaTranscriber - $ref: '#/components/schemas/SonioxTranscriber' title: SonioxTranscriber model: description: These are the options for the assistant's LLM. oneOf: - $ref: '#/components/schemas/AnthropicModel' title: Anthropic - $ref: '#/components/schemas/AnthropicBedrockModel' title: AnthropicBedrock - $ref: '#/components/schemas/AnyscaleModel' title: Anyscale - $ref: '#/components/schemas/CerebrasModel' title: Cerebras - $ref: '#/components/schemas/CustomLLMModel' title: CustomLLM - $ref: '#/components/schemas/DeepInfraModel' title: DeepInfra - $ref: '#/components/schemas/DeepSeekModel' title: DeepSeek - $ref: '#/components/schemas/GoogleModel' title: Google - $ref: '#/components/schemas/GroqModel' title: Groq - $ref: '#/components/schemas/InflectionAIModel' title: InflectionAI - $ref: '#/components/schemas/MinimaxLLMModel' title: MiniMaxLLM - $ref: '#/components/schemas/OpenAIModel' title: OpenAI - $ref: '#/components/schemas/OpenRouterModel' title: OpenRouter - $ref: '#/components/schemas/PerplexityAIModel' title: PerplexityAI - $ref: '#/components/schemas/TogetherAIModel' title: Together - $ref: '#/components/schemas/XaiModel' title: XAI voice: description: These are the options for the assistant's voice. oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice firstMessage: type: string description: 'This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If 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''. Use: - ''assistant-speaks-first'' to have the assistant speak first. - ''assistant-waits-for-user'' to have the assistant wait for the user to speak first. - ''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). @default ''assistant-speaks-first''' enum: - assistant-speaks-first - assistant-speaks-first-with-model-generated-message - assistant-waits-for-user example: assistant-speaks-first voicemailDetection: description: 'These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. By default, voicemail detection is disabled.' oneOf: - type: string enum: - 'off' - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan' title: Google - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan' title: OpenAI - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan' title: Twilio - $ref: '#/components/schemas/VapiVoicemailDetectionPlan' title: Vapi clientMessages: type: array enum: - conversation-update - assistant.speechStarted - function-call - function-call-result - hang - language-changed - metadata - model-output - speech-update - status-update - transcript - tool-calls - tool-calls-result - tool.completed - transfer-update - user-interrupted - voice-input - workflow.node.started - assistant.started example: - conversation-update - function-call - hang - model-output - speech-update - status-update - transfer-update - transcript - tool-calls - user-interrupted - voice-input - workflow.node.started - assistant.started description: These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema. items: type: string enum: - conversation-update - assistant.speechStarted - function-call - function-call-result - hang - language-changed - metadata - model-output - speech-update - status-update - transcript - tool-calls - tool-calls-result - tool.completed - transfer-update - user-interrupted - voice-input - workflow.node.started - assistant.started serverMessages: type: array enum: - assistant.started - assistant.speechStarted - conversation-update - end-of-call-report - function-call - hang - language-changed - language-change-detected - model-output - phone-call-control - speech-update - status-update - transcript - transcript[transcriptType="final"] - tool-calls - transfer-destination-request - handoff-destination-request - transfer-update - user-interrupted - voice-input - chat.created - chat.deleted - session.created - session.updated - session.deleted - call.deleted - call.delete.failed example: - conversation-update - end-of-call-report - function-call - hang - speech-update - status-update - tool-calls - transfer-destination-request - handoff-destination-request - user-interrupted - assistant.started description: These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema. items: type: string enum: - assistant.started - assistant.speechStarted - conversation-update - end-of-call-report - function-call - hang - language-changed - language-change-detected - model-output - phone-call-control - speech-update - status-update - transcript - transcript[transcriptType="final"] - tool-calls - transfer-destination-request - handoff-destination-request - transfer-update - user-interrupted - voice-input - chat.created - chat.deleted - session.created - session.updated - session.deleted - call.deleted - call.delete.failed maxDurationSeconds: type: number description: 'This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)' minimum: 10 maximum: 43200 example: 600 backgroundSound: description: 'This is the background sound in the call. Default for phone calls is ''office'' and default for web calls is ''off''. You can also provide a custom sound by providing a URL to an audio file.' oneOf: - type: string enum: - 'off' - office example: office - type: string format: uri example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3 modelOutputInMessagesEnabled: type: boolean description: 'This determines whether the model''s output is used in conversation history rather than the transcription of assistant''s speech. @default false' example: false transportConfigurations: type: array description: These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used. items: oneOf: - $ref: '#/components/schemas/TransportConfigurationTwilio' title: Twilio observabilityPlan: description: 'This is the plan for observability of assistant''s calls. Currently, only Langfuse is supported.' oneOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' title: Langfuse allOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' credentials: type: array description: These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials. items: oneOf: - $ref: '#/components/schemas/CreateAnthropicCredentialDTO' title: AnthropicCredential - $ref: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' title: AnthropicBedrockCredential - $ref: '#/components/schemas/CreateAnyscaleCredentialDTO' title: AnyscaleCredential - $ref: '#/components/schemas/CreateAssemblyAICredentialDTO' title: AssemblyAICredential - $ref: '#/components/schemas/CreateAzureCredentialDTO' title: AzureCredential - $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO' title: AzureOpenAICredential - $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO' title: ByoSipTrunkCredential - $ref: '#/components/schemas/CreateCartesiaCredentialDTO' title: CartesiaCredential - $ref: '#/components/schemas/CreateCerebrasCredentialDTO' title: CerebrasCredential - $ref: '#/components/schemas/CreateCloudflareCredentialDTO' title: CloudflareCredential - $ref: '#/components/schemas/CreateCustomLLMCredentialDTO' title: CustomLLMCredential - $ref: '#/components/schemas/CreateDeepgramCredentialDTO' title: DeepgramCredential - $ref: '#/components/schemas/CreateDeepInfraCredentialDTO' title: DeepInfraCredential - $ref: '#/components/schemas/CreateDeepSeekCredentialDTO' title: DeepSeekCredential - $ref: '#/components/schemas/CreateElevenLabsCredentialDTO' title: ElevenLabsCredential - $ref: '#/components/schemas/CreateGcpCredentialDTO' title: GcpCredential - $ref: '#/components/schemas/CreateGladiaCredentialDTO' title: GladiaCredential - $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO' title: GhlCredential - $ref: '#/components/schemas/CreateGoogleCredentialDTO' title: GoogleCredential - $ref: '#/components/schemas/CreateGroqCredentialDTO' title: GroqCredential - $ref: '#/components/schemas/CreateHumeCredentialDTO' title: HumeCredential - $ref: '#/components/schemas/CreateInflectionAICredentialDTO' title: InflectionAICredential - $ref: '#/components/schemas/CreateLangfuseCredentialDTO' title: LangfuseCredential - $ref: '#/components/schemas/CreateLmntCredentialDTO' title: LmntCredential - $ref: '#/components/schemas/CreateMakeCredentialDTO' title: MakeCredential - $ref: '#/components/schemas/CreateMistralCredentialDTO' title: MistralCredential - $ref: '#/components/schemas/CreateNeuphonicCredentialDTO' title: NeuphonicCredential - $ref: '#/components/schemas/CreateOpenAICredentialDTO' title: OpenAICredential - $ref: '#/components/schemas/CreateOpenRouterCredentialDTO' title: OpenRouterCredential - $ref: '#/components/schemas/CreatePerplexityAICredentialDTO' title: PerplexityAICredential - $ref: '#/components/schemas/CreatePlayHTCredentialDTO' title: PlayHTCredential - $ref: '#/components/schemas/CreateRimeAICredentialDTO' title: RimeAICredential - $ref: '#/components/schemas/CreateRunpodCredentialDTO' title: RunpodCredential - $ref: '#/components/schemas/CreateS3CredentialDTO' title: S3Credential - $ref: '#/components/schemas/CreateSmallestAICredentialDTO' title: SmallestAICredential - $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO' title: SpeechmaticsCredential - $ref: '#/components/schemas/CreateSonioxCredentialDTO' title: SonioxCredential - $ref: '#/components/schemas/CreateSupabaseCredentialDTO' title: SupabaseCredential - $ref: '#/components/schemas/CreateTavusCredentialDTO' title: TavusCredential - $ref: '#/components/schemas/CreateTogetherAICredentialDTO' title: TogetherAICredential - $ref: '#/components/schemas/CreateTwilioCredentialDTO' title: TwilioCredential - $ref: '#/components/schemas/CreateVonageCredentialDTO' title: VonageCredential - $ref: '#/components/schemas/CreateWebhookCredentialDTO' title: WebhookCredential - $ref: '#/components/schemas/CreateCustomCredentialDTO' title: CustomCredential - $ref: '#/components/schemas/CreateXAiCredentialDTO' title: XAiCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' title: GoogleCalendarOAuth2ClientCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' title: GoogleCalendarOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' title: GoogleSheetsOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' title: SlackOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' title: GoHighLevelMCPCredential - $ref: '#/components/schemas/CreateInworldCredentialDTO' title: InworldCredential - $ref: '#/components/schemas/CreateMinimaxCredentialDTO' title: MinimaxCredential - $ref: '#/components/schemas/CreateWellSaidCredentialDTO' title: WellSaidCredential - $ref: '#/components/schemas/CreateEmailCredentialDTO' title: EmailCredential - $ref: '#/components/schemas/CreateSlackWebhookCredentialDTO' title: SlackWebhookCredential discriminator: propertyName: provider mapping: 11labs: '#/components/schemas/CreateElevenLabsCredentialDTO' anthropic: '#/components/schemas/CreateAnthropicCredentialDTO' anthropic-bedrock: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO' assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO' azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO' azure: '#/components/schemas/CreateAzureCredentialDTO' byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO' cartesia: '#/components/schemas/CreateCartesiaCredentialDTO' cerebras: '#/components/schemas/CreateCerebrasCredentialDTO' cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO' custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO' deepgram: '#/components/schemas/CreateDeepgramCredentialDTO' deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO' deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO' gcp: '#/components/schemas/CreateGcpCredentialDTO' gladia: '#/components/schemas/CreateGladiaCredentialDTO' gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO' google: '#/components/schemas/CreateGoogleCredentialDTO' groq: '#/components/schemas/CreateGroqCredentialDTO' inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO' langfuse: '#/components/schemas/CreateLangfuseCredentialDTO' lmnt: '#/components/schemas/CreateLmntCredentialDTO' make: '#/components/schemas/CreateMakeCredentialDTO' openai: '#/components/schemas/CreateOpenAICredentialDTO' openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO' perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO' playht: '#/components/schemas/CreatePlayHTCredentialDTO' rime-ai: '#/components/schemas/CreateRimeAICredentialDTO' runpod: '#/components/schemas/CreateRunpodCredentialDTO' s3: '#/components/schemas/CreateS3CredentialDTO' supabase: '#/components/schemas/CreateSupabaseCredentialDTO' smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO' tavus: '#/components/schemas/CreateTavusCredentialDTO' together-ai: '#/components/schemas/CreateTogetherAICredentialDTO' twilio: '#/components/schemas/CreateTwilioCredentialDTO' vonage: '#/components/schemas/CreateVonageCredentialDTO' webhook: '#/components/schemas/CreateWebhookCredentialDTO' custom-credential: '#/components/schemas/CreateCustomCredentialDTO' xai: '#/components/schemas/CreateXAiCredentialDTO' neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO' hume: '#/components/schemas/CreateHumeCredentialDTO' mistral: '#/components/schemas/CreateMistralCredentialDTO' speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO' soniox: '#/components/schemas/CreateSonioxCredentialDTO' google.calendar.oauth2-client: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' google.calendar.oauth2-authorization: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' google.sheets.oauth2-authorization: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' slack.oauth2-authorization: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' inworld: '#/components/schemas/CreateInworldCredentialDTO' minimax: '#/components/schemas/CreateMinimaxCredentialDTO' wellsaid: '#/components/schemas/CreateWellSaidCredentialDTO' email: '#/components/schemas/CreateEmailCredentialDTO' slack-webhook: '#/components/schemas/CreateSlackWebhookCredentialDTO' hooks: type: array description: This is a set of actions that will be performed on certain events. items: oneOf: - $ref: '#/components/schemas/CallHookCallEnding' title: CallHookCallEnding - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted' title: CallHookAssistantSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted' title: CallHookCustomerSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout' title: CallHookCustomerSpeechTimeout - $ref: '#/components/schemas/SessionCreatedHook' title: SessionCreatedHook name: type: string description: 'This is the name of the assistant. This 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. If 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. If unspecified, it will hang up without saying anything.' maxLength: 1000 endCallPhrases: description: This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive. type: array items: type: string maxLength: 140 minLength: 2 compliancePlan: $ref: '#/components/schemas/CompliancePlan' metadata: type: object description: This is for metadata you want to store on the assistant. backgroundSpeechDenoisingPlan: description: 'This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Smart denoising can be combined with or used independently of Fourier denoising. Order of precedence: - Smart denoising - Fourier denoising' allOf: - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan' analysisPlan: description: This is the plan for analysis of assistant's calls. Stored in `call.analysis`. deprecated: true allOf: - $ref: '#/components/schemas/AnalysisPlan' artifactPlan: description: This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. allOf: - $ref: '#/components/schemas/ArtifactPlan' startSpeakingPlan: description: 'This is the plan for when the assistant should start talking. You should configure this if you''re running into these issues: - The assistant is too slow to start talking after the customer is done speaking. - The assistant is too fast to start talking after the customer is done speaking. - 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. You should configure this if you''re running into these issues: - The assistant is too slow to recognize customer''s interruption. - The assistant is too fast to recognize customer''s interruption. - The assistant is getting interrupted by phrases that are just acknowledgments. - The assistant is getting interrupted by background noises. - 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. Usage: - To enable live listening of the assistant''s calls, set `monitorPlan.listenEnabled` to `true`. - To enable live control of the assistant''s calls, set `monitorPlan.controlEnabled` to `true`. - To attach monitors to the assistant, set `monitorPlan.monitorIds` to the set of monitor ids.' 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. The order of precedence is: 1. assistant.server.url 2. phoneNumber.serverUrl 3. org.serverUrl' allOf: - $ref: '#/components/schemas/Server' keypadInputPlan: $ref: '#/components/schemas/KeypadInputPlan' Assistant: type: object properties: transcriber: description: These are the options for the assistant's transcriber. oneOf: - $ref: '#/components/schemas/AssemblyAITranscriber' title: AssemblyAITranscriber - $ref: '#/components/schemas/AzureSpeechTranscriber' title: AzureSpeechTranscriber - $ref: '#/components/schemas/CustomTranscriber' title: CustomTranscriber - $ref: '#/components/schemas/DeepgramTranscriber' title: DeepgramTranscriber - $ref: '#/components/schemas/ElevenLabsTranscriber' title: ElevenLabsTranscriber - $ref: '#/components/schemas/GladiaTranscriber' title: GladiaTranscriber - $ref: '#/components/schemas/GoogleTranscriber' title: GoogleTranscriber - $ref: '#/components/schemas/SpeechmaticsTranscriber' title: SpeechmaticsTranscriber - $ref: '#/components/schemas/TalkscriberTranscriber' title: TalkscriberTranscriber - $ref: '#/components/schemas/OpenAITranscriber' title: OpenAITranscriber - $ref: '#/components/schemas/CartesiaTranscriber' title: CartesiaTranscriber - $ref: '#/components/schemas/SonioxTranscriber' title: SonioxTranscriber model: description: These are the options for the assistant's LLM. oneOf: - $ref: '#/components/schemas/AnthropicModel' title: Anthropic - $ref: '#/components/schemas/AnthropicBedrockModel' title: AnthropicBedrock - $ref: '#/components/schemas/AnyscaleModel' title: Anyscale - $ref: '#/components/schemas/CerebrasModel' title: Cerebras - $ref: '#/components/schemas/CustomLLMModel' title: CustomLLM - $ref: '#/components/schemas/DeepInfraModel' title: DeepInfra - $ref: '#/components/schemas/DeepSeekModel' title: DeepSeek - $ref: '#/components/schemas/GoogleModel' title: Google - $ref: '#/components/schemas/GroqModel' title: Groq - $ref: '#/components/schemas/InflectionAIModel' title: InflectionAI - $ref: '#/components/schemas/MinimaxLLMModel' title: MiniMaxLLM - $ref: '#/components/schemas/OpenAIModel' title: OpenAI - $ref: '#/components/schemas/OpenRouterModel' title: OpenRouter - $ref: '#/components/schemas/PerplexityAIModel' title: PerplexityAI - $ref: '#/components/schemas/TogetherAIModel' title: Together - $ref: '#/components/schemas/XaiModel' title: XAI voice: description: These are the options for the assistant's voice. oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice firstMessage: type: string description: 'This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If 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''. Use: - ''assistant-speaks-first'' to have the assistant speak first. - ''assistant-waits-for-user'' to have the assistant wait for the user to speak first. - ''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). @default ''assistant-speaks-first''' enum: - assistant-speaks-first - assistant-speaks-first-with-model-generated-message - assistant-waits-for-user example: assistant-speaks-first voicemailDetection: description: 'These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. By default, voicemail detection is disabled.' oneOf: - type: string enum: - 'off' - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan' title: Google - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan' title: OpenAI - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan' title: Twilio - $ref: '#/components/schemas/VapiVoicemailDetectionPlan' title: Vapi clientMessages: type: array enum: - conversation-update - assistant.speechStarted - function-call - function-call-result - hang - language-changed - metadata - model-output - speech-update - status-update - transcript - tool-calls - tool-calls-result - tool.completed - transfer-update - user-interrupted - voice-input - workflow.node.started - assistant.started example: - conversation-update - function-call - hang - model-output - speech-update - status-update - transfer-update - transcript - tool-calls - user-interrupted - voice-input - workflow.node.started - assistant.started description: These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema. items: type: string enum: - conversation-update - assistant.speechStarted - function-call - function-call-result - hang - language-changed - metadata - model-output - speech-update - status-update - transcript - tool-calls - tool-calls-result - tool.completed - transfer-update - user-interrupted - voice-input - workflow.node.started - assistant.started serverMessages: type: array enum: - assistant.started - assistant.speechStarted - conversation-update - end-of-call-report - function-call - hang - language-changed - language-change-detected - model-output - phone-call-control - speech-update - status-update - transcript - transcript[transcriptType="final"] - tool-calls - transfer-destination-request - handoff-destination-request - transfer-update - user-interrupted - voice-input - chat.created - chat.deleted - session.created - session.updated - session.deleted - call.deleted - call.delete.failed example: - conversation-update - end-of-call-report - function-call - hang - speech-update - status-update - tool-calls - transfer-destination-request - handoff-destination-request - user-interrupted - assistant.started description: These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema. items: type: string enum: - assistant.started - assistant.speechStarted - conversation-update - end-of-call-report - function-call - hang - language-changed - language-change-detected - model-output - phone-call-control - speech-update - status-update - transcript - transcript[transcriptType="final"] - tool-calls - transfer-destination-request - handoff-destination-request - transfer-update - user-interrupted - voice-input - chat.created - chat.deleted - session.created - session.updated - session.deleted - call.deleted - call.delete.failed maxDurationSeconds: type: number description: 'This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)' minimum: 10 maximum: 43200 example: 600 backgroundSound: description: 'This is the background sound in the call. Default for phone calls is ''office'' and default for web calls is ''off''. You can also provide a custom sound by providing a URL to an audio file.' oneOf: - type: string enum: - 'off' - office example: office - type: string format: uri example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3 modelOutputInMessagesEnabled: type: boolean description: 'This determines whether the model''s output is used in conversation history rather than the transcription of assistant''s speech. @default false' example: false transportConfigurations: type: array description: These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used. items: oneOf: - $ref: '#/components/schemas/TransportConfigurationTwilio' title: Twilio observabilityPlan: description: 'This is the plan for observability of assistant''s calls. Currently, only Langfuse is supported.' oneOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' title: Langfuse allOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' credentials: type: array description: These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials. items: oneOf: - $ref: '#/components/schemas/CreateAnthropicCredentialDTO' title: AnthropicCredential - $ref: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' title: AnthropicBedrockCredential - $ref: '#/components/schemas/CreateAnyscaleCredentialDTO' title: AnyscaleCredential - $ref: '#/components/schemas/CreateAssemblyAICredentialDTO' title: AssemblyAICredential - $ref: '#/components/schemas/CreateAzureCredentialDTO' title: AzureCredential - $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO' title: AzureOpenAICredential - $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO' title: ByoSipTrunkCredential - $ref: '#/components/schemas/CreateCartesiaCredentialDTO' title: CartesiaCredential - $ref: '#/components/schemas/CreateCerebrasCredentialDTO' title: CerebrasCredential - $ref: '#/components/schemas/CreateCloudflareCredentialDTO' title: CloudflareCredential - $ref: '#/components/schemas/CreateCustomLLMCredentialDTO' title: CustomLLMCredential - $ref: '#/components/schemas/CreateDeepgramCredentialDTO' title: DeepgramCredential - $ref: '#/components/schemas/CreateDeepInfraCredentialDTO' title: DeepInfraCredential - $ref: '#/components/schemas/CreateDeepSeekCredentialDTO' title: DeepSeekCredential - $ref: '#/components/schemas/CreateElevenLabsCredentialDTO' title: ElevenLabsCredential - $ref: '#/components/schemas/CreateGcpCredentialDTO' title: GcpCredential - $ref: '#/components/schemas/CreateGladiaCredentialDTO' title: GladiaCredential - $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO' title: GhlCredential - $ref: '#/components/schemas/CreateGoogleCredentialDTO' title: GoogleCredential - $ref: '#/components/schemas/CreateGroqCredentialDTO' title: GroqCredential - $ref: '#/components/schemas/CreateHumeCredentialDTO' title: HumeCredential - $ref: '#/components/schemas/CreateInflectionAICredentialDTO' title: InflectionAICredential - $ref: '#/components/schemas/CreateLangfuseCredentialDTO' title: LangfuseCredential - $ref: '#/components/schemas/CreateLmntCredentialDTO' title: LmntCredential - $ref: '#/components/schemas/CreateMakeCredentialDTO' title: MakeCredential - $ref: '#/components/schemas/CreateMistralCredentialDTO' title: MistralCredential - $ref: '#/components/schemas/CreateNeuphonicCredentialDTO' title: NeuphonicCredential - $ref: '#/components/schemas/CreateOpenAICredentialDTO' title: OpenAICredential - $ref: '#/components/schemas/CreateOpenRouterCredentialDTO' title: OpenRouterCredential - $ref: '#/components/schemas/CreatePerplexityAICredentialDTO' title: PerplexityAICredential - $ref: '#/components/schemas/CreatePlayHTCredentialDTO' title: PlayHTCredential - $ref: '#/components/schemas/CreateRimeAICredentialDTO' title: RimeAICredential - $ref: '#/components/schemas/CreateRunpodCredentialDTO' title: RunpodCredential - $ref: '#/components/schemas/CreateS3CredentialDTO' title: S3Credential - $ref: '#/components/schemas/CreateSmallestAICredentialDTO' title: SmallestAICredential - $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO' title: SpeechmaticsCredential - $ref: '#/components/schemas/CreateSonioxCredentialDTO' title: SonioxCredential - $ref: '#/components/schemas/CreateSupabaseCredentialDTO' title: SupabaseCredential - $ref: '#/components/schemas/CreateTavusCredentialDTO' title: TavusCredential - $ref: '#/components/schemas/CreateTogetherAICredentialDTO' title: TogetherAICredential - $ref: '#/components/schemas/CreateTwilioCredentialDTO' title: TwilioCredential - $ref: '#/components/schemas/CreateVonageCredentialDTO' title: VonageCredential - $ref: '#/components/schemas/CreateWebhookCredentialDTO' title: WebhookCredential - $ref: '#/components/schemas/CreateCustomCredentialDTO' title: CustomCredential - $ref: '#/components/schemas/CreateXAiCredentialDTO' title: XAiCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' title: GoogleCalendarOAuth2ClientCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' title: GoogleCalendarOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' title: GoogleSheetsOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' title: SlackOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' title: GoHighLevelMCPCredential - $ref: '#/components/schemas/CreateInworldCredentialDTO' title: InworldCredential - $ref: '#/components/schemas/CreateMinimaxCredentialDTO' title: MinimaxCredential - $ref: '#/components/schemas/CreateWellSaidCredentialDTO' title: WellSaidCredential - $ref: '#/components/schemas/CreateEmailCredentialDTO' title: EmailCredential - $ref: '#/components/schemas/CreateSlackWebhookCredentialDTO' title: SlackWebhookCredential discriminator: propertyName: provider mapping: 11labs: '#/components/schemas/CreateElevenLabsCredentialDTO' anthropic: '#/components/schemas/CreateAnthropicCredentialDTO' anthropic-bedrock: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO' assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO' azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO' azure: '#/components/schemas/CreateAzureCredentialDTO' byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO' cartesia: '#/components/schemas/CreateCartesiaCredentialDTO' cerebras: '#/components/schemas/CreateCerebrasCredentialDTO' cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO' custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO' deepgram: '#/components/schemas/CreateDeepgramCredentialDTO' deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO' deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO' gcp: '#/components/schemas/CreateGcpCredentialDTO' gladia: '#/components/schemas/CreateGladiaCredentialDTO' gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO' google: '#/components/schemas/CreateGoogleCredentialDTO' groq: '#/components/schemas/CreateGroqCredentialDTO' inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO' langfuse: '#/components/schemas/CreateLangfuseCredentialDTO' lmnt: '#/components/schemas/CreateLmntCredentialDTO' make: '#/components/schemas/CreateMakeCredentialDTO' openai: '#/components/schemas/CreateOpenAICredentialDTO' openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO' perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO' playht: '#/components/schemas/CreatePlayHTCredentialDTO' rime-ai: '#/components/schemas/CreateRimeAICredentialDTO' runpod: '#/components/schemas/CreateRunpodCredentialDTO' s3: '#/components/schemas/CreateS3CredentialDTO' supabase: '#/components/schemas/CreateSupabaseCredentialDTO' smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO' tavus: '#/components/schemas/CreateTavusCredentialDTO' together-ai: '#/components/schemas/CreateTogetherAICredentialDTO' twilio: '#/components/schemas/CreateTwilioCredentialDTO' vonage: '#/components/schemas/CreateVonageCredentialDTO' webhook: '#/components/schemas/CreateWebhookCredentialDTO' custom-credential: '#/components/schemas/CreateCustomCredentialDTO' xai: '#/components/schemas/CreateXAiCredentialDTO' neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO' hume: '#/components/schemas/CreateHumeCredentialDTO' mistral: '#/components/schemas/CreateMistralCredentialDTO' speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO' soniox: '#/components/schemas/CreateSonioxCredentialDTO' google.calendar.oauth2-client: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' google.calendar.oauth2-authorization: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' google.sheets.oauth2-authorization: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' slack.oauth2-authorization: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' inworld: '#/components/schemas/CreateInworldCredentialDTO' minimax: '#/components/schemas/CreateMinimaxCredentialDTO' wellsaid: '#/components/schemas/CreateWellSaidCredentialDTO' email: '#/components/schemas/CreateEmailCredentialDTO' slack-webhook: '#/components/schemas/CreateSlackWebhookCredentialDTO' hooks: type: array description: This is a set of actions that will be performed on certain events. items: oneOf: - $ref: '#/components/schemas/CallHookCallEnding' title: CallHookCallEnding - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted' title: CallHookAssistantSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted' title: CallHookCustomerSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout' title: CallHookCustomerSpeechTimeout - $ref: '#/components/schemas/SessionCreatedHook' title: SessionCreatedHook name: type: string description: 'This is the name of the assistant. This 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. If 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. If unspecified, it will hang up without saying anything.' maxLength: 1000 endCallPhrases: description: This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive. type: array items: type: string maxLength: 140 minLength: 2 compliancePlan: $ref: '#/components/schemas/CompliancePlan' metadata: type: object description: This is for metadata you want to store on the assistant. backgroundSpeechDenoisingPlan: description: 'This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Smart denoising can be combined with or used independently of Fourier denoising. Order of precedence: - Smart denoising - Fourier denoising' allOf: - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan' analysisPlan: description: This is the plan for analysis of assistant's calls. Stored in `call.analysis`. deprecated: true allOf: - $ref: '#/components/schemas/AnalysisPlan' artifactPlan: description: This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. allOf: - $ref: '#/components/schemas/ArtifactPlan' startSpeakingPlan: description: 'This is the plan for when the assistant should start talking. You should configure this if you''re running into these issues: - The assistant is too slow to start talking after the customer is done speaking. - The assistant is too fast to start talking after the customer is done speaking. - 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. You should configure this if you''re running into these issues: - The assistant is too slow to recognize customer''s interruption. - The assistant is too fast to recognize customer''s interruption. - The assistant is getting interrupted by phrases that are just acknowledgments. - The assistant is getting interrupted by background noises. - 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. Usage: - To enable live listening of the assistant''s calls, set `monitorPlan.listenEnabled` to `true`. - To enable live control of the assistant''s calls, set `monitorPlan.controlEnabled` to `true`. - To attach monitors to the assistant, set `monitorPlan.monitorIds` to the set of monitor ids.' 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. The order of precedence is: 1. assistant.server.url 2. phoneNumber.serverUrl 3. org.serverUrl' allOf: - $ref: '#/components/schemas/Server' keypadInputPlan: $ref: '#/components/schemas/KeypadInputPlan' id: type: string description: This is the unique identifier for the assistant. orgId: type: string description: This is the unique identifier for the org that this assistant belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the assistant was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the assistant was last updated. required: - id - orgId - createdAt - updatedAt PaginationMeta: type: object properties: itemsPerPage: type: number totalItems: type: number currentPage: type: number totalPages: type: number hasNextPage: type: boolean sortOrder: type: string enum: - ASC - DESC itemsBeyondRetention: type: boolean createdAtLe: format: date-time type: string createdAtGe: format: date-time type: string required: - itemsPerPage - totalItems - currentPage AssistantPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/Assistant' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata AssistantVersionPaginatedResponse: type: object properties: results: type: array metadata: $ref: '#/components/schemas/PaginationMeta' nextPageState: type: string required: - results - metadata UpdateAssistantDTO: type: object properties: transcriber: description: These are the options for the assistant's transcriber. oneOf: - $ref: '#/components/schemas/AssemblyAITranscriber' title: AssemblyAITranscriber - $ref: '#/components/schemas/AzureSpeechTranscriber' title: AzureSpeechTranscriber - $ref: '#/components/schemas/CustomTranscriber' title: CustomTranscriber - $ref: '#/components/schemas/DeepgramTranscriber' title: DeepgramTranscriber - $ref: '#/components/schemas/ElevenLabsTranscriber' title: ElevenLabsTranscriber - $ref: '#/components/schemas/GladiaTranscriber' title: GladiaTranscriber - $ref: '#/components/schemas/GoogleTranscriber' title: GoogleTranscriber - $ref: '#/components/schemas/SpeechmaticsTranscriber' title: SpeechmaticsTranscriber - $ref: '#/components/schemas/TalkscriberTranscriber' title: TalkscriberTranscriber - $ref: '#/components/schemas/OpenAITranscriber' title: OpenAITranscriber - $ref: '#/components/schemas/CartesiaTranscriber' title: CartesiaTranscriber - $ref: '#/components/schemas/SonioxTranscriber' title: SonioxTranscriber model: description: These are the options for the assistant's LLM. oneOf: - $ref: '#/components/schemas/AnthropicModel' title: Anthropic - $ref: '#/components/schemas/AnthropicBedrockModel' title: AnthropicBedrock - $ref: '#/components/schemas/AnyscaleModel' title: Anyscale - $ref: '#/components/schemas/CerebrasModel' title: Cerebras - $ref: '#/components/schemas/CustomLLMModel' title: CustomLLM - $ref: '#/components/schemas/DeepInfraModel' title: DeepInfra - $ref: '#/components/schemas/DeepSeekModel' title: DeepSeek - $ref: '#/components/schemas/GoogleModel' title: Google - $ref: '#/components/schemas/GroqModel' title: Groq - $ref: '#/components/schemas/InflectionAIModel' title: InflectionAI - $ref: '#/components/schemas/MinimaxLLMModel' title: MiniMaxLLM - $ref: '#/components/schemas/OpenAIModel' title: OpenAI - $ref: '#/components/schemas/OpenRouterModel' title: OpenRouter - $ref: '#/components/schemas/PerplexityAIModel' title: PerplexityAI - $ref: '#/components/schemas/TogetherAIModel' title: Together - $ref: '#/components/schemas/XaiModel' title: XAI voice: description: These are the options for the assistant's voice. oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice firstMessage: type: string description: 'This is the first message that the assistant will say. This can also be a URL to a containerized audio file (mp3, wav, etc.). If 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''. Use: - ''assistant-speaks-first'' to have the assistant speak first. - ''assistant-waits-for-user'' to have the assistant wait for the user to speak first. - ''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). @default ''assistant-speaks-first''' enum: - assistant-speaks-first - assistant-speaks-first-with-model-generated-message - assistant-waits-for-user example: assistant-speaks-first voicemailDetection: description: 'These are the settings to configure or disable voicemail detection. Alternatively, voicemail detection can be configured using the model.tools=[VoicemailTool]. By default, voicemail detection is disabled.' oneOf: - type: string enum: - 'off' - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan' title: Google - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan' title: OpenAI - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan' title: Twilio - $ref: '#/components/schemas/VapiVoicemailDetectionPlan' title: Vapi clientMessages: type: array enum: - conversation-update - assistant.speechStarted - function-call - function-call-result - hang - language-changed - metadata - model-output - speech-update - status-update - transcript - tool-calls - tool-calls-result - tool.completed - transfer-update - user-interrupted - voice-input - workflow.node.started - assistant.started example: - conversation-update - function-call - hang - model-output - speech-update - status-update - transfer-update - transcript - tool-calls - user-interrupted - voice-input - workflow.node.started - assistant.started description: These are the messages that will be sent to your Client SDKs. Default is conversation-update,function-call,hang,model-output,speech-update,status-update,transfer-update,transcript,tool-calls,user-interrupted,voice-input,workflow.node.started,assistant.started. You can check the shape of the messages in ClientMessage schema. items: type: string enum: - conversation-update - assistant.speechStarted - function-call - function-call-result - hang - language-changed - metadata - model-output - speech-update - status-update - transcript - tool-calls - tool-calls-result - tool.completed - transfer-update - user-interrupted - voice-input - workflow.node.started - assistant.started serverMessages: type: array enum: - assistant.started - assistant.speechStarted - conversation-update - end-of-call-report - function-call - hang - language-changed - language-change-detected - model-output - phone-call-control - speech-update - status-update - transcript - transcript[transcriptType="final"] - tool-calls - transfer-destination-request - handoff-destination-request - transfer-update - user-interrupted - voice-input - chat.created - chat.deleted - session.created - session.updated - session.deleted - call.deleted - call.delete.failed example: - conversation-update - end-of-call-report - function-call - hang - speech-update - status-update - tool-calls - transfer-destination-request - handoff-destination-request - user-interrupted - assistant.started description: These are the messages that will be sent to your Server URL. Default is conversation-update,end-of-call-report,function-call,hang,speech-update,status-update,tool-calls,transfer-destination-request,handoff-destination-request,user-interrupted,assistant.started. You can check the shape of the messages in ServerMessage schema. items: type: string enum: - assistant.started - assistant.speechStarted - conversation-update - end-of-call-report - function-call - hang - language-changed - language-change-detected - model-output - phone-call-control - speech-update - status-update - transcript - transcript[transcriptType="final"] - tool-calls - transfer-destination-request - handoff-destination-request - transfer-update - user-interrupted - voice-input - chat.created - chat.deleted - session.created - session.updated - session.deleted - call.deleted - call.delete.failed maxDurationSeconds: type: number description: 'This is the maximum number of seconds that the call will last. When the call reaches this duration, it will be ended. @default 600 (10 minutes)' minimum: 10 maximum: 43200 example: 600 backgroundSound: description: 'This is the background sound in the call. Default for phone calls is ''office'' and default for web calls is ''off''. You can also provide a custom sound by providing a URL to an audio file.' oneOf: - type: string enum: - 'off' - office example: office - type: string format: uri example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3 modelOutputInMessagesEnabled: type: boolean description: 'This determines whether the model''s output is used in conversation history rather than the transcription of assistant''s speech. @default false' example: false transportConfigurations: type: array description: These are the configurations to be passed to the transport providers of assistant's calls, like Twilio. You can store multiple configurations for different transport providers. For a call, only the configuration matching the call transport provider is used. items: oneOf: - $ref: '#/components/schemas/TransportConfigurationTwilio' title: Twilio observabilityPlan: description: 'This is the plan for observability of assistant''s calls. Currently, only Langfuse is supported.' oneOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' title: Langfuse allOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' credentials: type: array description: These are dynamic credentials that will be used for the assistant calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials. items: oneOf: - $ref: '#/components/schemas/CreateAnthropicCredentialDTO' title: AnthropicCredential - $ref: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' title: AnthropicBedrockCredential - $ref: '#/components/schemas/CreateAnyscaleCredentialDTO' title: AnyscaleCredential - $ref: '#/components/schemas/CreateAssemblyAICredentialDTO' title: AssemblyAICredential - $ref: '#/components/schemas/CreateAzureCredentialDTO' title: AzureCredential - $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO' title: AzureOpenAICredential - $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO' title: ByoSipTrunkCredential - $ref: '#/components/schemas/CreateCartesiaCredentialDTO' title: CartesiaCredential - $ref: '#/components/schemas/CreateCerebrasCredentialDTO' title: CerebrasCredential - $ref: '#/components/schemas/CreateCloudflareCredentialDTO' title: CloudflareCredential - $ref: '#/components/schemas/CreateCustomLLMCredentialDTO' title: CustomLLMCredential - $ref: '#/components/schemas/CreateDeepgramCredentialDTO' title: DeepgramCredential - $ref: '#/components/schemas/CreateDeepInfraCredentialDTO' title: DeepInfraCredential - $ref: '#/components/schemas/CreateDeepSeekCredentialDTO' title: DeepSeekCredential - $ref: '#/components/schemas/CreateElevenLabsCredentialDTO' title: ElevenLabsCredential - $ref: '#/components/schemas/CreateGcpCredentialDTO' title: GcpCredential - $ref: '#/components/schemas/CreateGladiaCredentialDTO' title: GladiaCredential - $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO' title: GhlCredential - $ref: '#/components/schemas/CreateGoogleCredentialDTO' title: GoogleCredential - $ref: '#/components/schemas/CreateGroqCredentialDTO' title: GroqCredential - $ref: '#/components/schemas/CreateHumeCredentialDTO' title: HumeCredential - $ref: '#/components/schemas/CreateInflectionAICredentialDTO' title: InflectionAICredential - $ref: '#/components/schemas/CreateLangfuseCredentialDTO' title: LangfuseCredential - $ref: '#/components/schemas/CreateLmntCredentialDTO' title: LmntCredential - $ref: '#/components/schemas/CreateMakeCredentialDTO' title: MakeCredential - $ref: '#/components/schemas/CreateMistralCredentialDTO' title: MistralCredential - $ref: '#/components/schemas/CreateNeuphonicCredentialDTO' title: NeuphonicCredential - $ref: '#/components/schemas/CreateOpenAICredentialDTO' title: OpenAICredential - $ref: '#/components/schemas/CreateOpenRouterCredentialDTO' title: OpenRouterCredential - $ref: '#/components/schemas/CreatePerplexityAICredentialDTO' title: PerplexityAICredential - $ref: '#/components/schemas/CreatePlayHTCredentialDTO' title: PlayHTCredential - $ref: '#/components/schemas/CreateRimeAICredentialDTO' title: RimeAICredential - $ref: '#/components/schemas/CreateRunpodCredentialDTO' title: RunpodCredential - $ref: '#/components/schemas/CreateS3CredentialDTO' title: S3Credential - $ref: '#/components/schemas/CreateSmallestAICredentialDTO' title: SmallestAICredential - $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO' title: SpeechmaticsCredential - $ref: '#/components/schemas/CreateSonioxCredentialDTO' title: SonioxCredential - $ref: '#/components/schemas/CreateSupabaseCredentialDTO' title: SupabaseCredential - $ref: '#/components/schemas/CreateTavusCredentialDTO' title: TavusCredential - $ref: '#/components/schemas/CreateTogetherAICredentialDTO' title: TogetherAICredential - $ref: '#/components/schemas/CreateTwilioCredentialDTO' title: TwilioCredential - $ref: '#/components/schemas/CreateVonageCredentialDTO' title: VonageCredential - $ref: '#/components/schemas/CreateWebhookCredentialDTO' title: WebhookCredential - $ref: '#/components/schemas/CreateCustomCredentialDTO' title: CustomCredential - $ref: '#/components/schemas/CreateXAiCredentialDTO' title: XAiCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' title: GoogleCalendarOAuth2ClientCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' title: GoogleCalendarOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' title: GoogleSheetsOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' title: SlackOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' title: GoHighLevelMCPCredential - $ref: '#/components/schemas/CreateInworldCredentialDTO' title: InworldCredential - $ref: '#/components/schemas/CreateMinimaxCredentialDTO' title: MinimaxCredential - $ref: '#/components/schemas/CreateWellSaidCredentialDTO' title: WellSaidCredential - $ref: '#/components/schemas/CreateEmailCredentialDTO' title: EmailCredential - $ref: '#/components/schemas/CreateSlackWebhookCredentialDTO' title: SlackWebhookCredential discriminator: propertyName: provider mapping: 11labs: '#/components/schemas/CreateElevenLabsCredentialDTO' anthropic: '#/components/schemas/CreateAnthropicCredentialDTO' anthropic-bedrock: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO' assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO' azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO' azure: '#/components/schemas/CreateAzureCredentialDTO' byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO' cartesia: '#/components/schemas/CreateCartesiaCredentialDTO' cerebras: '#/components/schemas/CreateCerebrasCredentialDTO' cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO' custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO' deepgram: '#/components/schemas/CreateDeepgramCredentialDTO' deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO' deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO' gcp: '#/components/schemas/CreateGcpCredentialDTO' gladia: '#/components/schemas/CreateGladiaCredentialDTO' gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO' google: '#/components/schemas/CreateGoogleCredentialDTO' groq: '#/components/schemas/CreateGroqCredentialDTO' inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO' langfuse: '#/components/schemas/CreateLangfuseCredentialDTO' lmnt: '#/components/schemas/CreateLmntCredentialDTO' make: '#/components/schemas/CreateMakeCredentialDTO' openai: '#/components/schemas/CreateOpenAICredentialDTO' openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO' perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO' playht: '#/components/schemas/CreatePlayHTCredentialDTO' rime-ai: '#/components/schemas/CreateRimeAICredentialDTO' runpod: '#/components/schemas/CreateRunpodCredentialDTO' s3: '#/components/schemas/CreateS3CredentialDTO' supabase: '#/components/schemas/CreateSupabaseCredentialDTO' smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO' tavus: '#/components/schemas/CreateTavusCredentialDTO' together-ai: '#/components/schemas/CreateTogetherAICredentialDTO' twilio: '#/components/schemas/CreateTwilioCredentialDTO' vonage: '#/components/schemas/CreateVonageCredentialDTO' webhook: '#/components/schemas/CreateWebhookCredentialDTO' custom-credential: '#/components/schemas/CreateCustomCredentialDTO' xai: '#/components/schemas/CreateXAiCredentialDTO' neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO' hume: '#/components/schemas/CreateHumeCredentialDTO' mistral: '#/components/schemas/CreateMistralCredentialDTO' speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO' soniox: '#/components/schemas/CreateSonioxCredentialDTO' google.calendar.oauth2-client: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' google.calendar.oauth2-authorization: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' google.sheets.oauth2-authorization: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' slack.oauth2-authorization: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' inworld: '#/components/schemas/CreateInworldCredentialDTO' minimax: '#/components/schemas/CreateMinimaxCredentialDTO' wellsaid: '#/components/schemas/CreateWellSaidCredentialDTO' email: '#/components/schemas/CreateEmailCredentialDTO' slack-webhook: '#/components/schemas/CreateSlackWebhookCredentialDTO' hooks: type: array description: This is a set of actions that will be performed on certain events. items: oneOf: - $ref: '#/components/schemas/CallHookCallEnding' title: CallHookCallEnding - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted' title: CallHookAssistantSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted' title: CallHookCustomerSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout' title: CallHookCustomerSpeechTimeout - $ref: '#/components/schemas/SessionCreatedHook' title: SessionCreatedHook name: type: string description: 'This is the name of the assistant. This 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. If 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. If unspecified, it will hang up without saying anything.' maxLength: 1000 endCallPhrases: description: This list contains phrases that, if spoken by the assistant, will trigger the call to be hung up. Case insensitive. type: array items: type: string maxLength: 140 minLength: 2 compliancePlan: $ref: '#/components/schemas/CompliancePlan' metadata: type: object description: This is for metadata you want to store on the assistant. backgroundSpeechDenoisingPlan: description: 'This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Smart denoising can be combined with or used independently of Fourier denoising. Order of precedence: - Smart denoising - Fourier denoising' allOf: - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan' analysisPlan: description: This is the plan for analysis of assistant's calls. Stored in `call.analysis`. deprecated: true allOf: - $ref: '#/components/schemas/AnalysisPlan' artifactPlan: description: This is the plan for artifacts generated during assistant's calls. Stored in `call.artifact`. allOf: - $ref: '#/components/schemas/ArtifactPlan' startSpeakingPlan: description: 'This is the plan for when the assistant should start talking. You should configure this if you''re running into these issues: - The assistant is too slow to start talking after the customer is done speaking. - The assistant is too fast to start talking after the customer is done speaking. - 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. You should configure this if you''re running into these issues: - The assistant is too slow to recognize customer''s interruption. - The assistant is too fast to recognize customer''s interruption. - The assistant is getting interrupted by phrases that are just acknowledgments. - The assistant is getting interrupted by background noises. - 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. Usage: - To enable live listening of the assistant''s calls, set `monitorPlan.listenEnabled` to `true`. - To enable live control of the assistant''s calls, set `monitorPlan.controlEnabled` to `true`. - To attach monitors to the assistant, set `monitorPlan.monitorIds` to the set of monitor ids.' 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. The order of precedence is: 1. assistant.server.url 2. phoneNumber.serverUrl 3. org.serverUrl' allOf: - $ref: '#/components/schemas/Server' keypadInputPlan: $ref: '#/components/schemas/KeypadInputPlan' Squad: 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. The 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. Both `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' 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 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. The 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. Both `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 Workflow: type: object properties: nodes: type: array items: oneOf: - $ref: '#/components/schemas/ConversationNode' title: ConversationNode - $ref: '#/components/schemas/ToolNode' title: ToolNode model: description: 'This is the model for the workflow. This can be overridden at node level using `nodes[n].model`.' oneOf: - $ref: '#/components/schemas/WorkflowOpenAIModel' title: WorkflowOpenAIModel - $ref: '#/components/schemas/WorkflowAnthropicModel' title: WorkflowAnthropicModel - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel' title: WorkflowAnthropicBedrockModel - $ref: '#/components/schemas/WorkflowGoogleModel' title: WorkflowGoogleModel - $ref: '#/components/schemas/WorkflowCustomModel' title: WorkflowCustomModel transcriber: description: 'This is the transcriber for the workflow. This can be overridden at node level using `nodes[n].transcriber`.' oneOf: - $ref: '#/components/schemas/AssemblyAITranscriber' title: AssemblyAITranscriber - $ref: '#/components/schemas/AzureSpeechTranscriber' title: AzureSpeechTranscriber - $ref: '#/components/schemas/CustomTranscriber' title: CustomTranscriber - $ref: '#/components/schemas/DeepgramTranscriber' title: DeepgramTranscriber - $ref: '#/components/schemas/ElevenLabsTranscriber' title: ElevenLabsTranscriber - $ref: '#/components/schemas/GladiaTranscriber' title: GladiaTranscriber - $ref: '#/components/schemas/GoogleTranscriber' title: GoogleTranscriber - $ref: '#/components/schemas/SpeechmaticsTranscriber' title: SpeechmaticsTranscriber - $ref: '#/components/schemas/TalkscriberTranscriber' title: TalkscriberTranscriber - $ref: '#/components/schemas/OpenAITranscriber' title: OpenAITranscriber - $ref: '#/components/schemas/CartesiaTranscriber' title: CartesiaTranscriber - $ref: '#/components/schemas/SonioxTranscriber' title: SonioxTranscriber voice: description: 'This is the voice for the workflow. This can be overridden at node level using `nodes[n].voice`.' oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice observabilityPlan: description: 'This is the plan for observability of workflow''s calls. Currently, only Langfuse is supported.' oneOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' title: Langfuse allOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' backgroundSound: description: 'This is the background sound in the call. Default for phone calls is ''office'' and default for web calls is ''off''. You can also provide a custom sound by providing a URL to an audio file.' oneOf: - type: enum enum: - 'off' - office example: office - type: string format: uri example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3 hooks: type: array description: This is a set of actions that will be performed on certain events. items: oneOf: - $ref: '#/components/schemas/CallHookCallEnding' title: CallHookCallEnding - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted' title: CallHookAssistantSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted' title: CallHookCustomerSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout' title: CallHookCustomerSpeechTimeout - $ref: '#/components/schemas/CallHookModelResponseTimeout' title: CallHookModelResponseTimeout credentials: type: array description: These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials. items: oneOf: - $ref: '#/components/schemas/CreateAnthropicCredentialDTO' title: AnthropicCredential - $ref: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' title: AnthropicBedrockCredential - $ref: '#/components/schemas/CreateAnyscaleCredentialDTO' title: AnyscaleCredential - $ref: '#/components/schemas/CreateAssemblyAICredentialDTO' title: AssemblyAICredential - $ref: '#/components/schemas/CreateAzureCredentialDTO' title: AzureCredential - $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO' title: AzureOpenAICredential - $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO' title: ByoSipTrunkCredential - $ref: '#/components/schemas/CreateCartesiaCredentialDTO' title: CartesiaCredential - $ref: '#/components/schemas/CreateCerebrasCredentialDTO' title: CerebrasCredential - $ref: '#/components/schemas/CreateCloudflareCredentialDTO' title: CloudflareCredential - $ref: '#/components/schemas/CreateCustomLLMCredentialDTO' title: CustomLLMCredential - $ref: '#/components/schemas/CreateDeepgramCredentialDTO' title: DeepgramCredential - $ref: '#/components/schemas/CreateDeepInfraCredentialDTO' title: DeepInfraCredential - $ref: '#/components/schemas/CreateDeepSeekCredentialDTO' title: DeepSeekCredential - $ref: '#/components/schemas/CreateElevenLabsCredentialDTO' title: ElevenLabsCredential - $ref: '#/components/schemas/CreateGcpCredentialDTO' title: GcpCredential - $ref: '#/components/schemas/CreateGladiaCredentialDTO' title: GladiaCredential - $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO' title: GhlCredential - $ref: '#/components/schemas/CreateGoogleCredentialDTO' title: GoogleCredential - $ref: '#/components/schemas/CreateGroqCredentialDTO' title: GroqCredential - $ref: '#/components/schemas/CreateHumeCredentialDTO' title: HumeCredential - $ref: '#/components/schemas/CreateInflectionAICredentialDTO' title: InflectionAICredential - $ref: '#/components/schemas/CreateLangfuseCredentialDTO' title: LangfuseCredential - $ref: '#/components/schemas/CreateLmntCredentialDTO' title: LmntCredential - $ref: '#/components/schemas/CreateMakeCredentialDTO' title: MakeCredential - $ref: '#/components/schemas/CreateMistralCredentialDTO' title: MistralCredential - $ref: '#/components/schemas/CreateNeuphonicCredentialDTO' title: NeuphonicCredential - $ref: '#/components/schemas/CreateOpenAICredentialDTO' title: OpenAICredential - $ref: '#/components/schemas/CreateOpenRouterCredentialDTO' title: OpenRouterCredential - $ref: '#/components/schemas/CreatePerplexityAICredentialDTO' title: PerplexityAICredential - $ref: '#/components/schemas/CreatePlayHTCredentialDTO' title: PlayHTCredential - $ref: '#/components/schemas/CreateRimeAICredentialDTO' title: RimeAICredential - $ref: '#/components/schemas/CreateRunpodCredentialDTO' title: RunpodCredential - $ref: '#/components/schemas/CreateS3CredentialDTO' title: S3Credential - $ref: '#/components/schemas/CreateSmallestAICredentialDTO' title: SmallestAICredential - $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO' title: SpeechmaticsCredential - $ref: '#/components/schemas/CreateSonioxCredentialDTO' title: SonioxCredential - $ref: '#/components/schemas/CreateSupabaseCredentialDTO' title: SupabaseCredential - $ref: '#/components/schemas/CreateTavusCredentialDTO' title: TavusCredential - $ref: '#/components/schemas/CreateTogetherAICredentialDTO' title: TogetherAICredential - $ref: '#/components/schemas/CreateTwilioCredentialDTO' title: TwilioCredential - $ref: '#/components/schemas/CreateVonageCredentialDTO' title: VonageCredential - $ref: '#/components/schemas/CreateWebhookCredentialDTO' title: WebhookCredential - $ref: '#/components/schemas/CreateCustomCredentialDTO' title: CustomCredential - $ref: '#/components/schemas/CreateXAiCredentialDTO' title: XAiCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' title: GoogleCalendarOAuth2ClientCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' title: GoogleCalendarOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' title: GoogleSheetsOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' title: SlackOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' title: GoHighLevelMCPCredential - $ref: '#/components/schemas/CreateInworldCredentialDTO' title: InworldCredential - $ref: '#/components/schemas/CreateMinimaxCredentialDTO' title: MinimaxCredential - $ref: '#/components/schemas/CreateWellSaidCredentialDTO' title: WellSaidCredential - $ref: '#/components/schemas/CreateEmailCredentialDTO' title: EmailCredential - $ref: '#/components/schemas/CreateSlackWebhookCredentialDTO' title: SlackWebhookCredential discriminator: propertyName: provider mapping: 11labs: '#/components/schemas/CreateElevenLabsCredentialDTO' anthropic: '#/components/schemas/CreateAnthropicCredentialDTO' anthropic-bedrock: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO' assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO' azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO' azure: '#/components/schemas/CreateAzureCredentialDTO' byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO' cartesia: '#/components/schemas/CreateCartesiaCredentialDTO' cerebras: '#/components/schemas/CreateCerebrasCredentialDTO' cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO' custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO' deepgram: '#/components/schemas/CreateDeepgramCredentialDTO' deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO' deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO' gcp: '#/components/schemas/CreateGcpCredentialDTO' gladia: '#/components/schemas/CreateGladiaCredentialDTO' gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO' google: '#/components/schemas/CreateGoogleCredentialDTO' groq: '#/components/schemas/CreateGroqCredentialDTO' inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO' langfuse: '#/components/schemas/CreateLangfuseCredentialDTO' lmnt: '#/components/schemas/CreateLmntCredentialDTO' make: '#/components/schemas/CreateMakeCredentialDTO' openai: '#/components/schemas/CreateOpenAICredentialDTO' openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO' perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO' playht: '#/components/schemas/CreatePlayHTCredentialDTO' rime-ai: '#/components/schemas/CreateRimeAICredentialDTO' runpod: '#/components/schemas/CreateRunpodCredentialDTO' s3: '#/components/schemas/CreateS3CredentialDTO' supabase: '#/components/schemas/CreateSupabaseCredentialDTO' smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO' tavus: '#/components/schemas/CreateTavusCredentialDTO' together-ai: '#/components/schemas/CreateTogetherAICredentialDTO' twilio: '#/components/schemas/CreateTwilioCredentialDTO' vonage: '#/components/schemas/CreateVonageCredentialDTO' webhook: '#/components/schemas/CreateWebhookCredentialDTO' custom-credential: '#/components/schemas/CreateCustomCredentialDTO' xai: '#/components/schemas/CreateXAiCredentialDTO' neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO' hume: '#/components/schemas/CreateHumeCredentialDTO' mistral: '#/components/schemas/CreateMistralCredentialDTO' speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO' soniox: '#/components/schemas/CreateSonioxCredentialDTO' google.calendar.oauth2-client: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' google.calendar.oauth2-authorization: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' google.sheets.oauth2-authorization: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' slack.oauth2-authorization: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' inworld: '#/components/schemas/CreateInworldCredentialDTO' minimax: '#/components/schemas/CreateMinimaxCredentialDTO' wellsaid: '#/components/schemas/CreateWellSaidCredentialDTO' email: '#/components/schemas/CreateEmailCredentialDTO' slack-webhook: '#/components/schemas/CreateSlackWebhookCredentialDTO' voicemailDetection: description: This is the voicemail detection plan for the workflow. oneOf: - type: string enum: - 'off' - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan' title: Google - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan' title: OpenAI - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan' title: Twilio - $ref: '#/components/schemas/VapiVoicemailDetectionPlan' title: Vapi maxDurationSeconds: type: number description: 'This is the maximum duration of the call in seconds. After this duration, the call will automatically end. Default is 1800 (30 minutes), max is 43200 (12 hours), and min is 10 seconds.' minimum: 10 maximum: 43200 example: 600 id: type: string orgId: type: string createdAt: format: date-time type: string updatedAt: format: date-time type: string name: type: string maxLength: 80 edges: type: array items: $ref: '#/components/schemas/Edge' globalPrompt: type: string maxLength: 5000 server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. tool.server 2. workflow.server / assistant.server 3. phoneNumber.server 4. org.server' allOf: - $ref: '#/components/schemas/Server' compliancePlan: description: This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings. allOf: - $ref: '#/components/schemas/CompliancePlan' analysisPlan: description: This is the plan for analysis of workflow's calls. Stored in `call.analysis`. allOf: - $ref: '#/components/schemas/AnalysisPlan' artifactPlan: description: This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`. allOf: - $ref: '#/components/schemas/ArtifactPlan' startSpeakingPlan: description: 'This is the plan for when the workflow nodes should start talking. You should configure this if you''re running into these issues: - The assistant is too slow to start talking after the customer is done speaking. - The assistant is too fast to start talking after the customer is done speaking. - The assistant is so fast that it''s actually interrupting the customer.' allOf: - $ref: '#/components/schemas/StartSpeakingPlan' stopSpeakingPlan: description: 'This is the plan for when workflow nodes should stop talking on customer interruption. You should configure this if you''re running into these issues: - The assistant is too slow to recognize customer''s interruption. - The assistant is too fast to recognize customer''s interruption. - The assistant is getting interrupted by phrases that are just acknowledgments. - The assistant is getting interrupted by background noises. - The assistant is not properly stopping -- it starts talking right after getting interrupted.' allOf: - $ref: '#/components/schemas/StopSpeakingPlan' monitorPlan: description: 'This is the plan for real-time monitoring of the workflow''s calls. Usage: - To enable live listening of the workflow''s calls, set `monitorPlan.listenEnabled` to `true`. - To enable live control of the workflow''s calls, set `monitorPlan.controlEnabled` to `true`.' allOf: - $ref: '#/components/schemas/MonitorPlan' backgroundSpeechDenoisingPlan: description: 'This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Both can be used together. Order of precedence: - Smart denoising - Fourier denoising' allOf: - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan' credentialIds: description: These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this. type: array items: type: string keypadInputPlan: description: This is the plan for keypad input handling during workflow calls. allOf: - $ref: '#/components/schemas/KeypadInputPlan' voicemailMessage: type: string description: 'This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.' maxLength: 1000 required: - nodes - id - orgId - createdAt - updatedAt - name - edges CreateWorkflowDTO: type: object properties: nodes: type: array items: oneOf: - $ref: '#/components/schemas/ConversationNode' title: ConversationNode - $ref: '#/components/schemas/ToolNode' title: ToolNode model: description: 'This is the model for the workflow. This can be overridden at node level using `nodes[n].model`.' oneOf: - $ref: '#/components/schemas/WorkflowOpenAIModel' title: WorkflowOpenAIModel - $ref: '#/components/schemas/WorkflowAnthropicModel' title: WorkflowAnthropicModel - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel' title: WorkflowAnthropicBedrockModel - $ref: '#/components/schemas/WorkflowGoogleModel' title: WorkflowGoogleModel - $ref: '#/components/schemas/WorkflowCustomModel' title: WorkflowCustomModel transcriber: description: 'This is the transcriber for the workflow. This can be overridden at node level using `nodes[n].transcriber`.' oneOf: - $ref: '#/components/schemas/AssemblyAITranscriber' title: AssemblyAITranscriber - $ref: '#/components/schemas/AzureSpeechTranscriber' title: AzureSpeechTranscriber - $ref: '#/components/schemas/CustomTranscriber' title: CustomTranscriber - $ref: '#/components/schemas/DeepgramTranscriber' title: DeepgramTranscriber - $ref: '#/components/schemas/ElevenLabsTranscriber' title: ElevenLabsTranscriber - $ref: '#/components/schemas/GladiaTranscriber' title: GladiaTranscriber - $ref: '#/components/schemas/GoogleTranscriber' title: GoogleTranscriber - $ref: '#/components/schemas/SpeechmaticsTranscriber' title: SpeechmaticsTranscriber - $ref: '#/components/schemas/TalkscriberTranscriber' title: TalkscriberTranscriber - $ref: '#/components/schemas/OpenAITranscriber' title: OpenAITranscriber - $ref: '#/components/schemas/CartesiaTranscriber' title: CartesiaTranscriber - $ref: '#/components/schemas/SonioxTranscriber' title: SonioxTranscriber voice: description: 'This is the voice for the workflow. This can be overridden at node level using `nodes[n].voice`.' oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice observabilityPlan: description: 'This is the plan for observability of workflow''s calls. Currently, only Langfuse is supported.' oneOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' title: Langfuse allOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' backgroundSound: description: 'This is the background sound in the call. Default for phone calls is ''office'' and default for web calls is ''off''. You can also provide a custom sound by providing a URL to an audio file.' oneOf: - type: enum enum: - 'off' - office example: office - type: string format: uri example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3 hooks: type: array description: This is a set of actions that will be performed on certain events. items: oneOf: - $ref: '#/components/schemas/CallHookCallEnding' title: CallHookCallEnding - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted' title: CallHookAssistantSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted' title: CallHookCustomerSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout' title: CallHookCustomerSpeechTimeout - $ref: '#/components/schemas/CallHookModelResponseTimeout' title: CallHookModelResponseTimeout credentials: type: array description: These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials. items: oneOf: - $ref: '#/components/schemas/CreateAnthropicCredentialDTO' title: AnthropicCredential - $ref: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' title: AnthropicBedrockCredential - $ref: '#/components/schemas/CreateAnyscaleCredentialDTO' title: AnyscaleCredential - $ref: '#/components/schemas/CreateAssemblyAICredentialDTO' title: AssemblyAICredential - $ref: '#/components/schemas/CreateAzureCredentialDTO' title: AzureCredential - $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO' title: AzureOpenAICredential - $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO' title: ByoSipTrunkCredential - $ref: '#/components/schemas/CreateCartesiaCredentialDTO' title: CartesiaCredential - $ref: '#/components/schemas/CreateCerebrasCredentialDTO' title: CerebrasCredential - $ref: '#/components/schemas/CreateCloudflareCredentialDTO' title: CloudflareCredential - $ref: '#/components/schemas/CreateCustomLLMCredentialDTO' title: CustomLLMCredential - $ref: '#/components/schemas/CreateDeepgramCredentialDTO' title: DeepgramCredential - $ref: '#/components/schemas/CreateDeepInfraCredentialDTO' title: DeepInfraCredential - $ref: '#/components/schemas/CreateDeepSeekCredentialDTO' title: DeepSeekCredential - $ref: '#/components/schemas/CreateElevenLabsCredentialDTO' title: ElevenLabsCredential - $ref: '#/components/schemas/CreateGcpCredentialDTO' title: GcpCredential - $ref: '#/components/schemas/CreateGladiaCredentialDTO' title: GladiaCredential - $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO' title: GhlCredential - $ref: '#/components/schemas/CreateGoogleCredentialDTO' title: GoogleCredential - $ref: '#/components/schemas/CreateGroqCredentialDTO' title: GroqCredential - $ref: '#/components/schemas/CreateHumeCredentialDTO' title: HumeCredential - $ref: '#/components/schemas/CreateInflectionAICredentialDTO' title: InflectionAICredential - $ref: '#/components/schemas/CreateLangfuseCredentialDTO' title: LangfuseCredential - $ref: '#/components/schemas/CreateLmntCredentialDTO' title: LmntCredential - $ref: '#/components/schemas/CreateMakeCredentialDTO' title: MakeCredential - $ref: '#/components/schemas/CreateMistralCredentialDTO' title: MistralCredential - $ref: '#/components/schemas/CreateNeuphonicCredentialDTO' title: NeuphonicCredential - $ref: '#/components/schemas/CreateOpenAICredentialDTO' title: OpenAICredential - $ref: '#/components/schemas/CreateOpenRouterCredentialDTO' title: OpenRouterCredential - $ref: '#/components/schemas/CreatePerplexityAICredentialDTO' title: PerplexityAICredential - $ref: '#/components/schemas/CreatePlayHTCredentialDTO' title: PlayHTCredential - $ref: '#/components/schemas/CreateRimeAICredentialDTO' title: RimeAICredential - $ref: '#/components/schemas/CreateRunpodCredentialDTO' title: RunpodCredential - $ref: '#/components/schemas/CreateS3CredentialDTO' title: S3Credential - $ref: '#/components/schemas/CreateSmallestAICredentialDTO' title: SmallestAICredential - $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO' title: SpeechmaticsCredential - $ref: '#/components/schemas/CreateSonioxCredentialDTO' title: SonioxCredential - $ref: '#/components/schemas/CreateSupabaseCredentialDTO' title: SupabaseCredential - $ref: '#/components/schemas/CreateTavusCredentialDTO' title: TavusCredential - $ref: '#/components/schemas/CreateTogetherAICredentialDTO' title: TogetherAICredential - $ref: '#/components/schemas/CreateTwilioCredentialDTO' title: TwilioCredential - $ref: '#/components/schemas/CreateVonageCredentialDTO' title: VonageCredential - $ref: '#/components/schemas/CreateWebhookCredentialDTO' title: WebhookCredential - $ref: '#/components/schemas/CreateCustomCredentialDTO' title: CustomCredential - $ref: '#/components/schemas/CreateXAiCredentialDTO' title: XAiCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' title: GoogleCalendarOAuth2ClientCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' title: GoogleCalendarOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' title: GoogleSheetsOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' title: SlackOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' title: GoHighLevelMCPCredential - $ref: '#/components/schemas/CreateInworldCredentialDTO' title: InworldCredential - $ref: '#/components/schemas/CreateMinimaxCredentialDTO' title: MinimaxCredential - $ref: '#/components/schemas/CreateWellSaidCredentialDTO' title: WellSaidCredential - $ref: '#/components/schemas/CreateEmailCredentialDTO' title: EmailCredential - $ref: '#/components/schemas/CreateSlackWebhookCredentialDTO' title: SlackWebhookCredential discriminator: propertyName: provider mapping: 11labs: '#/components/schemas/CreateElevenLabsCredentialDTO' anthropic: '#/components/schemas/CreateAnthropicCredentialDTO' anthropic-bedrock: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO' assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO' azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO' azure: '#/components/schemas/CreateAzureCredentialDTO' byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO' cartesia: '#/components/schemas/CreateCartesiaCredentialDTO' cerebras: '#/components/schemas/CreateCerebrasCredentialDTO' cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO' custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO' deepgram: '#/components/schemas/CreateDeepgramCredentialDTO' deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO' deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO' gcp: '#/components/schemas/CreateGcpCredentialDTO' gladia: '#/components/schemas/CreateGladiaCredentialDTO' gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO' google: '#/components/schemas/CreateGoogleCredentialDTO' groq: '#/components/schemas/CreateGroqCredentialDTO' inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO' langfuse: '#/components/schemas/CreateLangfuseCredentialDTO' lmnt: '#/components/schemas/CreateLmntCredentialDTO' make: '#/components/schemas/CreateMakeCredentialDTO' openai: '#/components/schemas/CreateOpenAICredentialDTO' openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO' perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO' playht: '#/components/schemas/CreatePlayHTCredentialDTO' rime-ai: '#/components/schemas/CreateRimeAICredentialDTO' runpod: '#/components/schemas/CreateRunpodCredentialDTO' s3: '#/components/schemas/CreateS3CredentialDTO' supabase: '#/components/schemas/CreateSupabaseCredentialDTO' smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO' tavus: '#/components/schemas/CreateTavusCredentialDTO' together-ai: '#/components/schemas/CreateTogetherAICredentialDTO' twilio: '#/components/schemas/CreateTwilioCredentialDTO' vonage: '#/components/schemas/CreateVonageCredentialDTO' webhook: '#/components/schemas/CreateWebhookCredentialDTO' custom-credential: '#/components/schemas/CreateCustomCredentialDTO' xai: '#/components/schemas/CreateXAiCredentialDTO' neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO' hume: '#/components/schemas/CreateHumeCredentialDTO' mistral: '#/components/schemas/CreateMistralCredentialDTO' speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO' soniox: '#/components/schemas/CreateSonioxCredentialDTO' google.calendar.oauth2-client: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' google.calendar.oauth2-authorization: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' google.sheets.oauth2-authorization: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' slack.oauth2-authorization: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' inworld: '#/components/schemas/CreateInworldCredentialDTO' minimax: '#/components/schemas/CreateMinimaxCredentialDTO' wellsaid: '#/components/schemas/CreateWellSaidCredentialDTO' email: '#/components/schemas/CreateEmailCredentialDTO' slack-webhook: '#/components/schemas/CreateSlackWebhookCredentialDTO' voicemailDetection: description: This is the voicemail detection plan for the workflow. oneOf: - type: string enum: - 'off' - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan' title: Google - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan' title: OpenAI - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan' title: Twilio - $ref: '#/components/schemas/VapiVoicemailDetectionPlan' title: Vapi maxDurationSeconds: type: number description: 'This is the maximum duration of the call in seconds. After this duration, the call will automatically end. Default is 1800 (30 minutes), max is 43200 (12 hours), and min is 10 seconds.' minimum: 10 maximum: 43200 example: 600 name: type: string maxLength: 80 edges: type: array items: $ref: '#/components/schemas/Edge' globalPrompt: type: string maxLength: 5000 server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. tool.server 2. workflow.server / assistant.server 3. phoneNumber.server 4. org.server' allOf: - $ref: '#/components/schemas/Server' compliancePlan: description: This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings. allOf: - $ref: '#/components/schemas/CompliancePlan' analysisPlan: description: This is the plan for analysis of workflow's calls. Stored in `call.analysis`. allOf: - $ref: '#/components/schemas/AnalysisPlan' artifactPlan: description: This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`. allOf: - $ref: '#/components/schemas/ArtifactPlan' startSpeakingPlan: description: 'This is the plan for when the workflow nodes should start talking. You should configure this if you''re running into these issues: - The assistant is too slow to start talking after the customer is done speaking. - The assistant is too fast to start talking after the customer is done speaking. - The assistant is so fast that it''s actually interrupting the customer.' allOf: - $ref: '#/components/schemas/StartSpeakingPlan' stopSpeakingPlan: description: 'This is the plan for when workflow nodes should stop talking on customer interruption. You should configure this if you''re running into these issues: - The assistant is too slow to recognize customer''s interruption. - The assistant is too fast to recognize customer''s interruption. - The assistant is getting interrupted by phrases that are just acknowledgments. - The assistant is getting interrupted by background noises. - The assistant is not properly stopping -- it starts talking right after getting interrupted.' allOf: - $ref: '#/components/schemas/StopSpeakingPlan' monitorPlan: description: 'This is the plan for real-time monitoring of the workflow''s calls. Usage: - To enable live listening of the workflow''s calls, set `monitorPlan.listenEnabled` to `true`. - To enable live control of the workflow''s calls, set `monitorPlan.controlEnabled` to `true`.' allOf: - $ref: '#/components/schemas/MonitorPlan' backgroundSpeechDenoisingPlan: description: 'This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Both can be used together. Order of precedence: - Smart denoising - Fourier denoising' allOf: - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan' credentialIds: description: These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this. type: array items: type: string keypadInputPlan: description: This is the plan for keypad input handling during workflow calls. allOf: - $ref: '#/components/schemas/KeypadInputPlan' voicemailMessage: type: string description: 'This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.' maxLength: 1000 required: - nodes - name - edges UpdateWorkflowDTO: type: object properties: nodes: type: array items: oneOf: - $ref: '#/components/schemas/ConversationNode' title: ConversationNode - $ref: '#/components/schemas/ToolNode' title: ToolNode model: description: 'This is the model for the workflow. This can be overridden at node level using `nodes[n].model`.' oneOf: - $ref: '#/components/schemas/WorkflowOpenAIModel' title: WorkflowOpenAIModel - $ref: '#/components/schemas/WorkflowAnthropicModel' title: WorkflowAnthropicModel - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel' title: WorkflowAnthropicBedrockModel - $ref: '#/components/schemas/WorkflowGoogleModel' title: WorkflowGoogleModel - $ref: '#/components/schemas/WorkflowCustomModel' title: WorkflowCustomModel transcriber: description: 'This is the transcriber for the workflow. This can be overridden at node level using `nodes[n].transcriber`.' oneOf: - $ref: '#/components/schemas/AssemblyAITranscriber' title: AssemblyAITranscriber - $ref: '#/components/schemas/AzureSpeechTranscriber' title: AzureSpeechTranscriber - $ref: '#/components/schemas/CustomTranscriber' title: CustomTranscriber - $ref: '#/components/schemas/DeepgramTranscriber' title: DeepgramTranscriber - $ref: '#/components/schemas/ElevenLabsTranscriber' title: ElevenLabsTranscriber - $ref: '#/components/schemas/GladiaTranscriber' title: GladiaTranscriber - $ref: '#/components/schemas/GoogleTranscriber' title: GoogleTranscriber - $ref: '#/components/schemas/SpeechmaticsTranscriber' title: SpeechmaticsTranscriber - $ref: '#/components/schemas/TalkscriberTranscriber' title: TalkscriberTranscriber - $ref: '#/components/schemas/OpenAITranscriber' title: OpenAITranscriber - $ref: '#/components/schemas/CartesiaTranscriber' title: CartesiaTranscriber - $ref: '#/components/schemas/SonioxTranscriber' title: SonioxTranscriber voice: description: 'This is the voice for the workflow. This can be overridden at node level using `nodes[n].voice`.' oneOf: - $ref: '#/components/schemas/AzureVoice' title: AzureVoice - $ref: '#/components/schemas/CartesiaVoice' title: CartesiaVoice - $ref: '#/components/schemas/CustomVoice' title: CustomVoice - $ref: '#/components/schemas/DeepgramVoice' title: DeepgramVoice - $ref: '#/components/schemas/ElevenLabsVoice' title: ElevenLabsVoice - $ref: '#/components/schemas/HumeVoice' title: HumeVoice - $ref: '#/components/schemas/LMNTVoice' title: LMNTVoice - $ref: '#/components/schemas/NeuphonicVoice' title: NeuphonicVoice - $ref: '#/components/schemas/OpenAIVoice' title: OpenAIVoice - $ref: '#/components/schemas/PlayHTVoice' title: PlayHTVoice - $ref: '#/components/schemas/WellSaidVoice' title: WellSaidVoice - $ref: '#/components/schemas/RimeAIVoice' title: RimeAIVoice - $ref: '#/components/schemas/SmallestAIVoice' title: SmallestAIVoice - $ref: '#/components/schemas/TavusVoice' title: TavusVoice - $ref: '#/components/schemas/VapiVoice' title: VapiVoice - $ref: '#/components/schemas/SesameVoice' title: SesameVoice - $ref: '#/components/schemas/InworldVoice' title: InworldVoice - $ref: '#/components/schemas/MinimaxVoice' title: MinimaxVoice observabilityPlan: description: 'This is the plan for observability of workflow''s calls. Currently, only Langfuse is supported.' oneOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' title: Langfuse allOf: - $ref: '#/components/schemas/LangfuseObservabilityPlan' backgroundSound: description: 'This is the background sound in the call. Default for phone calls is ''office'' and default for web calls is ''off''. You can also provide a custom sound by providing a URL to an audio file.' oneOf: - type: enum enum: - 'off' - office example: office - type: string format: uri example: https://www.soundjay.com/ambient/sounds/people-in-lounge-1.mp3 hooks: type: array description: This is a set of actions that will be performed on certain events. items: oneOf: - $ref: '#/components/schemas/CallHookCallEnding' title: CallHookCallEnding - $ref: '#/components/schemas/CallHookAssistantSpeechInterrupted' title: CallHookAssistantSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechInterrupted' title: CallHookCustomerSpeechInterrupted - $ref: '#/components/schemas/CallHookCustomerSpeechTimeout' title: CallHookCustomerSpeechTimeout - $ref: '#/components/schemas/CallHookModelResponseTimeout' title: CallHookModelResponseTimeout credentials: type: array description: These are dynamic credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can supplement an additional credentials using this. Dynamic credentials override existing credentials. items: oneOf: - $ref: '#/components/schemas/CreateAnthropicCredentialDTO' title: AnthropicCredential - $ref: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' title: AnthropicBedrockCredential - $ref: '#/components/schemas/CreateAnyscaleCredentialDTO' title: AnyscaleCredential - $ref: '#/components/schemas/CreateAssemblyAICredentialDTO' title: AssemblyAICredential - $ref: '#/components/schemas/CreateAzureCredentialDTO' title: AzureCredential - $ref: '#/components/schemas/CreateAzureOpenAICredentialDTO' title: AzureOpenAICredential - $ref: '#/components/schemas/CreateByoSipTrunkCredentialDTO' title: ByoSipTrunkCredential - $ref: '#/components/schemas/CreateCartesiaCredentialDTO' title: CartesiaCredential - $ref: '#/components/schemas/CreateCerebrasCredentialDTO' title: CerebrasCredential - $ref: '#/components/schemas/CreateCloudflareCredentialDTO' title: CloudflareCredential - $ref: '#/components/schemas/CreateCustomLLMCredentialDTO' title: CustomLLMCredential - $ref: '#/components/schemas/CreateDeepgramCredentialDTO' title: DeepgramCredential - $ref: '#/components/schemas/CreateDeepInfraCredentialDTO' title: DeepInfraCredential - $ref: '#/components/schemas/CreateDeepSeekCredentialDTO' title: DeepSeekCredential - $ref: '#/components/schemas/CreateElevenLabsCredentialDTO' title: ElevenLabsCredential - $ref: '#/components/schemas/CreateGcpCredentialDTO' title: GcpCredential - $ref: '#/components/schemas/CreateGladiaCredentialDTO' title: GladiaCredential - $ref: '#/components/schemas/CreateGoHighLevelCredentialDTO' title: GhlCredential - $ref: '#/components/schemas/CreateGoogleCredentialDTO' title: GoogleCredential - $ref: '#/components/schemas/CreateGroqCredentialDTO' title: GroqCredential - $ref: '#/components/schemas/CreateHumeCredentialDTO' title: HumeCredential - $ref: '#/components/schemas/CreateInflectionAICredentialDTO' title: InflectionAICredential - $ref: '#/components/schemas/CreateLangfuseCredentialDTO' title: LangfuseCredential - $ref: '#/components/schemas/CreateLmntCredentialDTO' title: LmntCredential - $ref: '#/components/schemas/CreateMakeCredentialDTO' title: MakeCredential - $ref: '#/components/schemas/CreateMistralCredentialDTO' title: MistralCredential - $ref: '#/components/schemas/CreateNeuphonicCredentialDTO' title: NeuphonicCredential - $ref: '#/components/schemas/CreateOpenAICredentialDTO' title: OpenAICredential - $ref: '#/components/schemas/CreateOpenRouterCredentialDTO' title: OpenRouterCredential - $ref: '#/components/schemas/CreatePerplexityAICredentialDTO' title: PerplexityAICredential - $ref: '#/components/schemas/CreatePlayHTCredentialDTO' title: PlayHTCredential - $ref: '#/components/schemas/CreateRimeAICredentialDTO' title: RimeAICredential - $ref: '#/components/schemas/CreateRunpodCredentialDTO' title: RunpodCredential - $ref: '#/components/schemas/CreateS3CredentialDTO' title: S3Credential - $ref: '#/components/schemas/CreateSmallestAICredentialDTO' title: SmallestAICredential - $ref: '#/components/schemas/CreateSpeechmaticsCredentialDTO' title: SpeechmaticsCredential - $ref: '#/components/schemas/CreateSonioxCredentialDTO' title: SonioxCredential - $ref: '#/components/schemas/CreateSupabaseCredentialDTO' title: SupabaseCredential - $ref: '#/components/schemas/CreateTavusCredentialDTO' title: TavusCredential - $ref: '#/components/schemas/CreateTogetherAICredentialDTO' title: TogetherAICredential - $ref: '#/components/schemas/CreateTwilioCredentialDTO' title: TwilioCredential - $ref: '#/components/schemas/CreateVonageCredentialDTO' title: VonageCredential - $ref: '#/components/schemas/CreateWebhookCredentialDTO' title: WebhookCredential - $ref: '#/components/schemas/CreateCustomCredentialDTO' title: CustomCredential - $ref: '#/components/schemas/CreateXAiCredentialDTO' title: XAiCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' title: GoogleCalendarOAuth2ClientCredential - $ref: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' title: GoogleCalendarOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' title: GoogleSheetsOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' title: SlackOAuth2AuthorizationCredential - $ref: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' title: GoHighLevelMCPCredential - $ref: '#/components/schemas/CreateInworldCredentialDTO' title: InworldCredential - $ref: '#/components/schemas/CreateMinimaxCredentialDTO' title: MinimaxCredential - $ref: '#/components/schemas/CreateWellSaidCredentialDTO' title: WellSaidCredential - $ref: '#/components/schemas/CreateEmailCredentialDTO' title: EmailCredential - $ref: '#/components/schemas/CreateSlackWebhookCredentialDTO' title: SlackWebhookCredential discriminator: propertyName: provider mapping: 11labs: '#/components/schemas/CreateElevenLabsCredentialDTO' anthropic: '#/components/schemas/CreateAnthropicCredentialDTO' anthropic-bedrock: '#/components/schemas/CreateAnthropicBedrockCredentialDTO' anyscale: '#/components/schemas/CreateAnyscaleCredentialDTO' assembly-ai: '#/components/schemas/CreateAssemblyAICredentialDTO' azure-openai: '#/components/schemas/CreateAzureOpenAICredentialDTO' azure: '#/components/schemas/CreateAzureCredentialDTO' byo-sip-trunk: '#/components/schemas/CreateByoSipTrunkCredentialDTO' cartesia: '#/components/schemas/CreateCartesiaCredentialDTO' cerebras: '#/components/schemas/CreateCerebrasCredentialDTO' cloudflare: '#/components/schemas/CreateCloudflareCredentialDTO' custom-llm: '#/components/schemas/CreateCustomLLMCredentialDTO' deepgram: '#/components/schemas/CreateDeepgramCredentialDTO' deepinfra: '#/components/schemas/CreateDeepInfraCredentialDTO' deep-seek: '#/components/schemas/CreateDeepSeekCredentialDTO' gcp: '#/components/schemas/CreateGcpCredentialDTO' gladia: '#/components/schemas/CreateGladiaCredentialDTO' gohighlevel: '#/components/schemas/CreateGoHighLevelCredentialDTO' google: '#/components/schemas/CreateGoogleCredentialDTO' groq: '#/components/schemas/CreateGroqCredentialDTO' inflection-ai: '#/components/schemas/CreateInflectionAICredentialDTO' langfuse: '#/components/schemas/CreateLangfuseCredentialDTO' lmnt: '#/components/schemas/CreateLmntCredentialDTO' make: '#/components/schemas/CreateMakeCredentialDTO' openai: '#/components/schemas/CreateOpenAICredentialDTO' openrouter: '#/components/schemas/CreateOpenRouterCredentialDTO' perplexity-ai: '#/components/schemas/CreatePerplexityAICredentialDTO' playht: '#/components/schemas/CreatePlayHTCredentialDTO' rime-ai: '#/components/schemas/CreateRimeAICredentialDTO' runpod: '#/components/schemas/CreateRunpodCredentialDTO' s3: '#/components/schemas/CreateS3CredentialDTO' supabase: '#/components/schemas/CreateSupabaseCredentialDTO' smallest-ai: '#/components/schemas/CreateSmallestAICredentialDTO' tavus: '#/components/schemas/CreateTavusCredentialDTO' together-ai: '#/components/schemas/CreateTogetherAICredentialDTO' twilio: '#/components/schemas/CreateTwilioCredentialDTO' vonage: '#/components/schemas/CreateVonageCredentialDTO' webhook: '#/components/schemas/CreateWebhookCredentialDTO' custom-credential: '#/components/schemas/CreateCustomCredentialDTO' xai: '#/components/schemas/CreateXAiCredentialDTO' neuphonic: '#/components/schemas/CreateNeuphonicCredentialDTO' hume: '#/components/schemas/CreateHumeCredentialDTO' mistral: '#/components/schemas/CreateMistralCredentialDTO' speechmatics: '#/components/schemas/CreateSpeechmaticsCredentialDTO' soniox: '#/components/schemas/CreateSonioxCredentialDTO' google.calendar.oauth2-client: '#/components/schemas/CreateGoogleCalendarOAuth2ClientCredentialDTO' google.calendar.oauth2-authorization: '#/components/schemas/CreateGoogleCalendarOAuth2AuthorizationCredentialDTO' google.sheets.oauth2-authorization: '#/components/schemas/CreateGoogleSheetsOAuth2AuthorizationCredentialDTO' slack.oauth2-authorization: '#/components/schemas/CreateSlackOAuth2AuthorizationCredentialDTO' ghl.oauth2-authorization: '#/components/schemas/CreateGoHighLevelMCPCredentialDTO' inworld: '#/components/schemas/CreateInworldCredentialDTO' minimax: '#/components/schemas/CreateMinimaxCredentialDTO' wellsaid: '#/components/schemas/CreateWellSaidCredentialDTO' email: '#/components/schemas/CreateEmailCredentialDTO' slack-webhook: '#/components/schemas/CreateSlackWebhookCredentialDTO' voicemailDetection: description: This is the voicemail detection plan for the workflow. oneOf: - type: string enum: - 'off' - $ref: '#/components/schemas/GoogleVoicemailDetectionPlan' title: Google - $ref: '#/components/schemas/OpenAIVoicemailDetectionPlan' title: OpenAI - $ref: '#/components/schemas/TwilioVoicemailDetectionPlan' title: Twilio - $ref: '#/components/schemas/VapiVoicemailDetectionPlan' title: Vapi maxDurationSeconds: type: number description: 'This is the maximum duration of the call in seconds. After this duration, the call will automatically end. Default is 1800 (30 minutes), max is 43200 (12 hours), and min is 10 seconds.' minimum: 10 maximum: 43200 example: 600 name: type: string maxLength: 80 edges: type: array items: $ref: '#/components/schemas/Edge' globalPrompt: type: string maxLength: 5000 server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. tool.server 2. workflow.server / assistant.server 3. phoneNumber.server 4. org.server' allOf: - $ref: '#/components/schemas/Server' compliancePlan: description: This is the compliance plan for the workflow. It allows you to configure HIPAA and other compliance settings. allOf: - $ref: '#/components/schemas/CompliancePlan' analysisPlan: description: This is the plan for analysis of workflow's calls. Stored in `call.analysis`. allOf: - $ref: '#/components/schemas/AnalysisPlan' artifactPlan: description: This is the plan for artifacts generated during workflow's calls. Stored in `call.artifact`. allOf: - $ref: '#/components/schemas/ArtifactPlan' startSpeakingPlan: description: 'This is the plan for when the workflow nodes should start talking. You should configure this if you''re running into these issues: - The assistant is too slow to start talking after the customer is done speaking. - The assistant is too fast to start talking after the customer is done speaking. - The assistant is so fast that it''s actually interrupting the customer.' allOf: - $ref: '#/components/schemas/StartSpeakingPlan' stopSpeakingPlan: description: 'This is the plan for when workflow nodes should stop talking on customer interruption. You should configure this if you''re running into these issues: - The assistant is too slow to recognize customer''s interruption. - The assistant is too fast to recognize customer''s interruption. - The assistant is getting interrupted by phrases that are just acknowledgments. - The assistant is getting interrupted by background noises. - The assistant is not properly stopping -- it starts talking right after getting interrupted.' allOf: - $ref: '#/components/schemas/StopSpeakingPlan' monitorPlan: description: 'This is the plan for real-time monitoring of the workflow''s calls. Usage: - To enable live listening of the workflow''s calls, set `monitorPlan.listenEnabled` to `true`. - To enable live control of the workflow''s calls, set `monitorPlan.controlEnabled` to `true`.' allOf: - $ref: '#/components/schemas/MonitorPlan' backgroundSpeechDenoisingPlan: description: 'This enables filtering of noise and background speech while the user is talking. Features: - Smart denoising using Krisp - Fourier denoising Both can be used together. Order of precedence: - Smart denoising - Fourier denoising' allOf: - $ref: '#/components/schemas/BackgroundSpeechDenoisingPlan' credentialIds: description: These are the credentials that will be used for the workflow calls. By default, all the credentials are available for use in the call but you can provide a subset using this. type: array items: type: string keypadInputPlan: description: This is the plan for keypad input handling during workflow calls. allOf: - $ref: '#/components/schemas/KeypadInputPlan' voicemailMessage: type: string description: 'This is the message that the assistant will say if the call is forwarded to voicemail. If unspecified, it will hang up.' maxLength: 1000 SubscriptionLimits: type: object properties: concurrencyBlocked: type: boolean description: True if this call was blocked by the Call Concurrency limit default: false concurrencyLimit: type: number description: Account Call Concurrency limit remainingConcurrentCalls: type: number description: Incremental number of concurrent calls that will be allowed, including this call 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. summaryCachedPromptTokens: type: number description: This is the number of cached prompt 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. structuredDataCachedPromptTokens: type: number description: This is the number of cached prompt tokens used to extract structured data from the call. successEvaluation: type: number description: This is the cost to evaluate if the call was successful. successEvaluationPromptTokens: type: number description: This is the number of prompt tokens used to evaluate if the call was successful. successEvaluationCompletionTokens: type: number description: This is the number of completion tokens used to evaluate if the call was successful. successEvaluationCachedPromptTokens: type: number description: This is the number of cached prompt tokens used to evaluate if the call was successful. structuredOutput: type: number description: This is the cost to evaluate structuredOutputs from the call. structuredOutputPromptTokens: type: number description: This is the number of prompt tokens used to evaluate structuredOutputs from the call. structuredOutputCompletionTokens: type: number description: This is the number of completion tokens used to evaluate structuredOutputs from the call. structuredOutputCachedPromptTokens: type: number description: This is the number of cached prompt tokens used to evaluate structuredOutputs from the call. CostBreakdown: type: object properties: transport: type: number description: This is the cost of the transport provider, like Twilio or Vonage. stt: type: number description: This is the cost of the speech-to-text service. llm: type: number description: This is the cost of the language model. tts: type: number description: This is the cost of the text-to-speech service. vapi: type: number description: This is the cost of Vapi. chat: type: number description: This is the cost of chat interactions. total: type: number description: This is the total cost of the call. llmPromptTokens: type: number description: This is the LLM prompt tokens used for the call. llmCompletionTokens: type: number description: This is the LLM completion tokens used for the call. llmCachedPromptTokens: type: number description: This is the LLM cached prompt tokens used for the call. ttsCharacters: type: number description: This is the TTS characters used for the call. analysisCostBreakdown: description: This is the cost of the analysis. allOf: - $ref: '#/components/schemas/AnalysisCostBreakdown' Analysis: type: object properties: summary: type: string description: This is the summary of the call. Customize by setting `assistant.analysisPlan.summaryPrompt`. structuredData: type: object description: This is the structured data extracted from the call. Customize by setting `assistant.analysisPlan.structuredDataPrompt` and/or `assistant.analysisPlan.structuredDataSchema`. structuredDataMulti: description: This is the structured data catalog of the call. Customize by setting `assistant.analysisPlan.structuredDataMultiPlan`. type: array items: type: object successEvaluation: type: string description: This is the evaluation of the call. Customize by setting `assistant.analysisPlan.successEvaluationPrompt` and/or `assistant.analysisPlan.successEvaluationRubric`. MonitorResult: type: object properties: monitorId: type: string filterPassed: type: boolean required: - monitorId - filterPassed Monitor: type: object properties: monitors: type: array items: $ref: '#/components/schemas/MonitorResult' listenUrl: type: string description: This is the URL where the assistant's calls can be listened to in real-time. To enable, set `assistant.monitorPlan.listenEnabled` to `true`. controlUrl: type: string description: This is the URL where the assistant's calls can be controlled in real-time. To enable, set `assistant.monitorPlan.controlEnabled` to `true`. Mono: type: object properties: combinedUrl: type: string description: This is the combined recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`. assistantUrl: type: string description: This is the mono recording url for the assistant. To enable, set `assistant.artifactPlan.recordingEnabled`. customerUrl: type: string description: This is the mono recording url for the customer. To enable, set `assistant.artifactPlan.recordingEnabled`. Recording: type: object properties: stereoUrl: type: string description: This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`. videoUrl: type: string description: This is the video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. videoRecordingStartDelaySeconds: type: number description: This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps. mono: description: This is the mono recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`. allOf: - $ref: '#/components/schemas/Mono' NodeArtifact: type: object properties: messages: type: array description: These are the messages that were spoken during the node. items: oneOf: - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/BotMessage' title: BotMessage - $ref: '#/components/schemas/ToolCallMessage' title: ToolCallMessage - $ref: '#/components/schemas/ToolCallResultMessage' title: ToolCallResultMessage nodeName: type: string description: This is the node name. variableValues: type: object description: These are the variable values that were extracted from the node. AssistantActivation: type: object properties: assistantName: type: string description: This is the name of the assistant that was active during the call. assistantId: type: string description: This is the ID of the assistant that was active during the call. required: - assistantName TurnLatency: type: object properties: modelLatency: type: number description: This is the model latency for the first token. voiceLatency: type: number description: This is the voice latency from the model output. transcriberLatency: type: number description: This is the transcriber latency from the user speech. endpointingLatency: type: number description: This is the endpointing latency. turnLatency: type: number description: This is the latency for the whole turn. PerformanceMetrics: type: object properties: turnLatencies: description: These are the individual latencies for each turn. type: array items: $ref: '#/components/schemas/TurnLatency' modelLatencyAverage: type: number description: This is the average latency for the model to output the first token. voiceLatencyAverage: type: number description: This is the average latency for the text to speech. transcriberLatencyAverage: type: number description: This is the average latency for the transcriber. endpointingLatencyAverage: type: number description: This is the average latency for the endpointing. turnLatencyAverage: type: number description: This is the average latency for complete turns. fromTransportLatencyAverage: type: number description: This is the average latency for packets received from the transport provider in milliseconds. toTransportLatencyAverage: type: number description: This is the average latency for packets sent to the transport provider in milliseconds. numUserInterrupted: type: number description: This is the number of times the user was interrupted by the assistant during the call. numAssistantInterrupted: type: number description: This is the number of times the assistant was interrupted by the user during the call. Artifact: type: object properties: messages: type: array description: These are the messages that were spoken during the call. items: oneOf: - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/BotMessage' title: BotMessage - $ref: '#/components/schemas/ToolCallMessage' title: ToolCallMessage - $ref: '#/components/schemas/ToolCallResultMessage' title: ToolCallResultMessage messagesOpenAIFormatted: description: These are the messages that were spoken during the call, formatted for OpenAI. type: array items: $ref: '#/components/schemas/OpenAIMessage' recordingUrl: type: string description: This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`. deprecated: true stereoRecordingUrl: type: string description: This is the stereo recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`. deprecated: true videoRecordingUrl: type: string description: This is video recording url for the call. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. deprecated: true videoRecordingStartDelaySeconds: type: number description: This is video recording start delay in ms. To enable, set `assistant.artifactPlan.videoRecordingEnabled`. This can be used to align the playback of the recording with artifact.messages timestamps. deprecated: true recording: description: This is the recording url for the call. To enable, set `assistant.artifactPlan.recordingEnabled`. allOf: - $ref: '#/components/schemas/Recording' 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`. logUrl: type: string description: This is the url for the call logs. This includes all logging output during the call for debugging purposes. nodes: description: This is the history of workflow nodes that were executed during the call. type: array items: $ref: '#/components/schemas/NodeArtifact' assistantActivations: description: Ordered list of assistants that were active during the call, including after transfers and handoffs. type: array items: $ref: '#/components/schemas/AssistantActivation' variableValues: type: object description: These are the variable values at the end of the workflow execution. performanceMetrics: description: This is the performance metrics for the call. It contains the turn latency, broken down by component. allOf: - $ref: '#/components/schemas/PerformanceMetrics' structuredOutputs: type: object description: 'These are the structured outputs that will be extracted from the call. To enable, set `assistant.artifactPlan.structuredOutputIds` with the IDs of the structured outputs you want to extract.' scorecards: type: object description: 'These are the scorecards that have been evaluated based on the structured outputs extracted during the call. To enable, set `assistant.artifactPlan.scorecardIds` or `assistant.artifactPlan.scorecards` with the IDs or objects of the scorecards you want to evaluate.' transfers: description: These are the transfer records from warm transfers, including destinations, transcripts, and status. type: array items: type: string structuredOutputsLastUpdatedAt: format: date-time type: string description: This is when the structured outputs were last updated RecordingConsent: type: object properties: type: type: object description: This is the type of recording consent. grantedAt: format: date-time type: string description: 'This is the date and time the recording consent was granted. If not specified, it means the recording consent was not granted.' required: - type Compliance: type: object properties: recordingConsent: description: This is the recording consent of the call. Configure in `assistant.compliancePlan.recordingConsentPlan`. allOf: - $ref: '#/components/schemas/RecordingConsent' WorkflowOverrides: type: object properties: variableValues: type: object description: "These are values that will be used to replace the template\ \ variables in the workflow messages and other text-based fields.\nThis\ \ uses LiquidJS syntax. https://liquidjs.com/tutorials/intro-to-liquid.html\n\ \nSo for example, `{{ name }}` will be replaced with the value of `name`\ \ in `variableValues`.\n`{{\"now\" | date: \"%b %d, %Y, %I:%M %p\", \"\ America/New_York\"}}` will be replaced with the current date and time\ \ in New York.\n Some VAPI reserved defaults:\n - *customer* - the customer\ \ object" TransferPhoneNumberHookAction: type: object properties: type: type: string description: This is the type of action - must be "transfer" enum: - transfer destination: description: This is the destination details for the transfer - can be a phone number or SIP URI oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination required: - type SayPhoneNumberHookAction: type: object properties: type: type: string description: This is the type of action - must be "say" enum: - say exact: type: string description: This is the message to say maxLength: 4000 required: - type - exact PhoneNumberCallRingingHookFilter: type: object properties: type: type: string description: This is the type of filter - matches when the specified field starts with any of the given prefixes enum: - startsWith maxLength: 1000 key: type: string description: The field to check. Currently only "number" (the caller's phone number) is supported. enum: - number maxLength: 1000 startsWith: type: array description: Array of prefixes to match. Do not include the + prefix. Inbound calls from numbers starting with any of these prefixes will trigger the hook actions. maxLength: 20 items: type: string maxLength: 20 example: - '91' - '86' - '7' required: - type - key - startsWith PhoneNumberHookCallRinging: type: object properties: 'on': type: string description: This is the event to trigger the hook on enum: - call.ringing maxLength: 1000 filters: type: array description: Optional filters to decide when to trigger the hook. Currently supports filtering by caller country code. items: $ref: '#/components/schemas/PhoneNumberCallRingingHookFilter' do: type: array description: Only the first action will be executed. Additional actions will be ignored. items: oneOf: - $ref: '#/components/schemas/TransferPhoneNumberHookAction' title: TransferPhoneNumberHookAction - $ref: '#/components/schemas/SayPhoneNumberHookAction' title: SayPhoneNumberHookAction required: - 'on' - do PhoneNumberCallEndingHookFilter: type: object properties: type: type: string description: This is the type of filter - currently only "oneOf" is supported enum: - oneOf maxLength: 1000 key: type: string description: This is the key to filter on - only "call.endedReason" is allowed for phone number call ending hooks enum: - call.endedReason maxLength: 1000 oneOf: type: array description: This is the array of assistant-request related ended reasons to match against enum: - assistant-request-failed - assistant-request-returned-error - assistant-request-returned-unspeakable-error - assistant-request-returned-invalid-assistant - assistant-request-returned-no-assistant - assistant-request-returned-forwarding-phone-number items: type: string enum: - assistant-request-failed - assistant-request-returned-error - assistant-request-returned-unspeakable-error - assistant-request-returned-invalid-assistant - assistant-request-returned-no-assistant - assistant-request-returned-forwarding-phone-number required: - type - key - oneOf PhoneNumberHookCallEnding: type: object properties: 'on': type: string description: This is the event to trigger the hook on enum: - call.ending maxLength: 1000 filters: type: array description: Optional filters to decide when to trigger - restricted to assistant-request related ended reasons items: $ref: '#/components/schemas/PhoneNumberCallEndingHookFilter' do: description: This is the action to perform when the hook triggers oneOf: - $ref: '#/components/schemas/TransferPhoneNumberHookAction' title: TransferPhoneNumberHookAction - $ref: '#/components/schemas/SayPhoneNumberHookAction' title: SayPhoneNumberHookAction required: - 'on' ImportTwilioPhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding smsEnabled: type: boolean description: 'Controls whether Vapi sets the messaging webhook URL on the Twilio number during import. If set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is. If `true` or omitted (default), Vapi will configure both the voice and messaging URLs. @default true' default: true twilioPhoneNumber: type: string description: These are the digits of the phone number you own on your Twilio. deprecated: true twilioAccountSid: type: string description: This is your Twilio Account SID that will be used to handle this phone number. twilioAuthToken: type: string description: This is the Twilio Auth Token that will be used to handle this phone number. twilioApiKey: type: string description: This is the Twilio API Key that will be used to handle this phone number. If AuthToken is provided, this will be ignored. twilioApiSecret: type: string description: This is the Twilio API Secret that will be used to handle this phone number. If AuthToken is provided, this will be ignored. name: type: string description: This is the name of the phone number. This is just for your own reference. maxLength: 40 assistantId: type: string description: 'This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' required: - twilioPhoneNumber - twilioAccountSid CreateCustomerDTO: type: object properties: numberE164CheckEnabled: type: boolean description: 'This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `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. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)' default: true extension: type: string description: This is the extension that will be dialed after the call is answered. maxLength: 10 example: null assistantOverrides: description: 'These are the overrides for the assistant''s settings and template variables specific to this customer. This allows customization of the assistant''s behavior for individual customers in batch calls.' allOf: - $ref: '#/components/schemas/AssistantOverrides' number: type: string description: This is the number of the customer. minLength: 3 maxLength: 40 sipUri: type: string description: This is the SIP URI of the customer. name: type: string description: 'This is the name of the customer. This is just for your own reference. For SIP inbound calls, this is extracted from the `From` SIP header with format `"Display Name" `.' maxLength: 40 email: type: string description: This is the email of the customer. maxLength: 40 externalId: type: string description: This is the external ID of the customer. maxLength: 40 SchedulePlan: type: object properties: earliestAt: format: date-time type: string description: This is the ISO 8601 date-time string of the earliest time the call can be scheduled. latestAt: format: date-time type: string description: This is the ISO 8601 date-time string of the latest time the call can be scheduled. required: - earliestAt Call: type: object properties: type: type: string description: This is the type of call. enum: - inboundPhoneCall - outboundPhoneCall - webCall - vapi.websocketCall costs: type: array description: These are the costs of individual components of the call in USD. items: oneOf: - $ref: '#/components/schemas/TransportCost' title: TransportCost - $ref: '#/components/schemas/TranscriberCost' title: TranscriberCost - $ref: '#/components/schemas/ModelCost' title: ModelCost - $ref: '#/components/schemas/VoiceCost' title: VoiceCost - $ref: '#/components/schemas/VapiCost' title: VapiCost - $ref: '#/components/schemas/VoicemailDetectionCost' title: VoicemailDetectionCost - $ref: '#/components/schemas/AnalysisCost' title: AnalysisCost - $ref: '#/components/schemas/KnowledgeBaseCost' title: KnowledgeBaseCost messages: type: array items: oneOf: - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/BotMessage' title: BotMessage - $ref: '#/components/schemas/ToolCallMessage' title: ToolCallMessage - $ref: '#/components/schemas/ToolCallResultMessage' title: ToolCallResultMessage phoneCallProvider: type: string description: 'This is the provider of the call. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.' deprecated: true enum: - twilio - vonage - vapi - telnyx phoneCallTransport: type: string description: 'This is the transport of the phone call. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.' enum: - sip - pstn status: type: string description: This is the status of the call. enum: - scheduled - queued - ringing - in-progress - forwarding - ended - not-found - deletion-failed endedReason: type: string description: This is the explanation for how the call ended. enum: - call-start-error-neither-assistant-nor-server-set - assistant-request-failed - assistant-request-returned-error - assistant-request-returned-unspeakable-error - assistant-request-returned-invalid-assistant - assistant-request-returned-no-assistant - assistant-request-returned-forwarding-phone-number - scheduled-call-deleted - call.start.error-vapifault-get-org - call.start.error-vapifault-get-subscription - call.start.error-get-assistant - call.start.error-get-phone-number - call.start.error-get-customer - 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 - call.start.error-subscription-wallet-does-not-exist - call.start.error-fraud-check-failed - call.start.error-subscription-frozen - call.start.error-subscription-insufficient-credits - call.start.error-subscription-upgrade-failed - call.start.error-subscription-concurrency-limit-reached - call.start.error-enterprise-feature-not-available-recording-consent - assistant-not-valid - call.start.error-vapifault-database-error - assistant-not-found - pipeline-error-openai-voice-failed - pipeline-error-cartesia-voice-failed - pipeline-error-deepgram-voice-failed - pipeline-error-eleven-labs-voice-failed - pipeline-error-playht-voice-failed - pipeline-error-lmnt-voice-failed - pipeline-error-azure-voice-failed - pipeline-error-rime-ai-voice-failed - pipeline-error-smallest-ai-voice-failed - pipeline-error-vapi-voice-failed - pipeline-error-neuphonic-voice-failed - pipeline-error-hume-voice-failed - pipeline-error-sesame-voice-failed - pipeline-error-inworld-voice-failed - pipeline-error-minimax-voice-failed - pipeline-error-wellsaid-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-vapi-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-inworld-voice-failed - call.in-progress.error-vapifault-minimax-voice-failed - call.in-progress.error-vapifault-wellsaid-voice-failed - call.in-progress.error-vapifault-tavus-video-failed - pipeline-error-vapi-llm-failed - pipeline-error-vapi-400-bad-request-validation-failed - pipeline-error-vapi-401-unauthorized - pipeline-error-vapi-403-model-access-denied - pipeline-error-vapi-429-exceeded-quota - pipeline-error-vapi-500-server-error - pipeline-error-vapi-503-server-overloaded-error - call.in-progress.error-providerfault-vapi-llm-failed - call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed - call.in-progress.error-vapifault-vapi-401-unauthorized - call.in-progress.error-vapifault-vapi-403-model-access-denied - call.in-progress.error-vapifault-vapi-429-exceeded-quota - call.in-progress.error-providerfault-vapi-500-server-error - call.in-progress.error-providerfault-vapi-503-server-overloaded-error - pipeline-error-deepgram-transcriber-failed - pipeline-error-deepgram-transcriber-api-key-missing - call.in-progress.error-vapifault-deepgram-transcriber-failed - pipeline-error-gladia-transcriber-failed - call.in-progress.error-vapifault-gladia-transcriber-failed - pipeline-error-speechmatics-transcriber-failed - call.in-progress.error-vapifault-speechmatics-transcriber-failed - pipeline-error-assembly-ai-transcriber-failed - pipeline-error-assembly-ai-returning-400-insufficent-funds - pipeline-error-assembly-ai-returning-400-paid-only-feature - pipeline-error-assembly-ai-returning-401-invalid-credentials - pipeline-error-assembly-ai-returning-500-invalid-schema - pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed - call.in-progress.error-vapifault-assembly-ai-transcriber-failed - call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds - call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature - call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials - call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema - call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed - pipeline-error-talkscriber-transcriber-failed - call.in-progress.error-vapifault-talkscriber-transcriber-failed - pipeline-error-azure-speech-transcriber-failed - call.in-progress.error-vapifault-azure-speech-transcriber-failed - pipeline-error-eleven-labs-transcriber-failed - call.in-progress.error-vapifault-eleven-labs-transcriber-failed - 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 - pipeline-error-soniox-transcriber-auth-failed - pipeline-error-soniox-transcriber-rate-limited - pipeline-error-soniox-transcriber-invalid-config - pipeline-error-soniox-transcriber-server-error - pipeline-error-soniox-transcriber-failed - call.in-progress.error-vapifault-soniox-transcriber-auth-failed - call.in-progress.error-vapifault-soniox-transcriber-rate-limited - call.in-progress.error-vapifault-soniox-transcriber-invalid-config - call.in-progress.error-vapifault-soniox-transcriber-server-error - call.in-progress.error-vapifault-soniox-transcriber-failed - call.in-progress.error-pipeline-no-available-llm-model - worker-shutdown - vonage-disconnected - vonage-failed-to-connect-call - vonage-completed - phone-call-provider-bypass-enabled-but-no-call-received - call.in-progress.error-providerfault-transport-never-connected - call.in-progress.error-vapifault-worker-not-available - call.in-progress.error-vapifault-transport-never-connected - call.in-progress.error-vapifault-transport-connected-but-call-not-active - call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing - call.in-progress.error-vapifault-worker-died - call.in-progress.twilio-completed-call - call.in-progress.sip-completed-call - call.in-progress.error-sip-inbound-call-failed-to-connect - call.in-progress.error-providerfault-outbound-sip-503-service-unavailable - call.in-progress.error-sip-outbound-call-failed-to-connect - call.ringing.error-sip-inbound-call-failed-to-connect - call.in-progress.error-providerfault-openai-llm-failed - call.in-progress.error-providerfault-azure-openai-llm-failed - call.in-progress.error-providerfault-groq-llm-failed - call.in-progress.error-providerfault-google-llm-failed - call.in-progress.error-providerfault-xai-llm-failed - call.in-progress.error-providerfault-mistral-llm-failed - call.in-progress.error-providerfault-minimax-llm-failed - call.in-progress.error-providerfault-inflection-ai-llm-failed - call.in-progress.error-providerfault-cerebras-llm-failed - call.in-progress.error-providerfault-deep-seek-llm-failed - call.in-progress.error-providerfault-baseten-llm-failed - call.in-progress.error-vapifault-chat-pipeline-failed-to-start - pipeline-error-openai-400-bad-request-validation-failed - pipeline-error-openai-401-unauthorized - pipeline-error-openai-401-incorrect-api-key - pipeline-error-openai-401-account-not-in-organization - pipeline-error-openai-403-model-access-denied - pipeline-error-openai-429-exceeded-quota - pipeline-error-openai-429-rate-limit-reached - pipeline-error-openai-500-server-error - pipeline-error-openai-503-server-overloaded-error - pipeline-error-openai-llm-failed - call.in-progress.error-vapifault-openai-400-bad-request-validation-failed - call.in-progress.error-vapifault-openai-401-unauthorized - call.in-progress.error-vapifault-openai-401-incorrect-api-key - call.in-progress.error-vapifault-openai-401-account-not-in-organization - call.in-progress.error-vapifault-openai-403-model-access-denied - call.in-progress.error-vapifault-openai-429-exceeded-quota - call.in-progress.error-vapifault-openai-429-rate-limit-reached - call.in-progress.error-providerfault-openai-500-server-error - call.in-progress.error-providerfault-openai-503-server-overloaded-error - pipeline-error-azure-openai-400-bad-request-validation-failed - pipeline-error-azure-openai-401-unauthorized - pipeline-error-azure-openai-403-model-access-denied - pipeline-error-azure-openai-429-exceeded-quota - pipeline-error-azure-openai-500-server-error - pipeline-error-azure-openai-503-server-overloaded-error - pipeline-error-azure-openai-llm-failed - call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed - call.in-progress.error-vapifault-azure-openai-401-unauthorized - call.in-progress.error-vapifault-azure-openai-403-model-access-denied - call.in-progress.error-vapifault-azure-openai-429-exceeded-quota - call.in-progress.error-providerfault-azure-openai-500-server-error - call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error - pipeline-error-google-400-bad-request-validation-failed - pipeline-error-google-401-unauthorized - pipeline-error-google-403-model-access-denied - pipeline-error-google-429-exceeded-quota - pipeline-error-google-500-server-error - pipeline-error-google-503-server-overloaded-error - pipeline-error-google-llm-failed - call.in-progress.error-vapifault-google-400-bad-request-validation-failed - call.in-progress.error-vapifault-google-401-unauthorized - call.in-progress.error-vapifault-google-403-model-access-denied - call.in-progress.error-vapifault-google-429-exceeded-quota - call.in-progress.error-providerfault-google-500-server-error - call.in-progress.error-providerfault-google-503-server-overloaded-error - pipeline-error-xai-400-bad-request-validation-failed - pipeline-error-xai-401-unauthorized - pipeline-error-xai-403-model-access-denied - pipeline-error-xai-429-exceeded-quota - pipeline-error-xai-500-server-error - pipeline-error-xai-503-server-overloaded-error - pipeline-error-xai-llm-failed - call.in-progress.error-vapifault-xai-400-bad-request-validation-failed - call.in-progress.error-vapifault-xai-401-unauthorized - call.in-progress.error-vapifault-xai-403-model-access-denied - call.in-progress.error-vapifault-xai-429-exceeded-quota - call.in-progress.error-providerfault-xai-500-server-error - call.in-progress.error-providerfault-xai-503-server-overloaded-error - pipeline-error-baseten-400-bad-request-validation-failed - pipeline-error-baseten-401-unauthorized - pipeline-error-baseten-403-model-access-denied - pipeline-error-baseten-429-exceeded-quota - pipeline-error-baseten-500-server-error - pipeline-error-baseten-503-server-overloaded-error - pipeline-error-baseten-llm-failed - call.in-progress.error-vapifault-baseten-400-bad-request-validation-failed - call.in-progress.error-vapifault-baseten-401-unauthorized - call.in-progress.error-vapifault-baseten-403-model-access-denied - call.in-progress.error-vapifault-baseten-429-exceeded-quota - call.in-progress.error-providerfault-baseten-500-server-error - call.in-progress.error-providerfault-baseten-503-server-overloaded-error - pipeline-error-mistral-400-bad-request-validation-failed - pipeline-error-mistral-401-unauthorized - pipeline-error-mistral-403-model-access-denied - pipeline-error-mistral-429-exceeded-quota - pipeline-error-mistral-500-server-error - pipeline-error-mistral-503-server-overloaded-error - pipeline-error-mistral-llm-failed - call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed - call.in-progress.error-vapifault-mistral-401-unauthorized - call.in-progress.error-vapifault-mistral-403-model-access-denied - call.in-progress.error-vapifault-mistral-429-exceeded-quota - call.in-progress.error-providerfault-mistral-500-server-error - call.in-progress.error-providerfault-mistral-503-server-overloaded-error - pipeline-error-minimax-400-bad-request-validation-failed - pipeline-error-minimax-401-unauthorized - pipeline-error-minimax-403-model-access-denied - pipeline-error-minimax-429-exceeded-quota - pipeline-error-minimax-500-server-error - pipeline-error-minimax-503-server-overloaded-error - pipeline-error-minimax-llm-failed - call.in-progress.error-vapifault-minimax-400-bad-request-validation-failed - call.in-progress.error-vapifault-minimax-401-unauthorized - call.in-progress.error-vapifault-minimax-403-model-access-denied - call.in-progress.error-vapifault-minimax-429-exceeded-quota - call.in-progress.error-providerfault-minimax-500-server-error - call.in-progress.error-providerfault-minimax-503-server-overloaded-error - pipeline-error-inflection-ai-400-bad-request-validation-failed - pipeline-error-inflection-ai-401-unauthorized - pipeline-error-inflection-ai-403-model-access-denied - pipeline-error-inflection-ai-429-exceeded-quota - pipeline-error-inflection-ai-500-server-error - pipeline-error-inflection-ai-503-server-overloaded-error - pipeline-error-inflection-ai-llm-failed - call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed - call.in-progress.error-vapifault-inflection-ai-401-unauthorized - call.in-progress.error-vapifault-inflection-ai-403-model-access-denied - call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota - call.in-progress.error-providerfault-inflection-ai-500-server-error - call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error - pipeline-error-deep-seek-400-bad-request-validation-failed - pipeline-error-deep-seek-401-unauthorized - pipeline-error-deep-seek-403-model-access-denied - pipeline-error-deep-seek-429-exceeded-quota - pipeline-error-deep-seek-500-server-error - pipeline-error-deep-seek-503-server-overloaded-error - pipeline-error-deep-seek-llm-failed - call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed - call.in-progress.error-vapifault-deep-seek-401-unauthorized - call.in-progress.error-vapifault-deep-seek-403-model-access-denied - call.in-progress.error-vapifault-deep-seek-429-exceeded-quota - call.in-progress.error-providerfault-deep-seek-500-server-error - call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error - pipeline-error-groq-400-bad-request-validation-failed - pipeline-error-groq-401-unauthorized - pipeline-error-groq-403-model-access-denied - pipeline-error-groq-429-exceeded-quota - pipeline-error-groq-500-server-error - pipeline-error-groq-503-server-overloaded-error - pipeline-error-groq-llm-failed - call.in-progress.error-vapifault-groq-400-bad-request-validation-failed - call.in-progress.error-vapifault-groq-401-unauthorized - call.in-progress.error-vapifault-groq-403-model-access-denied - call.in-progress.error-vapifault-groq-429-exceeded-quota - call.in-progress.error-providerfault-groq-500-server-error - call.in-progress.error-providerfault-groq-503-server-overloaded-error - pipeline-error-cerebras-400-bad-request-validation-failed - pipeline-error-cerebras-401-unauthorized - pipeline-error-cerebras-403-model-access-denied - pipeline-error-cerebras-429-exceeded-quota - pipeline-error-cerebras-500-server-error - pipeline-error-cerebras-503-server-overloaded-error - pipeline-error-cerebras-llm-failed - call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed - call.in-progress.error-vapifault-cerebras-401-unauthorized - call.in-progress.error-vapifault-cerebras-403-model-access-denied - call.in-progress.error-vapifault-cerebras-429-exceeded-quota - call.in-progress.error-providerfault-cerebras-500-server-error - call.in-progress.error-providerfault-cerebras-503-server-overloaded-error - pipeline-error-anthropic-400-bad-request-validation-failed - pipeline-error-anthropic-401-unauthorized - pipeline-error-anthropic-403-model-access-denied - pipeline-error-anthropic-429-exceeded-quota - pipeline-error-anthropic-500-server-error - pipeline-error-anthropic-503-server-overloaded-error - pipeline-error-anthropic-llm-failed - call.in-progress.error-providerfault-anthropic-llm-failed - call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed - call.in-progress.error-vapifault-anthropic-401-unauthorized - call.in-progress.error-vapifault-anthropic-403-model-access-denied - call.in-progress.error-vapifault-anthropic-429-exceeded-quota - call.in-progress.error-providerfault-anthropic-500-server-error - call.in-progress.error-providerfault-anthropic-503-server-overloaded-error - pipeline-error-anthropic-bedrock-400-bad-request-validation-failed - pipeline-error-anthropic-bedrock-401-unauthorized - pipeline-error-anthropic-bedrock-403-model-access-denied - pipeline-error-anthropic-bedrock-429-exceeded-quota - pipeline-error-anthropic-bedrock-500-server-error - pipeline-error-anthropic-bedrock-503-server-overloaded-error - pipeline-error-anthropic-bedrock-llm-failed - call.in-progress.error-providerfault-anthropic-bedrock-llm-failed - call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed - call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized - call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied - call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota - call.in-progress.error-providerfault-anthropic-bedrock-500-server-error - call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error - pipeline-error-anthropic-vertex-400-bad-request-validation-failed - pipeline-error-anthropic-vertex-401-unauthorized - pipeline-error-anthropic-vertex-403-model-access-denied - pipeline-error-anthropic-vertex-429-exceeded-quota - pipeline-error-anthropic-vertex-500-server-error - pipeline-error-anthropic-vertex-503-server-overloaded-error - pipeline-error-anthropic-vertex-llm-failed - call.in-progress.error-providerfault-anthropic-vertex-llm-failed - call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed - call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized - call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied - call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota - call.in-progress.error-providerfault-anthropic-vertex-500-server-error - call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error - pipeline-error-together-ai-400-bad-request-validation-failed - pipeline-error-together-ai-401-unauthorized - pipeline-error-together-ai-403-model-access-denied - pipeline-error-together-ai-429-exceeded-quota - pipeline-error-together-ai-500-server-error - pipeline-error-together-ai-503-server-overloaded-error - pipeline-error-together-ai-llm-failed - call.in-progress.error-providerfault-together-ai-llm-failed - call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed - call.in-progress.error-vapifault-together-ai-401-unauthorized - call.in-progress.error-vapifault-together-ai-403-model-access-denied - call.in-progress.error-vapifault-together-ai-429-exceeded-quota - call.in-progress.error-providerfault-together-ai-500-server-error - call.in-progress.error-providerfault-together-ai-503-server-overloaded-error - pipeline-error-anyscale-400-bad-request-validation-failed - pipeline-error-anyscale-401-unauthorized - pipeline-error-anyscale-403-model-access-denied - pipeline-error-anyscale-429-exceeded-quota - pipeline-error-anyscale-500-server-error - pipeline-error-anyscale-503-server-overloaded-error - pipeline-error-anyscale-llm-failed - call.in-progress.error-providerfault-anyscale-llm-failed - call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed - call.in-progress.error-vapifault-anyscale-401-unauthorized - call.in-progress.error-vapifault-anyscale-403-model-access-denied - call.in-progress.error-vapifault-anyscale-429-exceeded-quota - call.in-progress.error-providerfault-anyscale-500-server-error - call.in-progress.error-providerfault-anyscale-503-server-overloaded-error - pipeline-error-openrouter-400-bad-request-validation-failed - pipeline-error-openrouter-401-unauthorized - pipeline-error-openrouter-403-model-access-denied - pipeline-error-openrouter-429-exceeded-quota - pipeline-error-openrouter-500-server-error - pipeline-error-openrouter-503-server-overloaded-error - pipeline-error-openrouter-llm-failed - call.in-progress.error-providerfault-openrouter-llm-failed - call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed - call.in-progress.error-vapifault-openrouter-401-unauthorized - call.in-progress.error-vapifault-openrouter-403-model-access-denied - call.in-progress.error-vapifault-openrouter-429-exceeded-quota - call.in-progress.error-providerfault-openrouter-500-server-error - call.in-progress.error-providerfault-openrouter-503-server-overloaded-error - pipeline-error-perplexity-ai-400-bad-request-validation-failed - pipeline-error-perplexity-ai-401-unauthorized - pipeline-error-perplexity-ai-403-model-access-denied - pipeline-error-perplexity-ai-429-exceeded-quota - pipeline-error-perplexity-ai-500-server-error - pipeline-error-perplexity-ai-503-server-overloaded-error - pipeline-error-perplexity-ai-llm-failed - call.in-progress.error-providerfault-perplexity-ai-llm-failed - call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed - call.in-progress.error-vapifault-perplexity-ai-401-unauthorized - call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied - call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota - call.in-progress.error-providerfault-perplexity-ai-500-server-error - call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error - pipeline-error-deepinfra-400-bad-request-validation-failed - pipeline-error-deepinfra-401-unauthorized - pipeline-error-deepinfra-403-model-access-denied - pipeline-error-deepinfra-429-exceeded-quota - pipeline-error-deepinfra-500-server-error - pipeline-error-deepinfra-503-server-overloaded-error - pipeline-error-deepinfra-llm-failed - call.in-progress.error-providerfault-deepinfra-llm-failed - call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed - call.in-progress.error-vapifault-deepinfra-401-unauthorized - call.in-progress.error-vapifault-deepinfra-403-model-access-denied - call.in-progress.error-vapifault-deepinfra-429-exceeded-quota - call.in-progress.error-providerfault-deepinfra-500-server-error - call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error - pipeline-error-runpod-400-bad-request-validation-failed - pipeline-error-runpod-401-unauthorized - pipeline-error-runpod-403-model-access-denied - pipeline-error-runpod-429-exceeded-quota - pipeline-error-runpod-500-server-error - pipeline-error-runpod-503-server-overloaded-error - pipeline-error-runpod-llm-failed - call.in-progress.error-providerfault-runpod-llm-failed - call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed - call.in-progress.error-vapifault-runpod-401-unauthorized - call.in-progress.error-vapifault-runpod-403-model-access-denied - call.in-progress.error-vapifault-runpod-429-exceeded-quota - call.in-progress.error-providerfault-runpod-500-server-error - call.in-progress.error-providerfault-runpod-503-server-overloaded-error - pipeline-error-custom-llm-400-bad-request-validation-failed - pipeline-error-custom-llm-401-unauthorized - pipeline-error-custom-llm-403-model-access-denied - pipeline-error-custom-llm-429-exceeded-quota - pipeline-error-custom-llm-500-server-error - pipeline-error-custom-llm-503-server-overloaded-error - pipeline-error-custom-llm-llm-failed - call.in-progress.error-providerfault-custom-llm-llm-failed - call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed - call.in-progress.error-vapifault-custom-llm-401-unauthorized - call.in-progress.error-vapifault-custom-llm-403-model-access-denied - call.in-progress.error-vapifault-custom-llm-429-exceeded-quota - call.in-progress.error-providerfault-custom-llm-500-server-error - call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error - call.in-progress.error-pipeline-ws-model-connection-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-502-server-error - pipeline-error-cartesia-503-server-error - pipeline-error-cartesia-522-server-error - call.in-progress.error-vapifault-cartesia-socket-hang-up - call.in-progress.error-vapifault-cartesia-requested-payment - call.in-progress.error-providerfault-cartesia-500-server-error - call.in-progress.error-providerfault-cartesia-503-server-error - call.in-progress.error-providerfault-cartesia-522-server-error - pipeline-error-eleven-labs-voice-not-found - pipeline-error-eleven-labs-quota-exceeded - pipeline-error-eleven-labs-unauthorized-access - pipeline-error-eleven-labs-unauthorized-to-access-model - pipeline-error-eleven-labs-professional-voices-only-for-creator-plus - pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade - pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade - pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade - pipeline-error-eleven-labs-system-busy-and-requested-upgrade - pipeline-error-eleven-labs-voice-not-fine-tuned - pipeline-error-eleven-labs-invalid-api-key - pipeline-error-eleven-labs-invalid-voice-samples - pipeline-error-eleven-labs-voice-disabled-by-owner - pipeline-error-eleven-labs-vapi-voice-disabled-by-owner - pipeline-error-eleven-labs-blocked-account-in-probation - pipeline-error-eleven-labs-blocked-content-against-their-policy - pipeline-error-eleven-labs-missing-samples-for-voice-clone - pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used - pipeline-error-eleven-labs-voice-not-allowed-for-free-users - pipeline-error-eleven-labs-max-character-limit-exceeded - pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification - pipeline-error-eleven-labs-500-server-error - pipeline-error-eleven-labs-503-server-error - call.in-progress.error-vapifault-eleven-labs-voice-not-found - call.in-progress.error-vapifault-eleven-labs-quota-exceeded - call.in-progress.error-vapifault-eleven-labs-unauthorized-access - call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model - call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus - call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned - call.in-progress.error-vapifault-eleven-labs-invalid-api-key - call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples - call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner - call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation - call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy - call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone - call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used - call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users - call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded - call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification - call.in-progress.error-providerfault-eleven-labs-system-busy-and-requested-upgrade - call.in-progress.error-providerfault-eleven-labs-500-server-error - call.in-progress.error-providerfault-eleven-labs-503-server-error - pipeline-error-playht-request-timed-out - pipeline-error-playht-invalid-voice - pipeline-error-playht-unexpected-error - pipeline-error-playht-out-of-credits - pipeline-error-playht-invalid-emotion - pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri - pipeline-error-playht-401-unauthorized - pipeline-error-playht-403-forbidden-out-of-characters - pipeline-error-playht-403-forbidden-api-access-not-available - pipeline-error-playht-429-exceeded-quota - pipeline-error-playht-502-gateway-error - pipeline-error-playht-504-gateway-error - call.in-progress.error-vapifault-playht-request-timed-out - call.in-progress.error-vapifault-playht-invalid-voice - call.in-progress.error-vapifault-playht-unexpected-error - call.in-progress.error-vapifault-playht-out-of-credits - call.in-progress.error-vapifault-playht-invalid-emotion - call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri - call.in-progress.error-vapifault-playht-401-unauthorized - call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters - call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available - call.in-progress.error-vapifault-playht-429-exceeded-quota - call.in-progress.error-providerfault-playht-502-gateway-error - call.in-progress.error-providerfault-playht-504-gateway-error - pipeline-error-custom-transcriber-failed - call.in-progress.error-vapifault-custom-transcriber-failed - pipeline-error-eleven-labs-transcriber-failed - call.in-progress.error-vapifault-eleven-labs-transcriber-failed - pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination - pipeline-error-deepgram-returning-401-invalid-credentials - pipeline-error-deepgram-returning-403-model-access-denied - pipeline-error-deepgram-returning-404-not-found - pipeline-error-deepgram-returning-500-invalid-json - pipeline-error-deepgram-returning-502-network-error - pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach - pipeline-error-deepgram-returning-econnreset - call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination - call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials - call.in-progress.error-vapifault-deepgram-returning-404-not-found - call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied - call.in-progress.error-providerfault-deepgram-returning-500-invalid-json - call.in-progress.error-providerfault-deepgram-returning-502-network-error - call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach - pipeline-error-google-transcriber-failed - call.in-progress.error-vapifault-google-transcriber-failed - pipeline-error-openai-transcriber-failed - call.in-progress.error-vapifault-openai-transcriber-failed - pipeline-error-soniox-transcriber-auth-failed - pipeline-error-soniox-transcriber-rate-limited - pipeline-error-soniox-transcriber-invalid-config - pipeline-error-soniox-transcriber-server-error - pipeline-error-soniox-transcriber-failed - call.in-progress.error-vapifault-soniox-transcriber-auth-failed - call.in-progress.error-vapifault-soniox-transcriber-rate-limited - call.in-progress.error-vapifault-soniox-transcriber-invalid-config - call.in-progress.error-vapifault-soniox-transcriber-server-error - call.in-progress.error-vapifault-soniox-transcriber-failed - call.in-progress.error-warm-transfer-max-duration - call.in-progress.error-warm-transfer-assistant-cancelled - call.in-progress.error-warm-transfer-silence-timeout - call.in-progress.error-warm-transfer-microphone-timeout - assistant-ended-call - assistant-said-end-call-phrase - assistant-ended-call-with-hangup-task - assistant-ended-call-after-message-spoken - assistant-forwarded-call - assistant-join-timed-out - call.in-progress.error-assistant-did-not-receive-customer-audio - call.in-progress.error-transfer-failed - customer-busy - customer-ended-call - customer-ended-call-before-warm-transfer - customer-ended-call-after-warm-transfer-attempt - customer-ended-call-during-transfer - customer-did-not-answer - customer-did-not-give-microphone-permission - exceeded-max-duration - manually-canceled - phone-call-provider-closed-websocket - call.forwarding.operator-busy - silence-timed-out - call.in-progress.error-sip-inbound-call-failed-to-connect - call.in-progress.error-providerfault-outbound-sip-403-forbidden - call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required - call.in-progress.error-providerfault-outbound-sip-408-request-timeout - call.in-progress.error-providerfault-outbound-sip-503-service-unavailable - call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable - call.in-progress.error-sip-outbound-call-failed-to-connect - call.ringing.hook-executed-say - call.ringing.hook-executed-transfer - call.ending.hook-executed-say - call.ending.hook-executed-transfer - call.ringing.sip-inbound-caller-hungup-before-call-connect - call.ringing.error-sip-inbound-call-failed-to-connect - twilio-failed-to-connect-call - twilio-reported-customer-misdialed - vonage-rejected - voicemail - call-deleted endedMessage: type: string description: This is the message that adds more context to the ended reason. It can be used to provide potential error messages or warnings. destination: description: This is the destination where the call ended up being transferred to. If the call was not transferred, this will be empty. oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination id: type: string description: This is the unique identifier for the call. orgId: type: string description: This is the unique identifier for the org that this call belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the call was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the call was last updated. startedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the call was started. endedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the call was ended. cost: type: number description: This is the cost of the call in USD. costBreakdown: description: This is the cost of the call in USD. allOf: - $ref: '#/components/schemas/CostBreakdown' artifactPlan: description: This is a copy of assistant artifact plan. This isn't actually stored on the call but rather just returned in POST /call/web to enable artifact creation client side. allOf: - $ref: '#/components/schemas/ArtifactPlan' analysis: description: This is the analysis of the call. Configure in `assistant.analysisPlan`. allOf: - $ref: '#/components/schemas/Analysis' monitor: description: This is to real-time monitor the call. Configure in `assistant.monitorPlan`. allOf: - $ref: '#/components/schemas/Monitor' artifact: description: These are the artifacts created from the call. Configure in `assistant.artifactPlan`. allOf: - $ref: '#/components/schemas/Artifact' compliance: description: This is the compliance of the call. Configure in `assistant.compliancePlan`. allOf: - $ref: '#/components/schemas/Compliance' 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. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.' deprecated: true campaignId: type: string description: This is the campaign ID that the call belongs to. assistantId: type: string description: 'This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead. To start a call with: - Assistant, use `assistantId` or `assistant` - Squad, use `squadId` or `squad` - Workflow, use `workflowId` or `workflow`' assistant: description: 'This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead. To start a call with: - Assistant, use `assistant` - Squad, use `squad` - Workflow, use `workflow`' allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: These are the overrides for the `assistant` or `assistantId`'s settings and template variables. allOf: - $ref: '#/components/schemas/AssistantOverrides' squadId: type: string description: 'This is the squad that will be used for the call. To use a transient squad, use `squad` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' squad: description: 'This is a squad that will be used for the call. To use an existing squad, use `squadId` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' allOf: - $ref: '#/components/schemas/CreateSquadDTO' squadOverrides: description: 'These are the overrides for the `squad` or `squadId`''s member settings and template variables. This will apply to all members of the squad.' allOf: - $ref: '#/components/schemas/AssistantOverrides' workflowId: type: string description: 'This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' workflow: description: 'This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' allOf: - $ref: '#/components/schemas/CreateWorkflowDTO' workflowOverrides: description: These are the overrides for the `workflow` or `workflowId`'s settings and template variables. allOf: - $ref: '#/components/schemas/WorkflowOverrides' phoneNumberId: type: string description: 'This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead. Only 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. Only 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. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.' customer: description: 'This is the customer that will be called. To call an existing customer, use `customerId` instead. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.' allOf: - $ref: '#/components/schemas/CreateCustomerDTO' name: type: string description: This is the name of the call. This is just for your own reference. maxLength: 40 schedulePlan: description: This is the schedule plan of the call. allOf: - $ref: '#/components/schemas/SchedulePlan' transport: type: object description: This is the transport of the call. required: - id - orgId - createdAt - updatedAt CallBatchError: type: object properties: customer: $ref: '#/components/schemas/CreateCustomerDTO' error: type: string required: - customer - error CallBatchResponse: type: object properties: subscriptionLimits: description: Subscription limits at the end of this batch allOf: - $ref: '#/components/schemas/SubscriptionLimits' 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 AssistantSpeechWordAlignmentTiming: type: object properties: type: type: string description: Discriminator for exact per-word timing (e.g. ElevenLabs alignment). enum: - word-alignment words: description: The individual words in this audio segment. type: array items: type: string wordsStartTimesMs: description: Start time in milliseconds for each word (parallel to `words`). type: array items: type: number wordsEndTimesMs: description: End time in milliseconds for each word (parallel to `words`). type: array items: type: number required: - type - words - wordsStartTimesMs - wordsEndTimesMs AssistantSpeechWordTimestamp: type: object properties: word: type: string description: The full word text (syllables aggregated into complete words). startMs: type: number description: Start time in milliseconds relative to the segment start. endMs: type: number description: End time in milliseconds relative to the segment start. required: - word - startMs - endMs AssistantSpeechWordProgressTiming: type: object properties: type: type: string description: Discriminator for cursor-based word progress (e.g. Minimax subtitle data). enum: - word-progress wordsSpoken: type: number description: Number of words spoken so far in this turn. totalWords: type: number description: "Total number of words sent to the TTS provider for this turn.\n\ \n**Important**: this value grows across events within a single turn because\n\ Minimax synthesizes audio incrementally as the LLM streams tokens. Treat\n\ it as \"best known total so far\" \u2014 it will stabilize once synthesis\ \ is\ncomplete.\n\nA value of `0` is a valid sentinel meaning \"not yet\ \ known\". This can occur\non the very first `assistant-speech` event\ \ of a turn if audio begins\nplaying before the TTS provider has confirmed\ \ word-count data. Clients\n**must** guard against divide-by-zero when\ \ computing a progress fraction:\n\n```ts\nconst pct = totalWords > 0\ \ ? wordsSpoken / totalWords : 0;\n```" segment: type: string description: "The text of the latest spoken segment (sentence or clause).\ \ Use this\nfor caption display \u2014 it corresponds to the chunk just\ \ confirmed by\nthe TTS provider, unlike `text` on the parent message\ \ which carries\nthe full turn text." segmentDurationMs: type: number description: "Audio duration in milliseconds for the latest spoken segment.\ \ Pair\nwith `segment` to animate karaoke-style word reveals \u2014 divide\ \ the\nsegment text across this duration for approximate per-word timing." words: description: 'Per-word timestamps for the latest spoken segment. Available when the TTS provider supports word-level timing (e.g. Minimax with subtitle_type: "word"). Syllables from the provider are aggregated into whole words with start/end times relative to the segment start. Use these for precise karaoke-style highlighting instead of interpolating from segmentDurationMs.' type: array items: $ref: '#/components/schemas/AssistantSpeechWordTimestamp' required: - type - wordsSpoken - totalWords CreateCallDTO: type: object properties: customers: description: 'This is used to issue batch calls to multiple customers. Only relevant for `outboundPhoneCall`. To call a single customer, use `customer` instead.' type: array items: $ref: '#/components/schemas/CreateCustomerDTO' name: type: string description: This is the name of the call. This is just for your own reference. maxLength: 40 schedulePlan: description: This is the schedule plan of the call. allOf: - $ref: '#/components/schemas/SchedulePlan' transport: type: object description: This is the transport of the call. assistantId: type: string description: 'This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead. To start a call with: - Assistant, use `assistantId` or `assistant` - Squad, use `squadId` or `squad` - Workflow, use `workflowId` or `workflow`' assistant: description: 'This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead. To start a call with: - Assistant, use `assistant` - Squad, use `squad` - Workflow, use `workflow`' allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: These are the overrides for the `assistant` or `assistantId`'s settings and template variables. allOf: - $ref: '#/components/schemas/AssistantOverrides' squadId: type: string description: 'This is the squad that will be used for the call. To use a transient squad, use `squad` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' squad: description: 'This is a squad that will be used for the call. To use an existing squad, use `squadId` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' allOf: - $ref: '#/components/schemas/CreateSquadDTO' squadOverrides: description: 'These are the overrides for the `squad` or `squadId`''s member settings and template variables. This will apply to all members of the squad.' allOf: - $ref: '#/components/schemas/AssistantOverrides' workflowId: type: string description: 'This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' workflow: description: 'This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' allOf: - $ref: '#/components/schemas/CreateWorkflowDTO' workflowOverrides: description: These are the overrides for the `workflow` or `workflowId`'s settings and template variables. allOf: - $ref: '#/components/schemas/WorkflowOverrides' phoneNumberId: type: string description: 'This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead. Only 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. Only 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. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.' customer: description: 'This is the customer that will be called. To call an existing customer, use `customerId` instead. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.' allOf: - $ref: '#/components/schemas/CreateCustomerDTO' StructuredOutputFilterDTO: type: object properties: eq: type: string description: Equal to neq: type: string description: Not equal to gt: type: string description: Greater than gte: type: string description: Greater than or equal to lt: type: string description: Less than lte: type: string description: Less than or equal to contains: type: string description: Contains notContains: type: string description: Not contains 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. Only relevant for `outboundPhoneCall`. To call a single customer, use `customer` instead.' type: array items: $ref: '#/components/schemas/CreateCustomerDTO' name: type: string description: This is the name of the call. This is just for your own reference. maxLength: 40 schedulePlan: description: This is the schedule plan of the call. allOf: - $ref: '#/components/schemas/SchedulePlan' transport: type: object description: This is the transport of the call. assistantId: type: string description: 'This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead. To start a call with: - Assistant, use `assistantId` or `assistant` - Squad, use `squadId` or `squad` - Workflow, use `workflowId` or `workflow`' assistant: description: 'This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead. To start a call with: - Assistant, use `assistant` - Squad, use `squad` - Workflow, use `workflow`' allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: These are the overrides for the `assistant` or `assistantId`'s settings and template variables. allOf: - $ref: '#/components/schemas/AssistantOverrides' squadId: type: string description: 'This is the squad that will be used for the call. To use a transient squad, use `squad` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' squad: description: 'This is a squad that will be used for the call. To use an existing squad, use `squadId` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' allOf: - $ref: '#/components/schemas/CreateSquadDTO' squadOverrides: description: 'These are the overrides for the `squad` or `squadId`''s member settings and template variables. This will apply to all members of the squad.' allOf: - $ref: '#/components/schemas/AssistantOverrides' workflowId: type: string description: 'This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' workflow: description: 'This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' allOf: - $ref: '#/components/schemas/CreateWorkflowDTO' workflowOverrides: description: These are the overrides for the `workflow` or `workflowId`'s settings and template variables. allOf: - $ref: '#/components/schemas/WorkflowOverrides' phoneNumberId: type: string description: 'This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead. Only 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. Only 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. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.' customer: description: 'This is the customer that will be called. To call an existing customer, use `customerId` instead. Only relevant for `outboundPhoneCall` and `inboundPhoneCall` type.' allOf: - $ref: '#/components/schemas/CreateCustomerDTO' CreateWebCallDTO: type: object properties: roomDeleteOnUserLeaveEnabled: type: boolean default: true assistantId: type: string description: 'This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead. To start a call with: - Assistant, use `assistantId` or `assistant` - Squad, use `squadId` or `squad` - Workflow, use `workflowId` or `workflow`' assistant: description: 'This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead. To start a call with: - Assistant, use `assistant` - Squad, use `squad` - Workflow, use `workflow`' allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: These are the overrides for the `assistant` or `assistantId`'s settings and template variables. allOf: - $ref: '#/components/schemas/AssistantOverrides' squadId: type: string description: 'This is the squad that will be used for the call. To use a transient squad, use `squad` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' squad: description: 'This is a squad that will be used for the call. To use an existing squad, use `squadId` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' allOf: - $ref: '#/components/schemas/CreateSquadDTO' squadOverrides: description: 'These are the overrides for the `squad` or `squadId`''s member settings and template variables. This will apply to all members of the squad.' allOf: - $ref: '#/components/schemas/AssistantOverrides' workflowId: type: string description: 'This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' workflow: description: 'This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' allOf: - $ref: '#/components/schemas/CreateWorkflowDTO' workflowOverrides: description: These are the overrides for the `workflow` or `workflowId`'s settings and template variables. allOf: - $ref: '#/components/schemas/WorkflowOverrides' UpdateCallDTO: type: object properties: name: type: string description: This is the name of the call. This is just for your own reference. maxLength: 40 DeleteCallDTO: type: object properties: ids: description: 'These are the Call IDs to be bulk deleted. If provided, the call ID if any in the request query will be ignored When requesting a bulk delete, updates when a call is deleted will be sent as a webhook to the server URL configured in the Org settings. It may take up to a few hours to complete the bulk delete, and will be asynchronous.' type: array items: type: string DeveloperMessage: type: object properties: role: type: string description: This is the role of the message author default: developer enum: - developer content: type: string description: This is the content of the developer message maxLength: 10000 name: type: string description: This is an optional name for the participant maxLength: 40 metadata: type: object description: This is an optional metadata for the message required: - role - content SystemMessage: type: object properties: role: type: string description: The role of the system in the conversation. message: type: string description: The message content from the system. time: type: number description: The timestamp when the message was sent. secondsFromStart: type: number description: The number of seconds from the start of the conversation. required: - role - message - time - secondsFromStart UserMessage: type: object properties: role: type: string description: The role of the user in the conversation. message: type: string description: The message content from the user. time: type: number description: The timestamp when the message was sent. endTime: type: number description: The timestamp when the message ended. secondsFromStart: type: number description: The number of seconds from the start of the conversation. duration: type: number description: The duration of the message in seconds. isFiltered: type: boolean description: Indicates if the message was filtered for security reasons. detectedThreats: description: List of detected security threats if the message was filtered. type: array items: type: string originalMessage: type: string description: The original message before filtering (only included if content was filtered). metadata: type: object description: The metadata associated with the message. Currently used to store the transcriber's word level confidence. speakerLabel: type: string description: Stable speaker label for diarized user speakers (e.g., "Speaker 1"). required: - role - message - time - endTime - secondsFromStart ToolCallFunction: type: object properties: arguments: type: string description: This is the arguments to call the function with name: type: string description: This is the name of the function to call maxLength: 80 required: - arguments - name ToolCall: type: object properties: id: type: string description: This is the ID of the tool call type: type: string description: This is the type of tool function: description: This is the function that was called allOf: - $ref: '#/components/schemas/ToolCallFunction' required: - id - type - function AssistantMessage: type: object properties: role: type: string description: This is the role of the message author default: assistant enum: - assistant content: type: string description: This is the content of the assistant message maxLength: 10000 refusal: type: string description: This is the refusal message generated by the model maxLength: 10000 tool_calls: description: This is the tool calls generated by the model type: array items: $ref: '#/components/schemas/ToolCall' name: type: string description: This is an optional name for the participant maxLength: 40 metadata: type: object description: This is an optional metadata for the message required: - role ToolMessage: type: object properties: role: type: string description: This is the role of the message author default: tool enum: - tool content: type: string description: This is the content of the tool message maxLength: 10000 tool_call_id: type: string description: This is the ID of the tool call this message is responding to name: type: string description: This is an optional name for the participant maxLength: 40 metadata: type: object description: This is an optional metadata for the message required: - role - content - tool_call_id FunctionCall: type: object properties: arguments: type: string description: This is the arguments to call the function with name: type: string description: This is the name of the function to call maxLength: 40 required: - arguments - name Chat: type: object properties: assistantId: type: string description: This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead. assistant: description: This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: 'These are the variable values that will be used to replace template variables in the assistant messages. Only variable substitution is supported in chat contexts - other assistant properties cannot be overridden.' allOf: - $ref: '#/components/schemas/AssistantOverrides' squadId: type: string description: This is the squad that will be used for the chat. To use a transient squad, use `squad` instead. squad: description: This is the squad that will be used for the chat. To use an existing squad, use `squadId` instead. allOf: - $ref: '#/components/schemas/CreateSquadDTO' name: type: string description: This is the name of the chat. This is just for your own reference. maxLength: 40 sessionId: type: string description: 'This is the ID of the session that will be used for the chat. Mutually exclusive with previousChatId.' input: description: 'This is the input text for the chat. Can be a string or an array of chat messages.' oneOf: - type: string title: String - type: array items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage title: MessageArray examples: - Hello, how can you help me? - - role: user content: Hello, how can you help me? stream: type: boolean description: 'This is a flag that determines whether the response should be streamed. When true, the response will be sent as chunks of text.' default: false previousChatId: type: string description: 'This is the ID of the chat that will be used as context for the new chat. The messages from the previous chat will be used as context. Mutually exclusive with sessionId.' id: type: string description: This is the unique identifier for the chat. orgId: type: string description: This is the unique identifier for the org that this chat belongs to. messages: type: array description: 'This is an array of messages used as context for the chat. Used to provide message history for multi-turn conversations.' items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage output: type: array description: This is the output messages generated by the system in response to the input. items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the chat was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the chat was last updated. costs: type: array description: These are the costs of individual components of the chat in USD. items: oneOf: - $ref: '#/components/schemas/ModelCost' title: ModelCost - $ref: '#/components/schemas/ChatCost' title: ChatCost cost: type: number description: This is the cost of the chat in USD. required: - id - orgId - createdAt - updatedAt TwilioSMSChatTransport: type: object properties: conversationType: type: string description: This is the conversation type of the call (ie, voice or chat). default: chat enum: - chat phoneNumberId: type: string description: 'This is the phone number that will be used to send the SMS. If provided, will create a new session. If not provided, uses existing session''s phoneNumberId. The phone number must have SMS enabled and belong to your organization.' customer: description: 'This is the customer who will receive the SMS. If provided, will create a new session. If not provided, uses existing session''s customer.' allOf: - $ref: '#/components/schemas/CreateCustomerDTO' customerId: type: string description: This is the customerId of the customer who will receive the SMS. useLLMGeneratedMessageForOutbound: type: boolean description: 'Whether to use LLM-generated messages for outbound SMS. When true (default), input is processed by the assistant for a response. When false, the input text is forwarded directly as the SMS message without LLM processing. Useful for sending pre-defined messages or notifications.' default: true type: type: string description: 'The type of transport to use for sending the chat response. Currently supports ''twilio.sms'' for SMS delivery via Twilio.' enum: - twilio.sms required: - type CreateChatDTO: type: object properties: assistantId: type: string description: This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead. assistant: description: This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: 'These are the variable values that will be used to replace template variables in the assistant messages. Only variable substitution is supported in chat contexts - other assistant properties cannot be overridden.' allOf: - $ref: '#/components/schemas/AssistantOverrides' squadId: type: string description: This is the squad that will be used for the chat. To use a transient squad, use `squad` instead. squad: description: This is the squad that will be used for the chat. To use an existing squad, use `squadId` instead. allOf: - $ref: '#/components/schemas/CreateSquadDTO' name: type: string description: This is the name of the chat. This is just for your own reference. maxLength: 40 sessionId: type: string description: 'This is the ID of the session that will be used for the chat. Mutually exclusive with previousChatId.' input: description: 'This is the input text for the chat. Can be a string or an array of chat messages. This field is REQUIRED for chat creation.' oneOf: - type: string title: String - type: array items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage title: MessageArray examples: - Hello, how can you help me? - - role: user content: Hello, how can you help me? stream: type: boolean description: 'This is a flag that determines whether the response should be streamed. When true, the response will be sent as chunks of text.' default: false previousChatId: type: string description: 'This is the ID of the chat that will be used as context for the new chat. The messages from the previous chat will be used as context. Mutually exclusive with sessionId.' transport: description: 'This is used to send the chat through a transport like SMS. If transport.phoneNumberId and transport.customer are provided, creates a new session. If sessionId is provided without transport fields, uses existing session data. Cannot specify both sessionId and transport fields (phoneNumberId/customer) together.' allOf: - $ref: '#/components/schemas/TwilioSMSChatTransport' required: - input GetChatPaginatedDTO: type: object properties: id: type: string description: This is the unique identifier for the chat to filter by. assistantId: type: string description: This is the unique identifier for the assistant that will be used for the chat. assistantIdAny: type: string description: Filter by multiple assistant IDs. Provide as comma-separated values. example: assistant-1,assistant-2,assistant-3 squadId: type: string description: This is the unique identifier for the squad that will be used for the chat. sessionId: type: string description: This is the unique identifier for the session that will be used for the chat. previousChatId: type: string description: This is the unique identifier for the previous chat to filter by. page: type: number description: This is the page number to return. Defaults to 1. minimum: 1 sortOrder: type: string description: This is the sort order for pagination. Defaults to 'DESC'. enum: - ASC - DESC sortBy: type: string description: This is the column to sort by. Defaults to 'createdAt'. enum: - createdAt - duration - cost limit: type: number description: This is the maximum number of items to return. Defaults to 100. minimum: 0 maximum: 1000 createdAtGt: format: date-time type: string description: This will return items where the createdAt is greater than the specified value. createdAtLt: format: date-time type: string description: This will return items where the createdAt is less than the specified value. createdAtGe: format: date-time type: string description: This will return items where the createdAt is greater than or equal to the specified value. createdAtLe: format: date-time type: string description: This will return items where the createdAt is less than or equal to the specified value. updatedAtGt: format: date-time type: string description: This will return items where the updatedAt is greater than the specified value. updatedAtLt: format: date-time type: string description: This will return items where the updatedAt is less than the specified value. updatedAtGe: format: date-time type: string description: This will return items where the updatedAt is greater than or equal to the specified value. updatedAtLe: format: date-time type: string description: This will return items where the updatedAt is less than or equal to the specified value. ChatPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/Chat' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata CreateChatStreamResponse: type: object properties: id: type: string description: This is the unique identifier for the streaming response. sessionId: type: string description: 'This is the ID of the session that will be used for the chat. Helps track conversation context across multiple messages.' path: type: string description: 'This is the path to the content being updated. Format: `chat.output[{contentIndex}].content` where contentIndex identifies the specific content item.' example: chat.output[0].content delta: type: string description: This is the incremental content chunk being streamed. required: - id - path - delta OpenAIResponsesRequest: type: object properties: assistantId: type: string description: This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead. assistant: description: This is the assistant that will be used for the chat. To use an existing assistant, use `assistantId` instead. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: 'These are the variable values that will be used to replace template variables in the assistant messages. Only variable substitution is supported in chat contexts - other assistant properties cannot be overridden.' allOf: - $ref: '#/components/schemas/AssistantOverrides' squadId: type: string description: This is the squad that will be used for the chat. To use a transient squad, use `squad` instead. squad: description: This is the squad that will be used for the chat. To use an existing squad, use `squadId` instead. allOf: - $ref: '#/components/schemas/CreateSquadDTO' name: type: string description: This is the name of the chat. This is just for your own reference. maxLength: 40 sessionId: type: string description: 'This is the ID of the session that will be used for the chat. Mutually exclusive with previousChatId.' input: description: 'This is the input text for the chat. Can be a string or an array of chat messages. This field is REQUIRED for chat creation.' oneOf: - type: string title: String - type: array items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage title: MessageArray examples: - Hello, how can you help me? - - role: user content: Hello, how can you help me? stream: type: boolean description: Whether to stream the response or not. default: true previousChatId: type: string description: 'This is the ID of the chat that will be used as context for the new chat. The messages from the previous chat will be used as context. Mutually exclusive with sessionId.' transport: description: 'This is used to send the chat through a transport like SMS. If transport.phoneNumberId and transport.customer are provided, creates a new session. If sessionId is provided without transport fields, uses existing session data. Cannot specify both sessionId and transport fields (phoneNumberId/customer) together.' allOf: - $ref: '#/components/schemas/TwilioSMSChatTransport' required: - input ChatAssistantOverrides: type: object properties: variableValues: type: object description: Variable values for template substitution example: name: John company: ACME Corp CreateWebCustomerDTO: type: object properties: numberE164CheckEnabled: type: boolean description: 'This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `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. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)' default: true extension: type: string description: This is the extension that will be dialed after the call is answered. maxLength: 10 example: null assistantOverrides: description: 'These are the variable values that will be used to replace template variables in the assistant messages. Only variable substitution is supported in web chat - other assistant properties cannot be overridden.' allOf: - $ref: '#/components/schemas/ChatAssistantOverrides' number: type: string description: This is the number of the customer. minLength: 3 maxLength: 40 sipUri: type: string description: This is the SIP URI of the customer. name: type: string description: 'This is the name of the customer. This is just for your own reference. For SIP inbound calls, this is extracted from the `From` SIP header with format `"Display Name" `.' maxLength: 40 email: type: string description: This is the email of the customer. maxLength: 40 externalId: type: string description: This is the external ID of the customer. maxLength: 40 CreateWebChatDTO: type: object properties: assistantId: type: string description: This is the assistant ID to use for this chat. To use a transient assistant, use `assistant` instead. assistant: description: This is the transient assistant configuration for this chat. To use an existing assistant, use `assistantId` instead. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' sessionId: type: string description: 'This is the ID of the session that will be used for the chat. If provided, the conversation will continue from the previous state. If not provided or expired, a new session will be created.' sessionExpirationSeconds: type: number description: 'This is the expiration time for the session. This can ONLY be set if starting a new chat and therefore a new session is created. If session already exists, this will be ignored and NOT be updated for the existing session. Use PATCH /session/:id to update the session expiration time.' minimum: 60 maximum: 2592000 assistantOverrides: description: 'These are the variable values that will be used to replace template variables in the assistant messages. Only variable substitution is supported in web chat - other assistant properties cannot be overridden.' allOf: - $ref: '#/components/schemas/ChatAssistantOverrides' customer: description: 'This is the customer information for the chat. Used to automatically manage sessions for repeat customers.' allOf: - $ref: '#/components/schemas/CreateWebCustomerDTO' input: description: 'This is the input text for the chat. Can be a string or an array of chat messages.' oneOf: - type: string title: String - type: array items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage title: MessageArray examples: - Hello, how can you help me? - - role: user content: Hello, how can you help me? stream: type: boolean description: 'This is a flag that determines whether the response should be streamed. When true, the response will be sent as chunks of text.' default: false sessionEnd: type: boolean description: 'This is a flag to indicate end of session. When true, the session will be marked as completed and the chat will be ended. Used to end session to send End-of-session report to the customer. When flag is set to true, any messages sent will not be processed and session will directly be marked as completed.' default: false required: - input WebChat: type: object properties: id: type: string description: This is the unique identifier for the chat. sessionId: type: string description: This is the ID of the session for the chat. Send it in the next chat request to continue the conversation. output: type: array description: This is the output messages generated by the system in response to the input. items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage required: - id - output OpenAIWebChatRequest: type: object properties: assistantId: type: string description: This is the assistant ID to use for this chat. To use a transient assistant, use `assistant` instead. assistant: description: This is the transient assistant configuration for this chat. To use an existing assistant, use `assistantId` instead. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' sessionId: type: string description: 'This is the ID of the session that will be used for the chat. If provided, the conversation will continue from the previous state. If not provided or expired, a new session will be created.' sessionExpirationSeconds: type: number description: 'This is the expiration time for the session. This can ONLY be set if starting a new chat and therefore a new session is created. If session already exists, this will be ignored and NOT be updated for the existing session. Use PATCH /session/:id to update the session expiration time.' minimum: 60 maximum: 2592000 assistantOverrides: description: 'These are the variable values that will be used to replace template variables in the assistant messages. Only variable substitution is supported in web chat - other assistant properties cannot be overridden.' allOf: - $ref: '#/components/schemas/ChatAssistantOverrides' customer: description: 'This is the customer information for the chat. Used to automatically manage sessions for repeat customers.' allOf: - $ref: '#/components/schemas/CreateWebCustomerDTO' input: description: 'This is the input text for the chat. Can be a string or an array of chat messages.' oneOf: - type: string title: String - type: array items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage title: MessageArray examples: - Hello, how can you help me? - - role: user content: Hello, how can you help me? stream: type: boolean description: Whether to stream the response or not. default: true sessionEnd: type: boolean description: 'This is a flag to indicate end of session. When true, the session will be marked as completed and the chat will be ended. Used to end session to send End-of-session report to the customer. When flag is set to true, any messages sent will not be processed and session will directly be marked as completed.' default: false required: - input ExportChatDTO: type: object properties: id: type: string description: This is the unique identifier for the chat to filter by. assistantId: type: string description: This is the unique identifier for the assistant that will be used for the chat. assistantIdAny: type: string description: Filter by multiple assistant IDs. Provide as comma-separated values. example: assistant-1,assistant-2,assistant-3 squadId: type: string description: This is the unique identifier for the squad that will be used for the chat. sessionId: type: string description: This is the unique identifier for the session that will be used for the chat. previousChatId: type: string description: This is the unique identifier for the previous chat to filter by. columns: type: string description: Columns to include in the CSV export enum: - id - assistantId - squadId - sessionId - previousChatId - cost - messages - output - createdAt - updatedAt default: - id - assistantId - squadId - sessionId - previousChatId - cost - messages - output - createdAt - updatedAt email: type: string description: 'This is the email address to send the export to. Required if userId is not available in the request context.' format: type: string description: 'This is the format of the export. @default csv' enum: - csv - json default: csv page: type: number description: This is the page number to return. Defaults to 1. minimum: 1 sortOrder: type: string description: This is the sort order for pagination. Defaults to 'DESC'. enum: - ASC - DESC sortBy: type: string description: This is the column to sort by. Defaults to 'createdAt'. enum: - createdAt - duration - cost limit: type: number description: This is the maximum number of items to return. Defaults to 100. minimum: 0 maximum: 1000 createdAtGt: format: date-time type: string description: This will return items where the createdAt is greater than the specified value. createdAtLt: format: date-time type: string description: This will return items where the createdAt is less than the specified value. createdAtGe: format: date-time type: string description: This will return items where the createdAt is greater than or equal to the specified value. createdAtLe: format: date-time type: string description: This will return items where the createdAt is less than or equal to the specified value. updatedAtGt: format: date-time type: string description: This will return items where the updatedAt is greater than the specified value. updatedAtLt: format: date-time type: string description: This will return items where the updatedAt is less than the specified value. updatedAtGe: format: date-time type: string description: This will return items where the updatedAt is greater than or equal to the specified value. updatedAtLe: format: date-time type: string description: This will return items where the updatedAt is less than or equal to the specified value. ResponseOutputText: type: object properties: annotations: default: [] description: Annotations in the text output type: array items: type: object text: type: string description: The text output from the model type: type: string default: output_text description: The type of the output text enum: - output_text required: - annotations - text - type ResponseOutputMessage: type: object properties: id: type: string description: The unique ID of the output message content: description: Content of the output message type: array items: $ref: '#/components/schemas/ResponseOutputText' role: type: string default: assistant description: The role of the output message enum: - assistant status: type: string description: The status of the message enum: - in_progress - completed - incomplete type: type: string default: message description: The type of the output message enum: - message required: - id - content - role - status - type ResponseObject: type: object properties: id: type: string description: Unique identifier for this Response object: type: string default: response description: The object type enum: - response created_at: type: number description: Unix timestamp (in seconds) of when this Response was created status: type: string description: Status of the response enum: - completed - failed - in_progress - incomplete error: type: string nullable: true default: null description: Error message if the response failed output: description: Output messages from the model type: array items: $ref: '#/components/schemas/ResponseOutputMessage' required: - id - object - created_at - status - output ResponseTextDeltaEvent: type: object properties: content_index: type: number description: Index of the content part delta: type: string description: Text delta being added item_id: type: string description: ID of the output item output_index: type: number description: Index of the output item type: type: string default: response.output_text.delta description: Event type enum: - response.output_text.delta required: - content_index - delta - item_id - output_index - type ResponseTextDoneEvent: type: object properties: content_index: type: number description: Index of the content part item_id: type: string description: ID of the output item output_index: type: number description: Index of the output item text: type: string description: Complete text content type: type: string default: response.output_text.done description: Event type enum: - response.output_text.done required: - content_index - item_id - output_index - text - type ResponseCompletedEvent: type: object properties: response: description: The completed response allOf: - $ref: '#/components/schemas/ResponseObject' type: type: string default: response.completed description: Event type enum: - response.completed required: - response - type ResponseErrorEvent: type: object properties: type: type: string default: error description: Event type enum: - error code: type: string description: Error code example: ERR_SOMETHING message: type: string description: Error message example: Something went wrong param: type: string nullable: true description: Parameter that caused the error sequence_number: type: number description: Sequence number of the event example: 1 required: - type - code - message - sequence_number DialPlanEntry: type: object properties: phoneNumberId: type: string description: The phone number ID to use for calling the customers in this entry. customers: description: The list of customers to call using this phone number. type: array items: $ref: '#/components/schemas/CreateCustomerDTO' required: - phoneNumberId - customers CreateCampaignDTO: type: object properties: name: type: string description: This is the name of the campaign. This is just for your own reference. example: Q2 Sales Campaign assistantId: type: string description: 'This is the assistant ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used.' workflowId: type: string description: 'This is the workflow ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used.' squadId: type: string description: 'This is the squad ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used.' phoneNumberId: type: string description: 'This is the phone number ID that will be used for the campaign calls. Required if dialPlan is not provided. Note: phoneNumberId and dialPlan are mutually exclusive.' dialPlan: description: 'This is a list of dial entries, each specifying a phone number and the customers to call using that number. Use this when you want different phone numbers to call different sets of customers. Note: phoneNumberId and dialPlan are mutually exclusive.' type: array items: $ref: '#/components/schemas/DialPlanEntry' schedulePlan: description: "This is the schedule plan for the campaign. Calls will start\ \ at startedAt and continue until your organization\u2019s concurrency\ \ limit is reached. Any remaining calls will be retried for up to one\ \ hour as capacity becomes available. After that hour or after latestAt,\ \ whichever comes first, any calls that couldn\u2019t be placed won\u2019\ t be retried." allOf: - $ref: '#/components/schemas/SchedulePlan' customers: description: These are the customers that will be called in the campaign. Required if dialPlan is not provided. type: array items: $ref: '#/components/schemas/CreateCustomerDTO' required: - name Campaign: type: object properties: status: type: string description: This is the status of the campaign. enum: - scheduled - in-progress - ended endedReason: type: string description: This is the explanation for how the campaign ended. enum: - campaign.scheduled.ended-by-user - campaign.in-progress.ended-by-user - campaign.ended.success name: type: string description: This is the name of the campaign. This is just for your own reference. example: Q2 Sales Campaign assistantId: type: string description: 'This is the assistant ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used.' workflowId: type: string description: 'This is the workflow ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used.' squadId: type: string description: 'This is the squad ID that will be used for the campaign calls. Note: Only one of assistantId, workflowId, or squadId can be used.' phoneNumberId: type: string description: 'This is the phone number ID that will be used for the campaign calls. Required if dialPlan is not provided. Note: phoneNumberId and dialPlan are mutually exclusive.' dialPlan: description: 'This is a list of dial entries, each specifying a phone number and the customers to call using that number. Use this when you want different phone numbers to call different sets of customers. Note: phoneNumberId and dialPlan are mutually exclusive.' type: array items: $ref: '#/components/schemas/DialPlanEntry' schedulePlan: description: "This is the schedule plan for the campaign. Calls will start\ \ at startedAt and continue until your organization\u2019s concurrency\ \ limit is reached. Any remaining calls will be retried for up to one\ \ hour as capacity becomes available. After that hour or after latestAt,\ \ whichever comes first, any calls that couldn\u2019t be placed won\u2019\ t be retried." allOf: - $ref: '#/components/schemas/SchedulePlan' customers: description: These are the customers that will be called in the campaign. Required if dialPlan is not provided. type: array items: $ref: '#/components/schemas/CreateCustomerDTO' id: type: string description: This is the unique identifier for the campaign. orgId: type: string description: This is the unique identifier for the org that this campaign belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the campaign was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the campaign was last updated. calls: type: object description: This is a map of call IDs to campaign call details. callsCounterScheduled: type: number description: This is the number of calls that have been scheduled. callsCounterQueued: type: number description: This is the number of calls that have been queued. callsCounterInProgress: type: number description: This is the number of calls that have been in progress. callsCounterEndedVoicemail: type: number description: This is the number of calls whose ended reason is 'voicemail'. callsCounterEnded: type: number description: This is the number of calls that have ended. required: - status - name - id - orgId - createdAt - updatedAt - calls - callsCounterScheduled - callsCounterQueued - callsCounterInProgress - callsCounterEndedVoicemail - callsCounterEnded CampaignPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/Campaign' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata UpdateCampaignDTO: type: object properties: name: type: string description: This is the name of the campaign. This is just for your own reference. assistantId: type: string description: 'This is the assistant ID that will be used for the campaign calls. Can only be updated if campaign is not in progress or has ended.' workflowId: type: string description: 'This is the workflow ID that will be used for the campaign calls. Can only be updated if campaign is not in progress or has ended.' squadId: type: string description: 'This is the squad ID that will be used for the campaign calls. Can only be updated if campaign is not in progress or has ended.' phoneNumberId: type: string description: 'This is the phone number ID that will be used for the campaign calls. Can only be updated if campaign is not in progress or has ended. Note: `phoneNumberId` and `dialPlan` are mutually exclusive.' dialPlan: description: 'This is a list of dial entries, each specifying a phone number and the customers to call using that number. Can only be updated if campaign is not in progress or has ended. Note: phoneNumberId and dialPlan are mutually exclusive.' type: array items: $ref: '#/components/schemas/DialPlanEntry' schedulePlan: description: 'This is the schedule plan for the campaign. Can only be updated if campaign is not in progress or has ended.' allOf: - $ref: '#/components/schemas/SchedulePlan' status: type: string description: 'This is the status of the campaign. Can only be updated to ''ended'' if you want to end the campaign. When set to ''ended'', it will delete all scheduled calls. Calls in progress will be allowed to complete.' enum: - ended RelayTargetAssistant: type: object properties: type: type: string enum: - assistant description: The type of relay target assistantId: type: string description: The unique identifier of the assistant assistantName: type: string description: The name of the assistant required: - type RelayTargetSquad: type: object properties: type: type: string enum: - squad description: The type of relay target squadId: type: string description: The unique identifier of the squad squadName: type: string description: The name of the squad required: - type RelayTargetOptions: type: object properties: type: type: string enum: - assistant - squad required: - type RelayCommandSay: type: object properties: type: type: string enum: - say description: The type of relay command content: type: string description: The content for the assistant to speak required: - type - content RelayCommandNote: type: object properties: type: type: string enum: - message.add description: The type of relay command content: type: string description: The note content to add to the conversation required: - type - content RelayCommandOptions: type: object properties: type: type: string enum: - say - message.add required: - type RelayRequest: type: object properties: source: type: string description: The source identifier of the relay request target: oneOf: - $ref: '#/components/schemas/RelayTargetAssistant' - $ref: '#/components/schemas/RelayTargetSquad' description: The target assistant or squad to relay the commands to customerId: type: string description: The unique identifier of the customer commands: type: array items: oneOf: - $ref: '#/components/schemas/RelayCommandSay' - $ref: '#/components/schemas/RelayCommandNote' description: The list of commands to relay to the target required: - source - target - customerId - commands RelayResponse: type: object properties: status: type: string enum: - deliveredLive - deliveredHeadless - failed description: The status of the relay request callId: type: string description: The unique identifier of the call, if delivered to a live call sessionId: type: string description: The unique identifier of the session, if delivered to a headless session chatId: type: string required: - status Session: type: object properties: id: type: string description: This is the unique identifier for the session. orgId: type: string description: This is the unique identifier for the organization that owns this session. createdAt: format: date-time type: string description: This is the ISO 8601 timestamp indicating when the session was created. updatedAt: format: date-time type: string description: This is the ISO 8601 timestamp indicating when the session was last updated. cost: type: number description: This is the cost of the session in USD. costs: type: array description: These are the costs of individual components of the session in USD. items: oneOf: - $ref: '#/components/schemas/ModelCost' title: ModelCost - $ref: '#/components/schemas/AnalysisCost' title: AnalysisCost - $ref: '#/components/schemas/SessionCost' title: SessionCost name: type: string description: This is a user-defined name for the session. Maximum length is 40 characters. maxLength: 40 status: type: string description: This is the current status of the session. Can be either 'active' or 'completed'. enum: - active - completed expirationSeconds: type: number description: Session expiration time in seconds. Defaults to 24 hours (86400 seconds) if not set. minimum: 60 maximum: 2592000 example: 86400 assistantId: type: string description: This is the ID of the assistant associated with this session. Use this when referencing an existing assistant. assistant: description: 'This is the assistant configuration for this session. Use this when creating a new assistant configuration. If assistantId is provided, this will be ignored.' allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: 'These are the overrides for the assistant configuration. Use this to provide variable values and other overrides when using assistantId. Variable substitution will be applied to the assistant''s messages and other text-based fields.' allOf: - $ref: '#/components/schemas/AssistantOverrides' squadId: type: string description: This is the squad ID associated with this session. Use this when referencing an existing squad. squad: description: 'This is the squad configuration for this session. Use this when creating a new squad configuration. If squadId is provided, this will be ignored.' allOf: - $ref: '#/components/schemas/CreateSquadDTO' messages: type: array description: This is an array of chat messages in the session. items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage customer: description: This is the customer information associated with this session. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' customerId: type: string description: This is the customerId of the customer associated with this session. phoneNumberId: type: string description: This is the ID of the phone number associated with this session. phoneNumber: description: This is the phone number configuration for this session. allOf: - $ref: '#/components/schemas/ImportTwilioPhoneNumberDTO' artifact: description: 'These are the artifacts that were extracted from the session messages. They are only available after the session has completed. The artifact plan from the assistant or active assistant of squad is used to generate the artifact. Currently the only supported fields of assistant artifact plan are: - structuredOutputIds' allOf: - $ref: '#/components/schemas/Artifact' required: - id - orgId - createdAt - updatedAt CreateSessionDTO: type: object properties: name: type: string description: This is a user-defined name for the session. Maximum length is 40 characters. maxLength: 40 status: type: string description: This is the current status of the session. Can be either 'active' or 'completed'. enum: - active - completed expirationSeconds: type: number description: Session expiration time in seconds. Defaults to 24 hours (86400 seconds) if not set. minimum: 60 maximum: 2592000 example: 86400 assistantId: type: string description: This is the ID of the assistant associated with this session. Use this when referencing an existing assistant. assistant: description: 'This is the assistant configuration for this session. Use this when creating a new assistant configuration. If assistantId is provided, this will be ignored.' allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: 'These are the overrides for the assistant configuration. Use this to provide variable values and other overrides when using assistantId. Variable substitution will be applied to the assistant''s messages and other text-based fields.' allOf: - $ref: '#/components/schemas/AssistantOverrides' squadId: type: string description: This is the squad ID associated with this session. Use this when referencing an existing squad. squad: description: 'This is the squad configuration for this session. Use this when creating a new squad configuration. If squadId is provided, this will be ignored.' allOf: - $ref: '#/components/schemas/CreateSquadDTO' messages: type: array description: This is an array of chat messages in the session. items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage customer: description: This is the customer information associated with this session. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' customerId: type: string description: This is the customerId of the customer associated with this session. phoneNumberId: type: string description: This is the ID of the phone number associated with this session. phoneNumber: description: This is the phone number configuration for this session. allOf: - $ref: '#/components/schemas/ImportTwilioPhoneNumberDTO' UpdateSessionDTO: type: object properties: name: type: string description: This is the new name for the session. Maximum length is 40 characters. maxLength: 40 status: type: string description: This is the new status for the session. enum: - active - completed expirationSeconds: type: number description: Session expiration time in seconds. Defaults to 24 hours (86400 seconds) if not set. minimum: 60 maximum: 2592000 example: 86400 messages: type: array description: This is the updated array of chat messages. items: oneOf: - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/AssistantMessage' title: AssistantMessage - $ref: '#/components/schemas/ToolMessage' title: ToolMessage - $ref: '#/components/schemas/DeveloperMessage' title: DeveloperMessage GetSessionPaginatedDTO: type: object properties: id: type: string description: This is the unique identifier for the session to filter by. name: type: string description: This is the name of the session to filter by. assistantId: type: string description: This is the ID of the assistant to filter sessions by. assistantIdAny: type: string description: Filter by multiple assistant IDs. Provide as comma-separated values. example: assistant-1,assistant-2,assistant-3 squadId: type: string description: This is the ID of the squad to filter sessions by. workflowId: type: string description: This is the ID of the workflow to filter sessions by. customer: description: This is the customer information to filter by. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' customerNumberAny: type: string description: Filter by any of the specified customer phone numbers (comma-separated). example: +1234567890,+0987654321 phoneNumberId: type: string description: This will return sessions with the specified phoneNumberId. phoneNumberIdAny: description: This will return sessions with any of the specified phoneNumberIds. type: array items: type: string page: type: number description: This is the page number to return. Defaults to 1. minimum: 1 sortOrder: type: string description: This is the sort order for pagination. Defaults to 'DESC'. enum: - ASC - DESC sortBy: type: string description: This is the column to sort by. Defaults to 'createdAt'. enum: - createdAt - duration - cost limit: type: number description: This is the maximum number of items to return. Defaults to 100. minimum: 0 maximum: 1000 createdAtGt: format: date-time type: string description: This will return items where the createdAt is greater than the specified value. createdAtLt: format: date-time type: string description: This will return items where the createdAt is less than the specified value. createdAtGe: format: date-time type: string description: This will return items where the createdAt is greater than or equal to the specified value. createdAtLe: format: date-time type: string description: This will return items where the createdAt is less than or equal to the specified value. updatedAtGt: format: date-time type: string description: This will return items where the updatedAt is greater than the specified value. updatedAtLt: format: date-time type: string description: This will return items where the updatedAt is less than the specified value. updatedAtGe: format: date-time type: string description: This will return items where the updatedAt is greater than or equal to the specified value. updatedAtLe: format: date-time type: string description: This will return items where the updatedAt is less than or equal to the specified value. SessionPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/Session' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata ExportSessionDTO: type: object properties: id: type: string description: This is the unique identifier for the session to filter by. name: type: string description: This is the name of the session to filter by. assistantId: type: string description: This is the ID of the assistant to filter sessions by. assistantIdAny: type: string description: Filter by multiple assistant IDs. Provide as comma-separated values. example: assistant-1,assistant-2,assistant-3 squadId: type: string description: This is the ID of the squad to filter sessions by. workflowId: type: string description: This is the ID of the workflow to filter sessions by. customer: description: This is the customer information to filter by. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' customerNumberAny: type: string description: Filter by any of the specified customer phone numbers (comma-separated). example: +1234567890,+0987654321 columns: type: string description: Columns to include in the CSV export enum: - id - name - status - assistantId - squadId - customerName - customerNumber - phoneNumberId - cost - messages - createdAt - updatedAt default: - id - name - status - assistantId - squadId - customerName - customerNumber - phoneNumberId - cost - messages - createdAt - updatedAt email: type: string description: 'This is the email address to send the export to. Required if userId is not available in the request context.' format: type: string description: 'This is the format of the export. @default csv' enum: - csv - json default: csv phoneNumberId: type: string description: This will return sessions with the specified phoneNumberId. phoneNumberIdAny: description: This will return sessions with any of the specified phoneNumberIds. type: array items: type: string page: type: number description: This is the page number to return. Defaults to 1. minimum: 1 sortOrder: type: string description: This is the sort order for pagination. Defaults to 'DESC'. enum: - ASC - DESC sortBy: type: string description: This is the column to sort by. Defaults to 'createdAt'. enum: - createdAt - duration - cost limit: type: number description: This is the maximum number of items to return. Defaults to 100. minimum: 0 maximum: 1000 createdAtGt: format: date-time type: string description: This will return items where the createdAt is greater than the specified value. createdAtLt: format: date-time type: string description: This will return items where the createdAt is less than the specified value. createdAtGe: format: date-time type: string description: This will return items where the createdAt is greater than or equal to the specified value. createdAtLe: format: date-time type: string description: This will return items where the createdAt is less than or equal to the specified value. updatedAtGt: format: date-time type: string description: This will return items where the updatedAt is greater than the specified value. updatedAtLt: format: date-time type: string description: This will return items where the updatedAt is less than the specified value. updatedAtGe: format: date-time type: string description: This will return items where the updatedAt is greater than or equal to the specified value. updatedAtLe: format: date-time type: string description: This will return items where the updatedAt is less than or equal to the specified value. ByoPhoneNumber: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding provider: type: string description: This is to bring your own phone numbers from your own SIP trunks or Carriers. enum: - byo-phone-number numberE164CheckEnabled: type: boolean description: 'This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `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. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)' default: true id: type: string description: This is the unique identifier for the phone number. orgId: type: string description: This is the unique identifier for the org that this phone number belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the phone number was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the phone number was last updated. status: type: string description: This is the status of the phone number. enum: - active - activating - blocked name: type: string description: 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. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' number: type: string description: This is the number of the customer. minLength: 3 maxLength: 40 credentialId: type: string description: 'This is the credential of your own SIP trunk or Carrier (type `byo-sip-trunk`) which can be used to make calls to this phone number. You can add the SIP trunk or Carrier credential in the Provider Credentials page on the Dashboard to get the credentialId.' required: - provider - id - orgId - createdAt - updatedAt - credentialId TwilioPhoneNumber: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding provider: type: string description: This is to use numbers bought on Twilio. enum: - twilio smsEnabled: type: boolean description: 'Controls whether Vapi sets the messaging webhook URL on the Twilio number during import. If set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is. If `true` or omitted (default), Vapi will configure both the voice and messaging URLs. @default true' default: true id: type: string description: This is the unique identifier for the phone number. orgId: type: string description: This is the unique identifier for the org that this phone number belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the phone number was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the phone number was last updated. status: type: string description: This is the status of the phone number. enum: - active - activating - blocked twilioAuthToken: type: string description: This is the Twilio Auth Token for the phone number. twilioApiKey: type: string description: This is the Twilio API Key for the phone number. twilioApiSecret: type: string description: This is the Twilio API Secret for the phone number. name: type: string description: This is the name of the phone number. This is just for your own reference. maxLength: 40 assistantId: type: string description: 'This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' number: type: string description: These are the digits of the phone number you own on your Twilio. twilioAccountSid: type: string description: This is the Twilio Account SID for the phone number. required: - provider - id - orgId - createdAt - updatedAt - number - twilioAccountSid VonagePhoneNumber: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding provider: type: string description: This is to use numbers bought on Vonage. enum: - vonage id: type: string description: This is the unique identifier for the phone number. orgId: type: string description: This is the unique identifier for the org that this phone number belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the phone number was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the phone number was last updated. status: type: string description: This is the status of the phone number. enum: - active - activating - blocked name: type: string description: This is the name of the phone number. This is just for your own reference. maxLength: 40 assistantId: type: string description: 'This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' number: type: string description: These are the digits of the phone number you own on your Vonage. credentialId: type: string description: This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups. required: - provider - id - orgId - createdAt - updatedAt - number - credentialId SipAuthentication: type: object properties: realm: type: string description: This will be expected in the `realm` field of the `authorization` header of the SIP INVITE. Defaults to sip.vapi.ai. username: type: string description: This will be expected in the `username` field of the `authorization` header of the SIP INVITE. minLength: 20 maxLength: 40 password: type: string description: This will be expected to generate the `response` field of the `authorization` header of the SIP INVITE, through digest authentication. minLength: 20 maxLength: 40 required: - username - password VapiPhoneNumber: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding 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. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. 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 is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer. This is case-insensitive.' authentication: description: 'This enables authentication for incoming SIP INVITE requests to the `sipUri`. If not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.' allOf: - $ref: '#/components/schemas/SipAuthentication' required: - provider - id - orgId - createdAt - updatedAt TelnyxPhoneNumber: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding provider: type: string description: This is to use numbers bought on Telnyx. enum: - telnyx id: type: string description: This is the unique identifier for the phone number. orgId: type: string description: This is the unique identifier for the org that this phone number belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the phone number was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the phone number was last updated. status: type: string description: This is the status of the phone number. enum: - active - activating - blocked name: type: string description: This is the name of the phone number. This is just for your own reference. maxLength: 40 assistantId: type: string description: 'This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' number: type: string description: These are the digits of the phone number you own on your Telnyx. credentialId: type: string description: This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups. required: - provider - id - orgId - createdAt - updatedAt - number - credentialId CreateByoPhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding provider: type: string description: This is to bring your own phone numbers from your own SIP trunks or Carriers. enum: - byo-phone-number numberE164CheckEnabled: type: boolean description: 'This is the flag to toggle the E164 check for the `number` field. This is an advanced property which should be used if you know your use case requires it. Use cases: - `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. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)' default: true number: type: string description: This is the number of the customer. minLength: 3 maxLength: 40 credentialId: type: string description: 'This is the credential of your own SIP trunk or Carrier (type `byo-sip-trunk`) which can be used to make calls to this phone number. You can add the SIP trunk or Carrier credential in the Provider Credentials page on the Dashboard to get the credentialId.' name: type: string description: This is the name of the phone number. This is just for your own reference. maxLength: 40 assistantId: type: string description: 'This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' required: - provider - credentialId CreateTwilioPhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding provider: type: string description: This is to use numbers bought on Twilio. enum: - twilio smsEnabled: type: boolean description: 'Controls whether Vapi sets the messaging webhook URL on the Twilio number during import. If set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is. If `true` or omitted (default), Vapi will configure both the voice and messaging URLs. @default true' default: true number: type: string description: These are the digits of the phone number you own on your Twilio. twilioAccountSid: type: string description: This is the Twilio Account SID for the phone number. twilioAuthToken: type: string description: This is the Twilio Auth Token for the phone number. twilioApiKey: type: string description: This is the Twilio API Key for the phone number. twilioApiSecret: type: string description: This is the Twilio API Secret for the phone number. 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. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' required: - provider - number - twilioAccountSid CreateVonagePhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding provider: type: string description: This is to use numbers bought on Vonage. enum: - vonage number: type: string description: These are the digits of the phone number you own on your Vonage. credentialId: type: string description: This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups. 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. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' required: - provider - number - credentialId CreateVapiPhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding provider: type: string description: This is to create free SIP phone numbers on Vapi. enum: - vapi numberDesiredAreaCode: type: string description: This is the area code of the phone number to purchase. minLength: 3 maxLength: 3 sipUri: type: string description: 'This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer. This is case-insensitive.' authentication: description: 'This enables authentication for incoming SIP INVITE requests to the `sipUri`. If not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.' allOf: - $ref: '#/components/schemas/SipAuthentication' 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. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' required: - provider CreateTelnyxPhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding 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. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' required: - provider - number - credentialId UpdateByoPhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding 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. Use cases: - `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. - `true` (default): To allow only E164 numbers like `+14155551234`. This is standard for PSTN calls. If `false`, the `number` is still required to only contain alphanumeric characters (regex: `/^\+?[a-zA-Z0-9]+$/`). @default true (E164 check is enabled)' default: true name: type: string description: This is the name of the phone number. This is just for your own reference. maxLength: 40 assistantId: type: string description: 'This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' number: type: string description: This is the number of the customer. minLength: 3 maxLength: 40 credentialId: type: string description: 'This is the credential of your own SIP trunk or Carrier (type `byo-sip-trunk`) which can be used to make calls to this phone number. You can add the SIP trunk or Carrier credential in the Provider Credentials page on the Dashboard to get the credentialId.' UpdateTwilioPhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding smsEnabled: type: boolean description: 'Controls whether Vapi sets the messaging webhook URL on the Twilio number during import. If set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is. If `true` or omitted (default), Vapi will configure both the voice and messaging URLs. @default true' default: true name: type: string description: This is the name of the phone number. This is just for your own reference. maxLength: 40 assistantId: type: string description: 'This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' number: type: string description: These are the digits of the phone number you own on your Twilio. twilioAccountSid: type: string description: This is the Twilio Account SID for the phone number. twilioAuthToken: type: string description: This is the Twilio Auth Token for the phone number. twilioApiKey: type: string description: This is the Twilio API Key for the phone number. twilioApiSecret: type: string description: This is the Twilio API Secret for the phone number. UpdateVonagePhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding 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. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' number: type: string description: These are the digits of the phone number you own on your Vonage. credentialId: type: string description: This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups. UpdateVapiPhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding 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. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' sipUri: type: string description: 'This is the SIP URI of the phone number. You can SIP INVITE this. The assistant attached to this number will answer. This is case-insensitive.' authentication: description: 'This enables authentication for incoming SIP INVITE requests to the `sipUri`. If not set, any username/password to the 401 challenge of the SIP INVITE will be accepted.' allOf: - $ref: '#/components/schemas/SipAuthentication' UpdateTelnyxPhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding 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. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' number: type: string description: These are the digits of the phone number you own on your Telnyx. credentialId: type: string description: This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups. ImportVonagePhoneNumberDTO: type: object properties: fallbackDestination: description: 'This is the fallback destination an inbound call will be transferred to if: 1. `assistantId` is not set 2. `squadId` is not set 3. and, `assistant-request` message to the `serverUrl` fails If this is not set and above conditions are met, the inbound call is hung up with an error message.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination hooks: type: array description: This is the hooks that will be used for incoming calls to this phone number. items: oneOf: - $ref: '#/components/schemas/PhoneNumberHookCallRinging' title: PhoneNumberHookCallRinging - $ref: '#/components/schemas/PhoneNumberHookCallEnding' title: PhoneNumberHookCallEnding vonagePhoneNumber: type: string description: These are the digits of the phone number you own on your Vonage. deprecated: true credentialId: type: string description: This is the credential you added in dashboard.vapi.ai/keys. This is used to configure the number to send inbound calls to Vapi, make outbound calls and do live call updates like transfers and hangups. name: type: string description: This is the name of the phone number. This is just for your own reference. maxLength: 40 assistantId: type: string description: 'This is the assistant that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' workflowId: type: string description: 'This is the workflow that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' squadId: type: string description: 'This is the squad that will be used for incoming calls to this phone number. If neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected.' server: description: 'This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $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' - $ref: '#/components/schemas/TelnyxPhoneNumber' metadata: description: Metadata about the pagination. allOf: - $ref: '#/components/schemas/PaginationMeta' required: - results - metadata ApiRequestTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - apiRequest description: The type of tool. "apiRequest" for API request tool. method: type: string enum: - POST - GET - PUT - PATCH - DELETE timeoutSeconds: type: number description: 'This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20' minimum: 1 maximum: 300 example: 20 credentialId: type: string description: The credential ID for API request authentication example: 550e8400-e29b-41d4-a716-446655440000 encryptedPaths: type: array description: This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. items: type: string parameters: description: Static key-value pairs merged into the request body. Values support Liquid templates. type: array items: $ref: '#/components/schemas/ToolParameter' id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' name: type: string description: 'This is the name of the tool. This will be passed to the model. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 40.' maxLength: 40 pattern: /^[a-zA-Z0-9_-]{1,40}$/ description: type: string description: This is the description of the tool. This will be passed to the model. url: type: string description: This is where the request will be sent. body: description: This is the body of the request. allOf: - $ref: '#/components/schemas/JsonSchema' headers: description: These are the headers to send with the request. allOf: - $ref: '#/components/schemas/JsonSchema' backoffPlan: description: 'This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried). @default undefined (the request will not be retried)' allOf: - $ref: '#/components/schemas/BackoffPlan' variableExtractionPlan: description: "This is the plan to extract variables from the tool's response.\ \ These will be accessible during the call and stored in `call.artifact.variableValues`\ \ after the call.\n\nUsage:\n1. Use `aliases` to extract variables from\ \ the tool's response body. (Most common case)\n\n```json\n{\n \"aliases\"\ : [\n {\n \"key\": \"customerName\",\n \"value\": \"{{customer.name}}\"\ \n },\n {\n \"key\": \"customerAge\",\n \"value\": \"\ {{customer.age}}\"\n }\n ]\n}\n```\n\nThe tool response body is made\ \ available to the liquid template.\n\n2. Use `aliases` to extract variables\ \ from the tool's response body if the response is an array.\n\n```json\n\ {\n \"aliases\": [\n {\n \"key\": \"customerName\",\n \"\ value\": \"{{$[0].name}}\"\n },\n {\n \"key\": \"customerAge\"\ ,\n \"value\": \"{{$[0].age}}\"\n }\n ]\n}\n```\n\n$ is a shorthand\ \ for the tool's response body. `$[0]` is the first item in the array.\ \ `$[n]` is the nth item in the array. Note, $ is available regardless\ \ of the response body type (both object and array).\n\n3. Use `aliases`\ \ to extract variables from the tool's response headers.\n\n```json\n\ {\n \"aliases\": [\n {\n \"key\": \"customerName\",\n \"\ value\": \"{{tool.response.headers.customer-name}}\"\n },\n {\n\ \ \"key\": \"customerAge\",\n \"value\": \"{{tool.response.headers.customer-age}}\"\ \n }\n ]\n}\n```\n\n`tool.response` is made available to the liquid\ \ template. Particularly, both `tool.response.headers` and `tool.response.body`\ \ are available. Note, `tool.response` is available regardless of the\ \ response body type (both object and array).\n\n4. Use `schema` to extract\ \ a large portion of the tool's response body.\n\n4.1. If you hit example.com\ \ and it returns `{\"name\": \"John\", \"age\": 30}`, then you can specify\ \ the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\ \n },\n \"age\": {\n \"type\": \"number\"\n }\n\ \ }\n }\n}\n```\nThese will be extracted as `{{ name }}` and `{{ age\ \ }}` respectively. To emphasize, object properties are extracted as direct\ \ global variables.\n\n4.2. If you hit example.com and it returns `{\"\ name\": {\"first\": \"John\", \"last\": \"Doe\"}}`, then you can specify\ \ the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"name\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"first\": {\n \"type\"\ : \"string\"\n },\n \"last\": {\n \"type\"\ : \"string\"\n }\n }\n }\n }\n }\n}\n```\n\n\ These will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{\ \ name.last }}` will be accessible.\n\n4.3. If you hit example.com and\ \ it returns `[\"94123\", \"94124\"]`, then you can specify the schema\ \ as:\n\n```json\n{\n \"schema\": {\n \"type\": \"array\",\n \"\ title\": \"zipCodes\",\n \"items\": {\n \"type\": \"string\"\n\ \ }\n }\n}\n```\n\nThis will be extracted as `{{ zipCodes }}`. To\ \ access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1]\ \ }}`.\n\n4.4. If you hit example.com and it returns `[{\"name\": \"John\"\ , \"age\": 30, \"zipCodes\": [\"94123\", \"94124\"]}, {\"name\": \"Jane\"\ , \"age\": 25, \"zipCodes\": [\"94125\", \"94126\"]}]`, then you can specify\ \ the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"array\"\ ,\n \"title\": \"people\",\n \"items\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"name\": {\n \"type\": \"\ string\"\n },\n \"age\": {\n \"type\": \"number\"\ \n },\n \"zipCodes\": {\n \"type\": \"array\",\n\ \ \"items\": {\n \"type\": \"string\"\n }\n\ \ }\n }\n }\n }\n}\n```\n\nThis will be extracted as `{{\ \ people }}`. To access the array items, you can use `{{ people[n].name\ \ }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0]\ \ }}` and `{{ people[n].zipCodes[1] }}`.\n\nNote: Both `aliases` and `schema`\ \ can be used together." allOf: - $ref: '#/components/schemas/VariableExtractionPlan' required: - type - method - id - orgId - createdAt - updatedAt - url CodeToolEnvironmentVariable: type: object properties: name: type: string description: Name of the environment variable maxLength: 64 pattern: /^[A-Z][A-Z0-9_]*$/ example: API_KEY value: type: string description: Value of the environment variable. Supports Liquid templates. maxLength: 10000 example: '{{apiKey}}' required: - name - value CodeTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - code description: The type of tool. "code" for Code tool. async: type: boolean example: false description: "This determines if the tool is async.\n\n If async, the assistant\ \ will move forward without waiting for your server to respond. This is\ \ useful if you just want to trigger something on your server.\n\n If\ \ sync, the assistant will wait for your server to respond. This is useful\ \ if want assistant to respond with the result from your server.\n\n \ \ Defaults to synchronous (`false`)." server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' code: type: string description: TypeScript code to execute when the tool is called maxLength: 50000 environmentVariables: description: Environment variables available in code via `env` object type: array items: $ref: '#/components/schemas/CodeToolEnvironmentVariable' timeoutSeconds: type: number description: 'This is the timeout in seconds for the code execution. Defaults to 10 seconds. Maximum is 30 seconds to prevent abuse. @default 10' minimum: 1 maximum: 30 example: 10 credentialId: type: string description: Credential ID containing the Val Town API key example: 550e8400-e29b-41d4-a716-446655440000 variableExtractionPlan: description: Plan to extract variables from the tool response allOf: - $ref: '#/components/schemas/VariableExtractionPlan' id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' function: description: 'This is the function definition of the tool. For the Code tool, this defines the name, description, and parameters that the model will use to understand when and how to call this tool.' allOf: - $ref: '#/components/schemas/OpenAIFunction' required: - type - code - id - orgId - createdAt - updatedAt DtmfTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - dtmf description: The type of tool. "dtmf" for DTMF tool. sipInfoDtmfEnabled: type: boolean description: This enables sending DTMF tones via SIP INFO messages instead of RFC 2833 (RTP events). When enabled, DTMF digits will be sent using the SIP INFO method, which can be more reliable in some network configurations. Only relevant when using the `vapi.sip` transport. default: false id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt EndCallTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - endCall description: The type of tool. "endCall" for End Call tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt FunctionTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - function description: The type of tool. "function" for Function tool. async: type: boolean example: false description: "This determines if the tool is async.\n\n If async, the assistant\ \ will move forward without waiting for your server to respond. This is\ \ useful if you just want to trigger something on your server.\n\n If\ \ sync, the assistant will wait for your server to respond. This is useful\ \ if want assistant to respond with the result from your server.\n\n \ \ Defaults to synchronous (`false`)." server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' variableExtractionPlan: description: Plan to extract variables from the tool response allOf: - $ref: '#/components/schemas/VariableExtractionPlan' parameters: description: Static key-value pairs merged into the request body. Values support Liquid templates. type: array items: $ref: '#/components/schemas/ToolParameter' id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' function: description: This is the function definition of the tool. allOf: - $ref: '#/components/schemas/OpenAIFunction' required: - type - id - orgId - createdAt - updatedAt GhlTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - ghl description: The type of tool. "ghl" for GHL tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' metadata: $ref: '#/components/schemas/GhlToolMetadata' required: - type - id - orgId - createdAt - updatedAt - metadata MakeTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - make description: The type of tool. "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. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' metadata: $ref: '#/components/schemas/MakeToolMetadata' required: - type - id - orgId - createdAt - updatedAt - metadata TransferCallTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - transferCall destinations: type: array description: These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called. items: oneOf: - $ref: '#/components/schemas/TransferDestinationAssistant' title: Assistant - $ref: '#/components/schemas/TransferDestinationNumber' title: Number - $ref: '#/components/schemas/TransferDestinationSip' title: Sip id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt HandoffTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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 type of the tool. When you''re using handoff tool, we recommend adding this to your system prompt --- # System context You are part of a multi-agent system designed to make agent coordination and execution easy. Agents uses two primary abstraction: **Agents** and **Handoffs**. An agent encompasses instructions and tools and can hand off a conversation to another agent when appropriate. Handoffs are achieved by calling a handoff function, generally named `handoff_to_`. Handoffs between agents are handled seamlessly in the background; do not mention or draw attention to these handoffs in your conversation with the user. # Agent context {put your agent system prompt here} ---' enum: - handoff defaultResult: type: string description: This is the default local tool result message used when no runtime handoff result override is returned. destinations: type: array description: "These are the destinations that the call can be handed off\ \ to.\n\nUsage:\n1. Single destination\n\nUse `assistantId` to handoff\ \ the call to a saved assistant, or `assistantName` to handoff the call\ \ to an assistant in the same squad.\n\n```json\n{\n \"tools\": [\n \ \ {\n \"type\": \"handoff\",\n \"destinations\": [\n \ \ {\n \"type\": \"assistant\",\n \"assistantId\":\ \ \"assistant-123\", // or \"assistantName\": \"Assistant123\"\n \ \ \"description\": \"customer wants to be handed off to assistant-123\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n }\n ],\n }\n ]\n}\n```\n\n2. Multiple\ \ destinations\n\n2.1. Multiple Tools, Each With One Destination (OpenAI\ \ recommended)\n\n```json\n{\n \"tools\": [\n {\n \"type\": \"\ handoff\",\n \"destinations\": [\n {\n \"type\":\ \ \"assistant\",\n \"assistantId\": \"assistant-123\",\n \ \ \"description\": \"customer wants to be handed off to assistant-123\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n },\n ],\n },\n {\n \"type\": \"\ handoff\",\n \"destinations\": [\n {\n \"type\":\ \ \"assistant\",\n \"assistantId\": \"assistant-456\",\n \ \ \"description\": \"customer wants to be handed off to assistant-456\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n }\n ],\n }\n ]\n}\n```\n\n2.2. One Tool,\ \ Multiple Destinations (Anthropic recommended)\n\n```json\n{\n \"tools\"\ : [\n {\n \"type\": \"handoff\",\n \"destinations\": [\n\ \ {\n \"type\": \"assistant\",\n \"assistantId\"\ : \"assistant-123\",\n \"description\": \"customer wants to be\ \ handed off to assistant-123\",\n \"contextEngineeringPlan\"\ : {\n \"type\": \"all\"\n }\n },\n {\n\ \ \"type\": \"assistant\",\n \"assistantId\": \"assistant-456\"\ ,\n \"description\": \"customer wants to be handed off to assistant-456\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n }\n ],\n }\n ]\n}\n```\n\n3. Dynamic destination\n\ \n3.1 To determine the destination dynamically, supply a `dynamic` handoff\ \ destination type and a `server` object.\n VAPI will send a handoff-destination-request\ \ webhook to the `server.url`.\n The response from the server will\ \ be used as the destination (if valid).\n\n```json\n{\n \"tools\": [\n\ \ {\n \"type\": \"handoff\",\n \"destinations\": [\n \ \ {\n \"type\": \"dynamic\",\n \"server\": {\n \ \ \"url\": \"https://example.com\"\n }\n }\n\ \ ],\n }\n ]\n}\n```\n\n3.2. To pass custom parameters to the\ \ server, you can use the `function` object.\n\n```json\n{\n \"tools\"\ : [\n {\n \"type\": \"handoff\",\n \"destinations\": [\n\ \ {\n \"type\": \"dynamic\",\n \"server\": {\n\ \ \"url\": \"https://example.com\"\n },\n }\n\ \ ],\n \"function\": {\n \"name\": \"handoff\",\n \ \ \"description\": \"Call this function when the customer is ready\ \ to be handed off to the next assistant\",\n \"parameters\": {\n\ \ \"type\": \"object\",\n \"properties\": {\n \ \ \"destination\": {\n \"type\": \"string\",\n \ \ \"description\": \"Use dynamic when customer is ready to be\ \ handed off to the next assistant\",\n \"enum\": [\"dynamic\"\ ]\n },\n \"customerAreaCode\": {\n \ \ \"type\": \"number\",\n \"description\": \"Area code of\ \ the customer\"\n },\n \"customerIntent\": {\n\ \ \"type\": \"string\",\n \"enum\": [\"new-customer\"\ , \"existing-customer\"],\n \"description\": \"Use new-customer\ \ when customer is a new customer, existing-customer when customer is\ \ an existing customer\"\n },\n \"customerSentiment\"\ : {\n \"type\": \"string\",\n \"enum\": [\"\ positive\", \"negative\", \"neutral\"],\n \"description\"\ : \"Use positive when customer is happy, negative when customer is unhappy,\ \ neutral when customer is neutral\"\n }\n }\n \ \ }\n }\n }\n ]\n}\n```\n\nThe properties `customerAreaCode`,\ \ `customerIntent`, and `customerSentiment` will be passed to the server\ \ in the webhook request body." items: oneOf: - $ref: '#/components/schemas/HandoffDestinationAssistant' title: Assistant - $ref: '#/components/schemas/HandoffDestinationDynamic' title: Dynamic - $ref: '#/components/schemas/HandoffDestinationSquad' title: Squad id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' function: description: "This is the optional function definition that will be passed\ \ to the LLM.\nIf this is not defined, we will construct this based on\ \ the other properties.\n\nFor example, given the following tools definition:\n\ ```json\n{\n \"tools\": [\n {\n \"type\": \"handoff\",\n \ \ \"destinations\": [\n {\n \"type\": \"assistant\",\n\ \ \"assistantId\": \"assistant-123\",\n \"description\"\ : \"customer wants to be handed off to assistant-123\",\n \"\ contextEngineeringPlan\": {\n \"type\": \"all\"\n \ \ }\n },\n {\n \"type\": \"assistant\",\n \ \ \"assistantId\": \"assistant-456\",\n \"description\":\ \ \"customer wants to be handed off to assistant-456\",\n \"\ contextEngineeringPlan\": {\n \"type\": \"all\"\n \ \ }\n }\n ],\n }\n ]\n}\n```\n\nWe will construct the\ \ following function definition:\n```json\n{\n \"function\": {\n \"\ name\": \"handoff_to_assistant-123\",\n \"description\": \"\n \ \ Use this function to handoff the call to the next assistant.\n \ \ Only use it when instructions explicitly ask you to use the handoff_to_assistant\ \ function.\n DO NOT call this function unless you are instructed\ \ to do so.\n Here are the destinations you can handoff the call\ \ to:\n 1. assistant-123. When: customer wants to be handed off\ \ to assistant-123\n 2. assistant-456. When: customer wants to\ \ be handed off to assistant-456\n \",\n \"parameters\": {\n \ \ \"type\": \"object\",\n \"properties\": {\n \"destination\"\ : {\n \"type\": \"string\",\n \"description\": \"Options:\ \ assistant-123 (customer wants to be handed off to assistant-123), assistant-456\ \ (customer wants to be handed off to assistant-456)\",\n \"\ enum\": [\"assistant-123\", \"assistant-456\"]\n },\n },\n\ \ \"required\": [\"destination\"]\n }\n }\n}\n```\n\nTo override\ \ this function, please provide an OpenAI function definition and refer\ \ to it in the system prompt.\nYou may override parts of the function\ \ definition (i.e. you may only want to change the function name for your\ \ prompt).\nIf you choose to override the function parameters, it must\ \ include `destination` as a required parameter, and it must evaluate\ \ to either an assistantId, assistantName, or a the string literal `dynamic`.\n\ \nTo pass custom parameters to the server in a dynamic handoff, you can\ \ use the function parameters, with `dynamic` as the destination.\n```json\n\ {\n \"function\": {\n \"name\": \"dynamic_handoff\",\n \"description\"\ : \"\n Call this function when the customer is ready to be handed\ \ off to the next assistant\n \",\n \"parameters\": {\n \"\ type\": \"object\",\n \"properties\": {\n \"destination\"\ : {\n \"type\": \"string\",\n \"enum\": [\"dynamic\"\ ]\n },\n \"customerAreaCode\": {\n \"type\": \"\ number\",\n \"description\": \"Area code of the customer\"\n\ \ },\n \"customerIntent\": {\n \"type\": \"string\"\ ,\n \"enum\": [\"new-customer\", \"existing-customer\"],\n \ \ \"description\": \"Use new-customer when customer is a new customer,\ \ existing-customer when customer is an existing customer\"\n },\n\ \ \"customerSentiment\": {\n \"type\": \"string\",\n \ \ \"enum\": [\"positive\", \"negative\", \"neutral\"],\n \ \ \"description\": \"Use positive when customer is happy, negative\ \ when customer is unhappy, neutral when customer is neutral\"\n \ \ }\n },\n \"required\": [\"destination\", \"customerAreaCode\"\ , \"customerIntent\", \"customerSentiment\"]\n }\n }\n}\n```" allOf: - $ref: '#/components/schemas/OpenAIFunction' required: - type - id - orgId - createdAt - updatedAt OutputTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - output description: The type of tool. "output" for Output tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt BashTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - bash description: The type of tool. "bash" for Bash tool. subType: type: string enum: - bash_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' name: type: string description: The name of the tool, fixed to 'bash' default: bash enum: - bash required: - type - subType - id - orgId - createdAt - updatedAt - name ComputerTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - computer description: The type of tool. "computer" for Computer tool. subType: type: string enum: - computer_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' name: type: string description: The name of the tool, fixed to 'computer' default: computer enum: - computer displayWidthPx: type: number description: The display width in pixels displayHeightPx: type: number description: The display height in pixels displayNumber: type: number description: Optional display number required: - type - subType - id - orgId - createdAt - updatedAt - name - displayWidthPx - displayHeightPx TextEditorTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - textEditor description: The type of tool. "textEditor" for Text Editor tool. subType: type: string enum: - text_editor_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' name: type: string description: The name of the tool, fixed to 'str_replace_editor' default: str_replace_editor enum: - str_replace_editor required: - type - subType - id - orgId - createdAt - updatedAt - name QueryTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - query description: The type of tool. "query" for Query tool. knowledgeBases: description: The knowledge bases to query type: array items: $ref: '#/components/schemas/KnowledgeBase' id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt GoogleCalendarCreateEventTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - google.calendar.event.create description: The type of tool. "google.calendar.event.create" for Google Calendar Create Event tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt GoogleSheetsRowAppendTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - google.sheets.row.append description: The type of tool. "google.sheets.row.append" for Google Sheets Row Append tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt GoogleCalendarCheckAvailabilityTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - google.calendar.availability.check description: The type of tool. "google.calendar.availability.check" for Google Calendar Check Availability tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt SlackSendMessageTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - slack.message.send description: The type of tool. "slack.message.send" for Slack Send Message tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt SmsTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - sms description: The type of tool. "sms" for Twilio SMS sending tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt McpTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - mcp description: The type of tool. "mcp" for MCP tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' toolMessages: description: Per-tool message overrides for individual tools loaded from the MCP server. Set messages to an empty array to suppress messages for a specific tool. Tools not listed here will use the default messages from the parent tool. type: array items: $ref: '#/components/schemas/McpToolMessages' id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' metadata: $ref: '#/components/schemas/McpToolMetadata' required: - type - id - orgId - createdAt - updatedAt GoHighLevelCalendarAvailabilityTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.calendar.availability.check description: The type of tool. "gohighlevel.calendar.availability.check" for GoHighLevel Calendar Availability Check tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt GoHighLevelCalendarEventCreateTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.calendar.event.create description: The type of tool. "gohighlevel.calendar.event.create" for GoHighLevel Calendar Event Create tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt GoHighLevelContactCreateTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.contact.create description: The type of tool. "gohighlevel.contact.create" for GoHighLevel Contact Create tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt GoHighLevelContactGetTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.contact.get description: The type of tool. "gohighlevel.contact.get" for GoHighLevel Contact Get tool. id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt SipRequestTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - sipRequest description: The type of tool. "sipRequest" for SIP request tool. verb: type: string enum: - INFO - MESSAGE - NOTIFY description: The SIP method to send. headers: description: JSON schema for headers the model should populate when sending the SIP request. allOf: - $ref: '#/components/schemas/JsonSchema' body: description: Body to include in the SIP request. Either a literal string body, or a JSON schema describing a structured body that the model should populate. oneOf: - type: string - $ref: '#/components/schemas/JsonSchema' id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - verb - id - orgId - createdAt - updatedAt VoicemailTool: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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: The type of tool. "voicemail" for Voicemail tool. enum: - voicemail beepDetectionEnabled: type: boolean description: 'This is the flag that enables beep detection for voicemail detection and applies only for twilio based calls. @default false' default: false example: false id: type: string description: This is the unique identifier for the tool. orgId: type: string description: This is the unique identifier for the organization that this tool belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the tool was last updated. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - id - orgId - createdAt - updatedAt CreateApiRequestToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - apiRequest description: The type of tool. "apiRequest" for API request tool. method: type: string enum: - POST - GET - PUT - PATCH - DELETE timeoutSeconds: type: number description: 'This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20' minimum: 1 maximum: 300 example: 20 credentialId: type: string description: The credential ID for API request authentication example: 550e8400-e29b-41d4-a716-446655440000 encryptedPaths: type: array description: This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. items: type: string parameters: description: Static key-value pairs merged into the request body. Values support Liquid templates. type: array items: $ref: '#/components/schemas/ToolParameter' name: type: string description: 'This is the name of the tool. This will be passed to the model. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 40.' maxLength: 40 pattern: /^[a-zA-Z0-9_-]{1,40}$/ description: type: string description: This is the description of the tool. This will be passed to the model. url: type: string description: This is where the request will be sent. body: description: This is the body of the request. allOf: - $ref: '#/components/schemas/JsonSchema' headers: description: These are the headers to send with the request. allOf: - $ref: '#/components/schemas/JsonSchema' backoffPlan: description: 'This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried). @default undefined (the request will not be retried)' allOf: - $ref: '#/components/schemas/BackoffPlan' variableExtractionPlan: description: "This is the plan to extract variables from the tool's response.\ \ These will be accessible during the call and stored in `call.artifact.variableValues`\ \ after the call.\n\nUsage:\n1. Use `aliases` to extract variables from\ \ the tool's response body. (Most common case)\n\n```json\n{\n \"aliases\"\ : [\n {\n \"key\": \"customerName\",\n \"value\": \"{{customer.name}}\"\ \n },\n {\n \"key\": \"customerAge\",\n \"value\": \"\ {{customer.age}}\"\n }\n ]\n}\n```\n\nThe tool response body is made\ \ available to the liquid template.\n\n2. Use `aliases` to extract variables\ \ from the tool's response body if the response is an array.\n\n```json\n\ {\n \"aliases\": [\n {\n \"key\": \"customerName\",\n \"\ value\": \"{{$[0].name}}\"\n },\n {\n \"key\": \"customerAge\"\ ,\n \"value\": \"{{$[0].age}}\"\n }\n ]\n}\n```\n\n$ is a shorthand\ \ for the tool's response body. `$[0]` is the first item in the array.\ \ `$[n]` is the nth item in the array. Note, $ is available regardless\ \ of the response body type (both object and array).\n\n3. Use `aliases`\ \ to extract variables from the tool's response headers.\n\n```json\n\ {\n \"aliases\": [\n {\n \"key\": \"customerName\",\n \"\ value\": \"{{tool.response.headers.customer-name}}\"\n },\n {\n\ \ \"key\": \"customerAge\",\n \"value\": \"{{tool.response.headers.customer-age}}\"\ \n }\n ]\n}\n```\n\n`tool.response` is made available to the liquid\ \ template. Particularly, both `tool.response.headers` and `tool.response.body`\ \ are available. Note, `tool.response` is available regardless of the\ \ response body type (both object and array).\n\n4. Use `schema` to extract\ \ a large portion of the tool's response body.\n\n4.1. If you hit example.com\ \ and it returns `{\"name\": \"John\", \"age\": 30}`, then you can specify\ \ the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\ \n },\n \"age\": {\n \"type\": \"number\"\n }\n\ \ }\n }\n}\n```\nThese will be extracted as `{{ name }}` and `{{ age\ \ }}` respectively. To emphasize, object properties are extracted as direct\ \ global variables.\n\n4.2. If you hit example.com and it returns `{\"\ name\": {\"first\": \"John\", \"last\": \"Doe\"}}`, then you can specify\ \ the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"name\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"first\": {\n \"type\"\ : \"string\"\n },\n \"last\": {\n \"type\"\ : \"string\"\n }\n }\n }\n }\n }\n}\n```\n\n\ These will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{\ \ name.last }}` will be accessible.\n\n4.3. If you hit example.com and\ \ it returns `[\"94123\", \"94124\"]`, then you can specify the schema\ \ as:\n\n```json\n{\n \"schema\": {\n \"type\": \"array\",\n \"\ title\": \"zipCodes\",\n \"items\": {\n \"type\": \"string\"\n\ \ }\n }\n}\n```\n\nThis will be extracted as `{{ zipCodes }}`. To\ \ access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1]\ \ }}`.\n\n4.4. If you hit example.com and it returns `[{\"name\": \"John\"\ , \"age\": 30, \"zipCodes\": [\"94123\", \"94124\"]}, {\"name\": \"Jane\"\ , \"age\": 25, \"zipCodes\": [\"94125\", \"94126\"]}]`, then you can specify\ \ the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"array\"\ ,\n \"title\": \"people\",\n \"items\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"name\": {\n \"type\": \"\ string\"\n },\n \"age\": {\n \"type\": \"number\"\ \n },\n \"zipCodes\": {\n \"type\": \"array\",\n\ \ \"items\": {\n \"type\": \"string\"\n }\n\ \ }\n }\n }\n }\n}\n```\n\nThis will be extracted as `{{\ \ people }}`. To access the array items, you can use `{{ people[n].name\ \ }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0]\ \ }}` and `{{ people[n].zipCodes[1] }}`.\n\nNote: Both `aliases` and `schema`\ \ can be used together." allOf: - $ref: '#/components/schemas/VariableExtractionPlan' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - method - url CreateCodeToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - code description: The type of tool. "code" for Code tool. async: type: boolean example: false description: "This determines if the tool is async.\n\n If async, the assistant\ \ will move forward without waiting for your server to respond. This is\ \ useful if you just want to trigger something on your server.\n\n If\ \ sync, the assistant will wait for your server to respond. This is useful\ \ if want assistant to respond with the result from your server.\n\n \ \ Defaults to synchronous (`false`)." server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' code: type: string description: TypeScript code to execute when the tool is called maxLength: 50000 environmentVariables: description: Environment variables available in code via `env` object type: array items: $ref: '#/components/schemas/CodeToolEnvironmentVariable' timeoutSeconds: type: number description: 'This is the timeout in seconds for the code execution. Defaults to 10 seconds. Maximum is 30 seconds to prevent abuse. @default 10' minimum: 1 maximum: 30 example: 10 credentialId: type: string description: Credential ID containing the Val Town API key example: 550e8400-e29b-41d4-a716-446655440000 variableExtractionPlan: description: Plan to extract variables from the tool response allOf: - $ref: '#/components/schemas/VariableExtractionPlan' function: description: 'This is the function definition of the tool. For the Code tool, this defines the name, description, and parameters that the model will use to understand when and how to call this tool.' allOf: - $ref: '#/components/schemas/OpenAIFunction' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - code CreateOutputToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - output description: The type of tool. "output" for Output tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateBashToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - bash description: The type of tool. "bash" for Bash tool. subType: type: string enum: - bash_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' name: type: string description: The name of the tool, fixed to 'bash' default: bash enum: - bash rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - subType - name CreateComputerToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - computer description: The type of tool. "computer" for Computer tool. subType: type: string enum: - computer_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' name: type: string description: The name of the tool, fixed to '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 rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - subType - name - displayWidthPx - displayHeightPx CreateTextEditorToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - textEditor description: The type of tool. "textEditor" for Text Editor tool. subType: type: string enum: - text_editor_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' name: type: string description: The name of the tool, fixed to 'str_replace_editor' default: str_replace_editor enum: - str_replace_editor rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - subType - name CreateSmsToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - sms description: The type of tool. "sms" for Twilio SMS sending tool. rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type CreateSipRequestToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - sipRequest description: The type of tool. "sipRequest" for SIP request tool. verb: type: string enum: - INFO - MESSAGE - NOTIFY description: The SIP method to send. headers: description: JSON schema for headers the model should populate when sending the SIP request. allOf: - $ref: '#/components/schemas/JsonSchema' body: description: Body to include in the SIP request. Either a literal string body, or a JSON schema describing a structured body that the model should populate. oneOf: - type: string - $ref: '#/components/schemas/JsonSchema' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - verb UpdateApiRequestToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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 method: type: string enum: - POST - GET - PUT - PATCH - DELETE timeoutSeconds: type: number description: 'This is the timeout in seconds for the request. Defaults to 20 seconds. @default 20' minimum: 1 maximum: 300 example: 20 credentialId: type: string description: The credential ID for API request authentication example: 550e8400-e29b-41d4-a716-446655440000 encryptedPaths: type: array description: This is the paths to encrypt in the request body if credentialId and encryptionPlan are defined. items: type: string parameters: description: Static key-value pairs merged into the request body. Values support Liquid templates. type: array items: $ref: '#/components/schemas/ToolParameter' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' name: type: string description: 'This is the name of the tool. This will be passed to the model. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 40.' maxLength: 40 pattern: /^[a-zA-Z0-9_-]{1,40}$/ description: type: string description: This is the description of the tool. This will be passed to the model. url: type: string description: This is where the request will be sent. body: description: This is the body of the request. allOf: - $ref: '#/components/schemas/JsonSchema' headers: description: These are the headers to send with the request. allOf: - $ref: '#/components/schemas/JsonSchema' backoffPlan: description: 'This is the backoff plan if the request fails. Defaults to undefined (the request will not be retried). @default undefined (the request will not be retried)' allOf: - $ref: '#/components/schemas/BackoffPlan' variableExtractionPlan: description: "This is the plan to extract variables from the tool's response.\ \ These will be accessible during the call and stored in `call.artifact.variableValues`\ \ after the call.\n\nUsage:\n1. Use `aliases` to extract variables from\ \ the tool's response body. (Most common case)\n\n```json\n{\n \"aliases\"\ : [\n {\n \"key\": \"customerName\",\n \"value\": \"{{customer.name}}\"\ \n },\n {\n \"key\": \"customerAge\",\n \"value\": \"\ {{customer.age}}\"\n }\n ]\n}\n```\n\nThe tool response body is made\ \ available to the liquid template.\n\n2. Use `aliases` to extract variables\ \ from the tool's response body if the response is an array.\n\n```json\n\ {\n \"aliases\": [\n {\n \"key\": \"customerName\",\n \"\ value\": \"{{$[0].name}}\"\n },\n {\n \"key\": \"customerAge\"\ ,\n \"value\": \"{{$[0].age}}\"\n }\n ]\n}\n```\n\n$ is a shorthand\ \ for the tool's response body. `$[0]` is the first item in the array.\ \ `$[n]` is the nth item in the array. Note, $ is available regardless\ \ of the response body type (both object and array).\n\n3. Use `aliases`\ \ to extract variables from the tool's response headers.\n\n```json\n\ {\n \"aliases\": [\n {\n \"key\": \"customerName\",\n \"\ value\": \"{{tool.response.headers.customer-name}}\"\n },\n {\n\ \ \"key\": \"customerAge\",\n \"value\": \"{{tool.response.headers.customer-age}}\"\ \n }\n ]\n}\n```\n\n`tool.response` is made available to the liquid\ \ template. Particularly, both `tool.response.headers` and `tool.response.body`\ \ are available. Note, `tool.response` is available regardless of the\ \ response body type (both object and array).\n\n4. Use `schema` to extract\ \ a large portion of the tool's response body.\n\n4.1. If you hit example.com\ \ and it returns `{\"name\": \"John\", \"age\": 30}`, then you can specify\ \ the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\ \n },\n \"age\": {\n \"type\": \"number\"\n }\n\ \ }\n }\n}\n```\nThese will be extracted as `{{ name }}` and `{{ age\ \ }}` respectively. To emphasize, object properties are extracted as direct\ \ global variables.\n\n4.2. If you hit example.com and it returns `{\"\ name\": {\"first\": \"John\", \"last\": \"Doe\"}}`, then you can specify\ \ the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"name\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"first\": {\n \"type\"\ : \"string\"\n },\n \"last\": {\n \"type\"\ : \"string\"\n }\n }\n }\n }\n }\n}\n```\n\n\ These will be extracted as `{{ name }}`. And, `{{ name.first }}` and `{{\ \ name.last }}` will be accessible.\n\n4.3. If you hit example.com and\ \ it returns `[\"94123\", \"94124\"]`, then you can specify the schema\ \ as:\n\n```json\n{\n \"schema\": {\n \"type\": \"array\",\n \"\ title\": \"zipCodes\",\n \"items\": {\n \"type\": \"string\"\n\ \ }\n }\n}\n```\n\nThis will be extracted as `{{ zipCodes }}`. To\ \ access the array items, you can use `{{ zipCodes[0] }}` and `{{ zipCodes[1]\ \ }}`.\n\n4.4. If you hit example.com and it returns `[{\"name\": \"John\"\ , \"age\": 30, \"zipCodes\": [\"94123\", \"94124\"]}, {\"name\": \"Jane\"\ , \"age\": 25, \"zipCodes\": [\"94125\", \"94126\"]}]`, then you can specify\ \ the schema as:\n\n```json\n{\n \"schema\": {\n \"type\": \"array\"\ ,\n \"title\": \"people\",\n \"items\": {\n \"type\": \"object\"\ ,\n \"properties\": {\n \"name\": {\n \"type\": \"\ string\"\n },\n \"age\": {\n \"type\": \"number\"\ \n },\n \"zipCodes\": {\n \"type\": \"array\",\n\ \ \"items\": {\n \"type\": \"string\"\n }\n\ \ }\n }\n }\n }\n}\n```\n\nThis will be extracted as `{{\ \ people }}`. To access the array items, you can use `{{ people[n].name\ \ }}`, `{{ people[n].age }}`, `{{ people[n].zipCodes }}`, `{{ people[n].zipCodes[0]\ \ }}` and `{{ people[n].zipCodes[1] }}`.\n\nNote: Both `aliases` and `schema`\ \ can be used together." allOf: - $ref: '#/components/schemas/VariableExtractionPlan' UpdateCodeToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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 async: type: boolean example: false description: "This determines if the tool is async.\n\n If async, the assistant\ \ will move forward without waiting for your server to respond. This is\ \ useful if you just want to trigger something on your server.\n\n If\ \ sync, the assistant will wait for your server to respond. This is useful\ \ if want assistant to respond with the result from your server.\n\n \ \ Defaults to synchronous (`false`)." server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' code: type: string description: TypeScript code to execute when the tool is called maxLength: 50000 environmentVariables: description: Environment variables available in code via `env` object type: array items: $ref: '#/components/schemas/CodeToolEnvironmentVariable' timeoutSeconds: type: number description: 'This is the timeout in seconds for the code execution. Defaults to 10 seconds. Maximum is 30 seconds to prevent abuse. @default 10' minimum: 1 maximum: 30 example: 10 credentialId: type: string description: Credential ID containing the Val Town API key example: 550e8400-e29b-41d4-a716-446655440000 variableExtractionPlan: description: Plan to extract variables from the tool response allOf: - $ref: '#/components/schemas/VariableExtractionPlan' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' function: description: 'This is the function definition of the tool. For the Code tool, this defines the name, description, and parameters that the model will use to understand when and how to call this tool.' allOf: - $ref: '#/components/schemas/OpenAIFunction' UpdateDtmfToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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 sipInfoDtmfEnabled: type: boolean description: This enables sending DTMF tones via SIP INFO messages instead of RFC 2833 (RTP events). When enabled, DTMF digits will be sent using the SIP INFO method, which can be more reliable in some network configurations. Only relevant when using the `vapi.sip` transport. default: false rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateEndCallToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateFunctionToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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 async: type: boolean example: false description: "This determines if the tool is async.\n\n If async, the assistant\ \ will move forward without waiting for your server to respond. This is\ \ useful if you just want to trigger something on your server.\n\n If\ \ sync, the assistant will wait for your server to respond. This is useful\ \ if want assistant to respond with the result from your server.\n\n \ \ Defaults to synchronous (`false`)." server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' variableExtractionPlan: description: Plan to extract variables from the tool response allOf: - $ref: '#/components/schemas/VariableExtractionPlan' parameters: description: Static key-value pairs merged into the request body. Values support Liquid templates. type: array items: $ref: '#/components/schemas/ToolParameter' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' function: description: This is the function definition of the tool. allOf: - $ref: '#/components/schemas/OpenAIFunction' UpdateGhlToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' metadata: $ref: '#/components/schemas/GhlToolMetadata' UpdateMakeToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' metadata: $ref: '#/components/schemas/MakeToolMetadata' UpdateHandoffToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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 defaultResult: type: string description: This is the default local tool result message used when no runtime handoff result override is returned. destinations: type: array description: "These are the destinations that the call can be handed off\ \ to.\n\nUsage:\n1. Single destination\n\nUse `assistantId` to handoff\ \ the call to a saved assistant, or `assistantName` to handoff the call\ \ to an assistant in the same squad.\n\n```json\n{\n \"tools\": [\n \ \ {\n \"type\": \"handoff\",\n \"destinations\": [\n \ \ {\n \"type\": \"assistant\",\n \"assistantId\":\ \ \"assistant-123\", // or \"assistantName\": \"Assistant123\"\n \ \ \"description\": \"customer wants to be handed off to assistant-123\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n }\n ],\n }\n ]\n}\n```\n\n2. Multiple\ \ destinations\n\n2.1. Multiple Tools, Each With One Destination (OpenAI\ \ recommended)\n\n```json\n{\n \"tools\": [\n {\n \"type\": \"\ handoff\",\n \"destinations\": [\n {\n \"type\":\ \ \"assistant\",\n \"assistantId\": \"assistant-123\",\n \ \ \"description\": \"customer wants to be handed off to assistant-123\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n },\n ],\n },\n {\n \"type\": \"\ handoff\",\n \"destinations\": [\n {\n \"type\":\ \ \"assistant\",\n \"assistantId\": \"assistant-456\",\n \ \ \"description\": \"customer wants to be handed off to assistant-456\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n }\n ],\n }\n ]\n}\n```\n\n2.2. One Tool,\ \ Multiple Destinations (Anthropic recommended)\n\n```json\n{\n \"tools\"\ : [\n {\n \"type\": \"handoff\",\n \"destinations\": [\n\ \ {\n \"type\": \"assistant\",\n \"assistantId\"\ : \"assistant-123\",\n \"description\": \"customer wants to be\ \ handed off to assistant-123\",\n \"contextEngineeringPlan\"\ : {\n \"type\": \"all\"\n }\n },\n {\n\ \ \"type\": \"assistant\",\n \"assistantId\": \"assistant-456\"\ ,\n \"description\": \"customer wants to be handed off to assistant-456\"\ ,\n \"contextEngineeringPlan\": {\n \"type\": \"all\"\ \n }\n }\n ],\n }\n ]\n}\n```\n\n3. Dynamic destination\n\ \n3.1 To determine the destination dynamically, supply a `dynamic` handoff\ \ destination type and a `server` object.\n VAPI will send a handoff-destination-request\ \ webhook to the `server.url`.\n The response from the server will\ \ be used as the destination (if valid).\n\n```json\n{\n \"tools\": [\n\ \ {\n \"type\": \"handoff\",\n \"destinations\": [\n \ \ {\n \"type\": \"dynamic\",\n \"server\": {\n \ \ \"url\": \"https://example.com\"\n }\n }\n\ \ ],\n }\n ]\n}\n```\n\n3.2. To pass custom parameters to the\ \ server, you can use the `function` object.\n\n```json\n{\n \"tools\"\ : [\n {\n \"type\": \"handoff\",\n \"destinations\": [\n\ \ {\n \"type\": \"dynamic\",\n \"server\": {\n\ \ \"url\": \"https://example.com\"\n },\n }\n\ \ ],\n \"function\": {\n \"name\": \"handoff\",\n \ \ \"description\": \"Call this function when the customer is ready\ \ to be handed off to the next assistant\",\n \"parameters\": {\n\ \ \"type\": \"object\",\n \"properties\": {\n \ \ \"destination\": {\n \"type\": \"string\",\n \ \ \"description\": \"Use dynamic when customer is ready to be\ \ handed off to the next assistant\",\n \"enum\": [\"dynamic\"\ ]\n },\n \"customerAreaCode\": {\n \ \ \"type\": \"number\",\n \"description\": \"Area code of\ \ the customer\"\n },\n \"customerIntent\": {\n\ \ \"type\": \"string\",\n \"enum\": [\"new-customer\"\ , \"existing-customer\"],\n \"description\": \"Use new-customer\ \ when customer is a new customer, existing-customer when customer is\ \ an existing customer\"\n },\n \"customerSentiment\"\ : {\n \"type\": \"string\",\n \"enum\": [\"\ positive\", \"negative\", \"neutral\"],\n \"description\"\ : \"Use positive when customer is happy, negative when customer is unhappy,\ \ neutral when customer is neutral\"\n }\n }\n \ \ }\n }\n }\n ]\n}\n```\n\nThe properties `customerAreaCode`,\ \ `customerIntent`, and `customerSentiment` will be passed to the server\ \ in the webhook request body." items: oneOf: - $ref: '#/components/schemas/HandoffDestinationAssistant' title: Assistant - $ref: '#/components/schemas/HandoffDestinationDynamic' title: Dynamic - $ref: '#/components/schemas/HandoffDestinationSquad' title: Squad rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' function: description: "This is the optional function definition that will be passed\ \ to the LLM.\nIf this is not defined, we will construct this based on\ \ the other properties.\n\nFor example, given the following tools definition:\n\ ```json\n{\n \"tools\": [\n {\n \"type\": \"handoff\",\n \ \ \"destinations\": [\n {\n \"type\": \"assistant\",\n\ \ \"assistantId\": \"assistant-123\",\n \"description\"\ : \"customer wants to be handed off to assistant-123\",\n \"\ contextEngineeringPlan\": {\n \"type\": \"all\"\n \ \ }\n },\n {\n \"type\": \"assistant\",\n \ \ \"assistantId\": \"assistant-456\",\n \"description\":\ \ \"customer wants to be handed off to assistant-456\",\n \"\ contextEngineeringPlan\": {\n \"type\": \"all\"\n \ \ }\n }\n ],\n }\n ]\n}\n```\n\nWe will construct the\ \ following function definition:\n```json\n{\n \"function\": {\n \"\ name\": \"handoff_to_assistant-123\",\n \"description\": \"\n \ \ Use this function to handoff the call to the next assistant.\n \ \ Only use it when instructions explicitly ask you to use the handoff_to_assistant\ \ function.\n DO NOT call this function unless you are instructed\ \ to do so.\n Here are the destinations you can handoff the call\ \ to:\n 1. assistant-123. When: customer wants to be handed off\ \ to assistant-123\n 2. assistant-456. When: customer wants to\ \ be handed off to assistant-456\n \",\n \"parameters\": {\n \ \ \"type\": \"object\",\n \"properties\": {\n \"destination\"\ : {\n \"type\": \"string\",\n \"description\": \"Options:\ \ assistant-123 (customer wants to be handed off to assistant-123), assistant-456\ \ (customer wants to be handed off to assistant-456)\",\n \"\ enum\": [\"assistant-123\", \"assistant-456\"]\n },\n },\n\ \ \"required\": [\"destination\"]\n }\n }\n}\n```\n\nTo override\ \ this function, please provide an OpenAI function definition and refer\ \ to it in the system prompt.\nYou may override parts of the function\ \ definition (i.e. you may only want to change the function name for your\ \ prompt).\nIf you choose to override the function parameters, it must\ \ include `destination` as a required parameter, and it must evaluate\ \ to either an assistantId, assistantName, or a the string literal `dynamic`.\n\ \nTo pass custom parameters to the server in a dynamic handoff, you can\ \ use the function parameters, with `dynamic` as the destination.\n```json\n\ {\n \"function\": {\n \"name\": \"dynamic_handoff\",\n \"description\"\ : \"\n Call this function when the customer is ready to be handed\ \ off to the next assistant\n \",\n \"parameters\": {\n \"\ type\": \"object\",\n \"properties\": {\n \"destination\"\ : {\n \"type\": \"string\",\n \"enum\": [\"dynamic\"\ ]\n },\n \"customerAreaCode\": {\n \"type\": \"\ number\",\n \"description\": \"Area code of the customer\"\n\ \ },\n \"customerIntent\": {\n \"type\": \"string\"\ ,\n \"enum\": [\"new-customer\", \"existing-customer\"],\n \ \ \"description\": \"Use new-customer when customer is a new customer,\ \ existing-customer when customer is an existing customer\"\n },\n\ \ \"customerSentiment\": {\n \"type\": \"string\",\n \ \ \"enum\": [\"positive\", \"negative\", \"neutral\"],\n \ \ \"description\": \"Use positive when customer is happy, negative\ \ when customer is unhappy, neutral when customer is neutral\"\n \ \ }\n },\n \"required\": [\"destination\", \"customerAreaCode\"\ , \"customerIntent\", \"customerSentiment\"]\n }\n }\n}\n```" allOf: - $ref: '#/components/schemas/OpenAIFunction' UpdateTransferCallToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed destinations: type: array description: These are the destinations that the call can be transferred to. If no destinations are provided, server.url will be used to get the transfer destination once the tool is called. items: oneOf: - $ref: '#/components/schemas/TransferDestinationAssistant' title: Assistant - $ref: '#/components/schemas/TransferDestinationNumber' title: Number - $ref: '#/components/schemas/TransferDestinationSip' title: Sip rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateOutputToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateBashToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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: type: string enum: - bash_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' name: type: string description: The name of the tool, fixed to 'bash' default: bash enum: - bash UpdateComputerToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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: type: string enum: - computer_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' name: type: string description: The name of the tool, fixed to '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: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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: type: string enum: - text_editor_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' name: type: string description: The name of the tool, fixed to 'str_replace_editor' default: str_replace_editor enum: - str_replace_editor UpdateQueryToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed knowledgeBases: description: The knowledge bases to query type: array items: $ref: '#/components/schemas/KnowledgeBase' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateGoogleCalendarCreateEventToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateGoogleSheetsRowAppendToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateGoogleCalendarCheckAvailabilityToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateSlackSendMessageToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateSmsToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateMcpToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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 server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' toolMessages: description: Per-tool message overrides for individual tools loaded from the MCP server. Set messages to an empty array to suppress messages for a specific tool. Tools not listed here will use the default messages from the parent tool. type: array items: $ref: '#/components/schemas/McpToolMessages' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' metadata: $ref: '#/components/schemas/McpToolMetadata' UpdateGoHighLevelCalendarAvailabilityToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateGoHighLevelCalendarEventCreateToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateGoHighLevelContactCreateToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateGoHighLevelContactGetToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateSipRequestToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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 verb: type: string enum: - INFO - MESSAGE - NOTIFY description: The SIP method to send. headers: description: JSON schema for headers the model should populate when sending the SIP request. allOf: - $ref: '#/components/schemas/JsonSchema' body: description: Body to include in the SIP request. Either a literal string body, or a JSON schema describing a structured body that the model should populate. oneOf: - type: string - $ref: '#/components/schemas/JsonSchema' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' UpdateVoicemailToolDTO: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' 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 beepDetectionEnabled: type: boolean description: 'This is the flag that enables beep detection for voicemail detection and applies only for twilio based calls. @default false' default: false example: false rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' 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 CustomKnowledgeBase: type: object properties: provider: 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\n\ Request 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 UpdateCustomKnowledgeBaseDTO: type: object properties: server: description: "This is where the knowledge base request will be sent.\n\n\ Request 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' StructuredOutput: type: object properties: type: type: string description: 'This is the type of structured output. - ''ai'': Uses an LLM to extract structured data from the conversation (default). - ''regex'': Uses a regex pattern to extract data from the transcript without an LLM.' enum: - ai - regex regex: type: string description: 'This is the regex pattern to match against the transcript. Only used when type is ''regex''. Supports both raw patterns (e.g. ''\d+'') and regex literal format (e.g. ''/\d+/gi''). Uses RE2 syntax for safety. The result depends on the schema type: - boolean: true if the pattern matches, false otherwise - string: the first match or first capture group - number/integer: the first match parsed as a number - array: all matches' minLength: 1 maxLength: 1000 model: description: 'This is the model that will be used to extract the structured output. To provide your own custom system and user prompts for structured output extraction, populate the messages array with your system and user messages. You can specify liquid templating in your system and user messages. Between the system or user messages, you must reference either ''transcript'' or ''messages'' with the `{{}}` syntax to access the conversation history. Between the system or user messages, you must reference a variation of the structured output with the `{{}}` syntax to access the structured output definition. i.e.: `{{structuredOutput}}` `{{structuredOutput.name}}` `{{structuredOutput.description}}` `{{structuredOutput.schema}}` If model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts. If messages or required fields are not specified, the default system and user prompts will be used.' oneOf: - $ref: '#/components/schemas/WorkflowOpenAIModel' title: WorkflowOpenAIModel - $ref: '#/components/schemas/WorkflowAnthropicModel' title: WorkflowAnthropicModel - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel' title: WorkflowAnthropicBedrockModel - $ref: '#/components/schemas/WorkflowGoogleModel' title: WorkflowGoogleModel - $ref: '#/components/schemas/WorkflowCustomModel' title: WorkflowCustomModel compliancePlan: description: Compliance configuration for this output. Only enable overrides if no sensitive data will be stored. example: forceStoreOnHipaaEnabled: false allOf: - $ref: '#/components/schemas/ComplianceOverride' id: type: string description: This is the unique identifier for the structured output. orgId: type: string description: This is the unique identifier for the org that this structured output belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the structured output was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the structured output was last updated. name: type: string description: This is the name of the structured output. minLength: 1 maxLength: 40 description: type: string description: 'This is the description of what the structured output extracts. Use this to provide context about what data will be extracted and how it will be used.' assistantIds: description: 'These are the assistant IDs that this structured output is linked to. When linked to assistants, this structured output will be available for extraction during those assistant''s calls.' type: array items: type: string workflowIds: description: 'These are the workflow IDs that this structured output is linked to. When linked to workflows, this structured output will be available for extraction during those workflow''s execution.' type: array items: type: string schema: description: 'This is the JSON Schema definition for the structured output. Defines the structure and validation rules for the data that will be extracted. Supports all JSON Schema features including: - Objects and nested properties - Arrays and array validation - String, number, boolean, and null types - Enums and const values - Validation constraints (min/max, patterns, etc.) - Composition with allOf, anyOf, oneOf' allOf: - $ref: '#/components/schemas/JsonSchema' required: - id - orgId - createdAt - updatedAt - name - schema StructuredOutputPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/StructuredOutput' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata UpdateStructuredOutputDTO: type: object properties: type: type: string description: 'This is the type of structured output. - ''ai'': Uses an LLM to extract structured data from the conversation (default). - ''regex'': Uses a regex pattern to extract data from the transcript without an LLM.' enum: - ai - regex regex: type: string description: 'This is the regex pattern to match against the transcript. Only used when type is ''regex''. Supports both raw patterns (e.g. ''\d+'') and regex literal format (e.g. ''/\d+/gi''). Uses RE2 syntax for safety. The result depends on the schema type: - boolean: true if the pattern matches, false otherwise - string: the first match or first capture group - number/integer: the first match parsed as a number - array: all matches' minLength: 1 maxLength: 1000 model: description: 'This is the model that will be used to extract the structured output. To provide your own custom system and user prompts for structured output extraction, populate the messages array with your system and user messages. You can specify liquid templating in your system and user messages. Between the system or user messages, you must reference either ''transcript'' or ''messages'' with the `{{}}` syntax to access the conversation history. Between the system or user messages, you must reference a variation of the structured output with the `{{}}` syntax to access the structured output definition. i.e.: `{{structuredOutput}}` `{{structuredOutput.name}}` `{{structuredOutput.description}}` `{{structuredOutput.schema}}` If model is not specified, GPT-4.1 will be used by default for extraction, utilizing default system and user prompts. If messages or required fields are not specified, the default system and user prompts will be used.' oneOf: - $ref: '#/components/schemas/WorkflowOpenAIModel' title: WorkflowOpenAIModel - $ref: '#/components/schemas/WorkflowAnthropicModel' title: WorkflowAnthropicModel - $ref: '#/components/schemas/WorkflowAnthropicBedrockModel' title: WorkflowAnthropicBedrockModel - $ref: '#/components/schemas/WorkflowGoogleModel' title: WorkflowGoogleModel - $ref: '#/components/schemas/WorkflowCustomModel' title: WorkflowCustomModel compliancePlan: description: Compliance configuration for this output. Only enable overrides if no sensitive data will be stored. example: forceStoreOnHipaaEnabled: false allOf: - $ref: '#/components/schemas/ComplianceOverride' name: type: string description: This is the name of the structured output. minLength: 1 maxLength: 40 description: type: string description: 'This is the description of what the structured output extracts. Use this to provide context about what data will be extracted and how it will be used.' assistantIds: description: 'These are the assistant IDs that this structured output is linked to. When linked to assistants, this structured output will be available for extraction during those assistant''s calls.' type: array items: type: string workflowIds: description: 'These are the workflow IDs that this structured output is linked to. When linked to workflows, this structured output will be available for extraction during those workflow''s execution.' type: array items: type: string schema: description: 'This is the JSON Schema definition for the structured output. Defines the structure and validation rules for the data that will be extracted. Supports all JSON Schema features including: - Objects and nested properties - Arrays and array validation - String, number, boolean, and null types - Enums and const values - Validation constraints (min/max, patterns, etc.) - Composition with allOf, anyOf, oneOf' allOf: - $ref: '#/components/schemas/JsonSchema' StructuredOutputRunDTO: type: object properties: previewEnabled: type: boolean description: 'This is the preview flag for the re-run. If true, the re-run will be executed and the response will be returned immediately and the call artifact will NOT be updated. If false (default), the re-run will be executed and the response will be updated in the call artifact.' default: false structuredOutputId: type: string description: 'This is the ID of the structured output that will be run. This must be provided unless a transient structured output is provided. When the re-run is executed, only the value of this structured output will be replaced with the new value, or added if not present.' structuredOutput: description: 'This is the transient structured output that will be run. This must be provided if a structured output ID is not provided. When the re-run is executed, the structured output value will be added to the existing artifact.' allOf: - $ref: '#/components/schemas/CreateStructuredOutputDTO' callIds: description: 'This is the array of callIds that will be updated with the new structured output value. If preview is true, this array must be provided and contain exactly 1 callId. If preview is false, up to 100 callIds may be provided.' type: array items: type: string required: - callIds TesterPlan: type: object properties: assistant: description: 'Pass a transient assistant to use for the test assistant. Make sure to write a detailed system prompt for a test assistant, and use the {{test.script}} variable to access the test script.' allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantId: type: string description: 'Pass an assistant id that can be access Make 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. One use case is if you want to pass custom variables into the test using variableValues, that you can then access in the script and rubric using {{varName}}.' allOf: - $ref: '#/components/schemas/AssistantOverrides' TestSuitePhoneNumber: type: object properties: provider: type: string description: This is the provider of the phone number. enum: - test-suite number: type: string description: This is the phone number that is being tested. maxLength: 50 required: - provider - number TargetPlan: type: object properties: phoneNumberId: type: string description: 'This is the phone number that is being tested. During the actual test, it''ll be called and the assistant attached to it will pick up and be tested. To test an assistant directly, send assistantId instead.' phoneNumber: description: 'This can be any phone number (even not on Vapi). During the actual test, it''ll be called. To test a Vapi number, send phoneNumberId. To test an assistant directly, send assistantId instead.' allOf: - $ref: '#/components/schemas/TestSuitePhoneNumber' assistantId: type: string description: 'This is the assistant being tested. During the actual test, it''ll invoked directly. To test the assistant over phone number, send phoneNumberId instead.' assistantOverrides: description: This is the assistant overrides applied to assistantId before it is tested. allOf: - $ref: '#/components/schemas/AssistantOverrides' TestSuite: type: object properties: id: type: string description: This is the unique identifier for the test suite. orgId: type: string description: This is the unique identifier for the org that this test suite belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the test suite was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the test suite was last updated. name: type: string description: This is the name of the test suite. maxLength: 80 phoneNumberId: type: string description: This is the phone number ID associated with this test suite. deprecated: true testerPlan: description: 'Override the default tester plan by providing custom assistant configuration for the test agent. We 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: - id - orgId - createdAt - updatedAt TestSuitesPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/TestSuite' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata CreateTestSuiteDto: type: object properties: name: type: string description: This is the name of the test suite. maxLength: 80 phoneNumberId: type: string description: This is the phone number ID associated with this test suite. deprecated: true testerPlan: description: 'Override the default tester plan by providing custom assistant configuration for the test agent. We 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' UpdateTestSuiteDto: type: object properties: name: type: string description: This is the name of the test suite. maxLength: 80 phoneNumberId: type: string description: This is the phone number ID associated with this test suite. deprecated: true testerPlan: description: 'Override the default tester plan by providing custom assistant configuration for the test agent. We 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' TestSuiteTestVoice: 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 id: type: string description: This is the unique identifier for the test. testSuiteId: type: string description: This is the unique identifier for the test suite this test belongs to. orgId: type: string description: This is the unique identifier for the organization this test belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the test was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the test was last updated. name: type: string description: This is the name of the test. maxLength: 80 script: type: string description: This is the script to be used for the voice test. maxLength: 10000 numAttempts: type: number description: This is the number of attempts allowed for the test. minimum: 1 maximum: 10 required: - scorers - type - id - testSuiteId - orgId - createdAt - updatedAt - script 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 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 test. testSuiteId: type: string description: This is the unique identifier for the test suite this test belongs to. orgId: type: string description: This is the unique identifier for the organization this test belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the test was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the test was last updated. name: type: string description: This is the name of the test. maxLength: 80 script: type: string description: This is the script to be used for the chat test. maxLength: 10000 numAttempts: type: number description: This is the number of attempts allowed for the test. minimum: 1 maximum: 10 required: - scorers - type - id - testSuiteId - orgId - createdAt - updatedAt - script 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 test. maxLength: 80 required: - scorers - type - script CreateTestSuiteTestChatDto: type: object properties: scorers: type: array description: These are the scorers used to evaluate the test. items: oneOf: - $ref: '#/components/schemas/TestSuiteTestScorerAI' title: AI type: type: string description: This is the type of the test, which must be chat. enum: - chat maxLength: 100 script: type: string description: This is the script to be used for the chat test. maxLength: 10000 numAttempts: type: number description: This is the number of attempts allowed for the test. minimum: 1 maximum: 10 name: type: string description: This is the name of the test. maxLength: 80 required: - scorers - type - script UpdateTestSuiteTestVoiceDto: 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 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 UpdateTestSuiteTestChatDto: type: object properties: scorers: type: array description: These are the scorers used to evaluate the test. items: oneOf: - $ref: '#/components/schemas/TestSuiteTestScorerAI' title: AI type: type: string description: This is the type of the test, which must be chat. enum: - chat maxLength: 100 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 TestSuiteTestScorerAI: type: object properties: type: type: string description: This is the type of the scorer, which must be AI. enum: - ai maxLength: 100 rubric: type: string description: This is the rubric used by the AI scorer. maxLength: 10000 required: - type - rubric TestSuiteTestsPaginatedResponse: type: object properties: results: type: array description: A list of test suite tests. items: oneOf: - $ref: '#/components/schemas/TestSuiteTestVoice' - $ref: '#/components/schemas/TestSuiteTestChat' metadata: description: Metadata about the pagination. allOf: - $ref: '#/components/schemas/PaginationMeta' required: - results - metadata TestSuiteRunScorerAI: type: object properties: type: type: string description: This is the type of the scorer, which must be AI. enum: - ai maxLength: 100 result: type: string description: This is the result of the test suite. 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: 10000 required: - type - result - reasoning - rubric TestSuiteRunTestAttemptCall: type: object properties: artifact: description: This is the artifact of the call. allOf: - $ref: '#/components/schemas/Artifact' required: - artifact TestSuiteRunTestAttemptMetadata: type: object properties: sessionId: type: string description: This is the session ID for the test attempt. required: - sessionId 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/TestSuiteRunTestAttemptCall' callId: type: string description: This is the call ID for the test attempt. metadata: description: This is the metadata for the test attempt. allOf: - $ref: '#/components/schemas/TestSuiteRunTestAttemptMetadata' required: - scorerResults TestSuiteRunTestResult: type: object properties: test: description: This is the test that was run. oneOf: - $ref: '#/components/schemas/TestSuiteTestVoice' title: TestSuiteTestVoice attempts: description: These are the attempts made for this test. type: array items: $ref: '#/components/schemas/TestSuiteRunTestAttempt' required: - test - attempts TestSuiteRun: type: object properties: status: type: string 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 organization this run belongs to. testSuiteId: type: string description: This is the unique identifier for the test suite this run belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the test suite run was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the test suite run was last updated. testResults: description: These are the results of the tests in this test suite run. type: array items: $ref: '#/components/schemas/TestSuiteRunTestResult' name: type: string description: This is the name of the test suite run. maxLength: 80 required: - status - id - orgId - testSuiteId - createdAt - updatedAt - testResults TestSuiteRunsPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/TestSuiteRun' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata CreateTestSuiteRunDto: type: object properties: name: type: string description: This is the name of the test suite run. maxLength: 80 UpdateTestSuiteRunDto: type: object properties: name: type: string description: This is the name of the test suite run. maxLength: 80 CreatePersonalityDTO: type: object properties: name: type: string description: This is the name of the personality (e.g., "Confused Carl", "Rude Rob"). maxLength: 80 assistant: description: 'This is the full assistant configuration for this personality. It defines the tester''s voice, model, behavior via system prompt, and other settings.' allOf: - $ref: '#/components/schemas/CreateAssistantDTO' path: type: string nullable: true description: 'Optional folder path for organizing personalities. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ required: - name - assistant Personality: type: object properties: id: type: string description: This is the unique identifier for the personality. format: uuid orgId: type: string nullable: true description: 'This is the unique identifier for the organization this personality belongs to. If null, this is a Vapi-provided default personality available to all organizations.' format: uuid createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the personality was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the personality was last updated. name: type: string description: This is the name of the personality (e.g., "Confused Carl", "Rude Rob"). maxLength: 80 assistant: description: 'This is the full assistant configuration for this personality. It defines the tester''s voice, model, behavior via system prompt, and other settings.' allOf: - $ref: '#/components/schemas/CreateAssistantDTO' path: type: string nullable: true description: 'Optional folder path for organizing personalities. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ required: - id - orgId - createdAt - updatedAt - name - assistant UpdatePersonalityDTO: type: object properties: name: type: string description: This is the name of the personality. maxLength: 80 assistant: description: This is the full assistant configuration for this personality. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' path: type: string nullable: true description: 'Optional folder path for organizing personalities. Supports up to 3 levels (e.g., "dept/feature/variant"). Set to null to remove from folder.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ SimulationHookInclude: type: object properties: transcript: type: boolean description: Include transcript in the hook payload default: false messages: type: boolean description: Include messages in the hook payload default: false recordingUrl: type: boolean description: Include recordingUrl in the hook payload default: false SimulationHookWebhookAction: type: object properties: type: type: string enum: - webhook server: description: 'Optional server override for this hook action. If omitted, runtime defaults may apply (e.g. org server).' allOf: - $ref: '#/components/schemas/Server' include: description: Optional payload include controls. allOf: - $ref: '#/components/schemas/SimulationHookInclude' required: - type SimulationHookCallStarted: type: object properties: 'on': type: string enum: - simulation.run.started maxLength: 1000 do: type: array items: oneOf: - $ref: '#/components/schemas/SimulationHookWebhookAction' title: SimulationHookWebhookAction required: - 'on' - do SimulationHookCallEnded: type: object properties: 'on': type: string enum: - simulation.run.ended maxLength: 1000 do: type: array items: oneOf: - $ref: '#/components/schemas/SimulationHookWebhookAction' title: SimulationHookWebhookAction required: - 'on' - do EvaluationPlanItem: type: object properties: structuredOutputId: type: string description: 'This is the ID of an existing structured output to use for evaluation. Mutually exclusive with structuredOutput.' format: uuid structuredOutput: description: 'This is an inline structured output definition for evaluation. Mutually exclusive with structuredOutputId. Only primitive schema types (string, number, integer, boolean) are allowed.' allOf: - $ref: '#/components/schemas/CreateStructuredOutputDTO' comparator: type: string description: 'This is the comparison operator to use when evaluating the extracted value against the expected value. Available operators depend on the structured output''s schema type: - boolean: ''='', ''!='' - string: ''='', ''!='' - number/integer: ''='', ''!='', ''>'', ''<'', ''>='', ''<=''' enum: - '=' - '!=' - '>' - < - '>=' - <= example: '=' value: description: 'This is the expected value to compare against the extracted structured output result. Type should match the structured output''s schema type.' oneOf: - type: number - type: string - type: boolean required: type: boolean description: 'This is whether this evaluation must pass for the simulation to pass. Defaults to true. If false, the result is informational only.' default: true required: - comparator - value ScenarioToolMock: type: object properties: toolName: type: string description: This is the tool call function name to mock (must match `toolCall.function.name`). result: type: string description: This is the result content to return for this tool call. enabled: type: boolean description: This is whether this mock is enabled. Defaults to true when omitted. default: true required: - toolName CreateScenarioDTO: type: object properties: name: type: string description: This is the name of the scenario. maxLength: 80 example: Health Enrollment - Eligible Path instructions: type: string description: This is the script/instructions for the tester to follow during the simulation. maxLength: 10000 example: You are calling to enroll in the Twin Health program. Confirm your identity when asked. evaluations: description: 'This is the structured output-based evaluation plan for the simulation. Each item defines a structured output to extract and evaluate against an expected value.' type: array items: $ref: '#/components/schemas/EvaluationPlanItem' hooks: type: array description: Hooks to run on simulation lifecycle events items: oneOf: - $ref: '#/components/schemas/SimulationHookCallStarted' title: SimulationHookCallStarted - $ref: '#/components/schemas/SimulationHookCallEnded' title: SimulationHookCallEnded targetOverrides: description: Overrides to inject into the simulated target assistant or squad example: variableValues: customerName: Alice orderId: '12345' allOf: - $ref: '#/components/schemas/AssistantOverrides' toolMocks: description: Scenario-level tool call mocks to use during simulations. type: array items: $ref: '#/components/schemas/ScenarioToolMock' path: type: string nullable: true description: 'Optional folder path for organizing scenarios. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ required: - name - instructions - evaluations Scenario: type: object properties: id: type: string description: This is the unique identifier for the scenario. format: uuid orgId: type: string description: This is the unique identifier for the organization this scenario belongs to. format: uuid createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the scenario was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the scenario was last updated. name: type: string description: This is the name of the scenario. maxLength: 80 example: Health Enrollment - Eligible Path instructions: type: string description: This is the script/instructions for the tester to follow during the simulation. maxLength: 10000 example: You are calling to enroll in the Twin Health program. Confirm your identity when asked. evaluations: description: 'This is the structured output-based evaluation plan for the simulation. Each item defines a structured output to extract and evaluate against an expected value.' type: array items: $ref: '#/components/schemas/EvaluationPlanItem' hooks: type: array description: Hooks to run on simulation lifecycle events items: oneOf: - $ref: '#/components/schemas/SimulationHookCallStarted' title: SimulationHookCallStarted - $ref: '#/components/schemas/SimulationHookCallEnded' title: SimulationHookCallEnded targetOverrides: description: Overrides to inject into the simulated target assistant or squad example: variableValues: customerName: Alice orderId: '12345' allOf: - $ref: '#/components/schemas/AssistantOverrides' toolMocks: description: Scenario-level tool call mocks to use during simulations. type: array items: $ref: '#/components/schemas/ScenarioToolMock' path: type: string nullable: true description: 'Optional folder path for organizing scenarios. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ required: - id - orgId - createdAt - updatedAt - name - instructions - evaluations UpdateScenarioDTO: type: object properties: name: type: string description: This is the name of the scenario. maxLength: 80 instructions: type: string description: This is the script/instructions for the tester to follow during the simulation. maxLength: 10000 evaluations: description: 'This is the structured output-based evaluation plan for the simulation. Each item defines a structured output to extract and evaluate against an expected value.' type: array items: $ref: '#/components/schemas/EvaluationPlanItem' hooks: type: array description: Hooks to run on simulation lifecycle events items: oneOf: - $ref: '#/components/schemas/SimulationHookCallStarted' title: SimulationHookCallStarted - $ref: '#/components/schemas/SimulationHookCallEnded' title: SimulationHookCallEnded targetOverrides: description: Overrides to inject into the simulated target assistant or squad example: variableValues: customerName: Alice orderId: '12345' allOf: - $ref: '#/components/schemas/AssistantOverrides' toolMocks: type: array items: $ref: '#/components/schemas/ScenarioToolMock' path: type: string nullable: true description: 'Optional folder path for organizing scenarios. Supports up to 3 levels (e.g., "dept/feature/variant"). Set to null to remove from folder.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ SimulationRunSimulationEntry: type: object properties: type: type: string enum: - simulation description: Type discriminator simulationId: type: string description: ID of an existing simulation to run. When provided, scenarioId/personalityId/inline fields are ignored. format: uuid scenarioId: type: string description: ID of an existing scenario. Cannot be combined with inline scenario. format: uuid scenario: description: Inline scenario configuration. Cannot be combined with scenarioId. allOf: - $ref: '#/components/schemas/CreateScenarioDTO' personalityId: type: string description: ID of an existing personality. Cannot be combined with inline personality. format: uuid personality: description: Inline personality configuration. Cannot be combined with personalityId. allOf: - $ref: '#/components/schemas/CreatePersonalityDTO' name: type: string maxLength: 80 description: Optional name for this simulation entry required: - type SimulationRunSuiteEntry: type: object properties: type: type: string description: Type discriminator enum: - simulationSuite simulationSuiteId: type: string description: ID of the simulation suite to run format: uuid suiteId: type: string deprecated: true required: - type SimulationRunTargetAssistant: type: object properties: type: type: string enum: - assistant description: Type of target assistantId: type: string description: ID of an existing assistant to test against. Cannot be combined with inline assistant. format: uuid assistant: description: Inline assistant configuration to test against. Cannot be combined with assistantId. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' required: - type SimulationRunTargetSquad: type: object properties: type: type: string enum: - squad description: Type of target squadId: type: string description: ID of an existing squad to test against. Cannot be combined with inline squad. format: uuid squad: description: Inline squad configuration to test against. Cannot be combined with squadId. allOf: - $ref: '#/components/schemas/CreateSquadDTO' required: - type SimulationRunTransportConfiguration: type: object properties: provider: type: string description: Transport provider for the simulation run enum: - vapi.websocket - vapi.webchat required: - provider CreateSimulationRunDTO: type: object properties: simulations: type: array description: Array of simulations and/or suites to run items: oneOf: - $ref: '#/components/schemas/SimulationRunSimulationEntry' title: Simulation - $ref: '#/components/schemas/SimulationRunSuiteEntry' title: Suite target: description: Target to test against oneOf: - $ref: '#/components/schemas/SimulationRunTargetAssistant' title: Assistant - $ref: '#/components/schemas/SimulationRunTargetSquad' title: Squad iterations: type: number minimum: 1 description: 'Number of times to run each simulation (default: 1)' default: 1 transport: description: Transport configuration for the simulation runs allOf: - $ref: '#/components/schemas/SimulationRunTransportConfiguration' required: - simulations - target SimulationRunItemCounts: type: object properties: total: type: number description: Total number of run items passed: type: number description: Number of passed run items failed: type: number description: Number of failed run items running: type: number description: Number of running/evaluating run items queued: type: number description: Number of queued run items canceled: type: number description: Number of canceled run items required: - total - passed - failed - running - queued - canceled SimulationRun: type: object properties: id: type: string description: Unique identifier for the run format: uuid orgId: type: string description: Organization ID format: uuid status: type: string enum: - queued - running - ended description: Current status of the run queuedAt: format: date-time type: string description: When the run was queued startedAt: format: date-time type: string description: When the run started endedAt: format: date-time type: string description: When the run ended endedReason: type: string description: Reason the run ended createdAt: format: date-time type: string description: ISO 8601 date-time when created updatedAt: format: date-time type: string description: ISO 8601 date-time when last updated itemCounts: description: Aggregate counts of run items by status allOf: - $ref: '#/components/schemas/SimulationRunItemCounts' simulations: type: array description: Array of simulations and/or suites to run items: oneOf: - $ref: '#/components/schemas/SimulationRunSimulationEntry' title: Simulation - $ref: '#/components/schemas/SimulationRunSuiteEntry' title: Suite target: description: Target to test against oneOf: - $ref: '#/components/schemas/SimulationRunTargetAssistant' title: Assistant - $ref: '#/components/schemas/SimulationRunTargetSquad' title: Squad iterations: type: number minimum: 1 description: 'Number of times to run each simulation (default: 1)' default: 1 transport: description: Transport configuration for the simulation runs allOf: - $ref: '#/components/schemas/SimulationRunTransportConfiguration' required: - id - orgId - status - queuedAt - createdAt - updatedAt - simulations - target SimulationRunItemCallMonitor: type: object properties: listenUrl: type: string description: This is the WebSocket URL to listen to the live call audio (combined both parties). SimulationRunItemCallMetadata: type: object properties: transcript: type: string description: This is the transcript of the conversation. messages: type: array description: This is the list of conversation messages in OpenAI format. items: type: object recordingUrl: type: string description: This is the URL to the call recording. monitor: description: This is the call monitoring data (live listen URL). allOf: - $ref: '#/components/schemas/SimulationRunItemCallMonitor' SimulationRunItemMetadata: type: object properties: assistant: type: object description: This is a snapshot of the assistant at run creation time. additionalProperties: true squad: type: object description: This is a snapshot of the squad at run creation time. additionalProperties: true scenario: type: object description: This is a snapshot of the scenario at run creation time. additionalProperties: true personality: type: object description: This is a snapshot of the personality at run creation time. additionalProperties: true simulation: type: object description: This is a snapshot of the simulation at run creation time. additionalProperties: true call: description: This is the call-related data (transcript, messages, recording). allOf: - $ref: '#/components/schemas/SimulationRunItemCallMetadata' hooks: type: object description: Hook execution state for this run item (used for idempotency + debugging). additionalProperties: true StructuredOutputEvaluationResult: type: object properties: structuredOutputId: type: string description: 'This is the ID of the structured output that was evaluated. Will be ''inline'' for inline structured output definitions.' name: type: string description: This is the name of the structured output. extractedValue: description: This is the value extracted from the call by the structured output. oneOf: - type: number - type: string - type: boolean - type: 'null' expectedValue: description: This is the expected value that was defined in the evaluation plan. oneOf: - type: number - type: string - type: boolean comparator: type: string description: This is the comparison operator used for evaluation. enum: - '=' - '!=' - '>' - < - '>=' - <= passed: type: boolean description: This indicates whether the evaluation passed (extracted value matched expected value using comparator). required: type: boolean description: This indicates whether this evaluation was required for the simulation to pass. error: type: string description: This contains any error that occurred during extraction. isSkipped: type: boolean description: This indicates whether this evaluation was skipped (e.g., multimodal in chat mode). skipReason: type: string description: This contains the reason for skipping the evaluation. required: - structuredOutputId - name - extractedValue - expectedValue - comparator - passed - required LatencyMetrics: type: object properties: turnCount: type: number description: This is the number of conversation turns. avgTurn: type: number description: This is the average total turn latency in milliseconds. avgTranscriber: type: number description: This is the average transcriber latency in milliseconds. avgModel: type: number description: This is the average LLM/model latency in milliseconds. avgVoice: type: number description: This is the average voice/TTS latency in milliseconds. avgEndpointing: type: number description: This is the average endpointing latency in milliseconds. required: - turnCount SimulationRunItemResults: type: object properties: evaluations: description: This is the list of results from structured output evaluations. type: array items: $ref: '#/components/schemas/StructuredOutputEvaluationResult' passed: type: boolean description: This indicates whether all required evaluations passed. latencyMetrics: description: This contains the latency metrics collected from the call. allOf: - $ref: '#/components/schemas/LatencyMetrics' required: - evaluations - passed SimulationRunItemImprovementSuggestion: type: object properties: issue: type: string description: This is the issue identified. suggestion: type: string description: This is the suggested improvement. required: - issue - suggestion SimulationRunItemImprovements: type: object properties: analysis: type: string description: This is a summary analysis of why evaluations failed. systemPromptSuggestions: description: This is the list of suggestions for improving the system prompt. type: array items: $ref: '#/components/schemas/SimulationRunItemImprovementSuggestion' toolSuggestions: description: This is the list of suggestions for improving tools. type: array items: $ref: '#/components/schemas/SimulationRunItemImprovementSuggestion' scenarioSuggestions: description: This is the list of suggestions for improving the scenario/evaluation plan. type: array items: $ref: '#/components/schemas/SimulationRunItemImprovementSuggestion' suggestedSystemPrompt: type: string description: This is a complete revised system prompt if major changes are needed. required: - analysis - systemPromptSuggestions - toolSuggestions - scenarioSuggestions SimulationRunConfiguration: type: object properties: transport: description: Transport configuration for the simulation run allOf: - $ref: '#/components/schemas/SimulationRunTransportConfiguration' SimulationRunItem: type: object properties: id: type: string description: This is the unique identifier for the simulation run item. format: uuid orgId: type: string description: This is the unique identifier for the organization. format: uuid simulationId: type: string description: This is the ID of the simulation this run belongs to. format: uuid status: type: string description: This is the current status of the run. enum: - queued - running - evaluating - passed - failed - canceled queuedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the run was queued. startedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the run started. completedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the run completed. failedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the run failed. canceledAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the run was canceled. failureReason: type: string description: This is the reason for failure. maxLength: 2000 callId: type: string description: This is the ID of the target Vapi call (the assistant being tested). format: uuid createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the run item was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the run item was last updated. runId: type: string description: This is the ID of the parent run (batch/group). format: uuid hooks: type: array description: Hooks configured for this simulation run item items: oneOf: - $ref: '#/components/schemas/SimulationHookCallStarted' title: SimulationHookCallStarted - $ref: '#/components/schemas/SimulationHookCallEnded' title: SimulationHookCallEnded iterationNumber: type: number description: This is the iteration number (1-indexed) when run with iterations > 1. default: 1 sessionId: type: string description: This is the session ID for chat-based simulations (webchat transport). format: uuid scenarioId: type: string description: This is the scenario ID at run creation time. format: uuid personalityId: type: string description: This is the personality ID at run creation time. format: uuid metadata: description: This is the metadata containing snapshots and call data. allOf: - $ref: '#/components/schemas/SimulationRunItemMetadata' results: description: This is the results of the simulation run. allOf: - $ref: '#/components/schemas/SimulationRunItemResults' improvementSuggestions: description: This is the AI-generated improvement suggestions for failed runs. allOf: - $ref: '#/components/schemas/SimulationRunItemImprovements' configurations: description: This is the configuration for how this simulation run executes. allOf: - $ref: '#/components/schemas/SimulationRunConfiguration' required: - id - orgId - simulationId - status - queuedAt - createdAt - updatedAt CreateSimulationSuiteDTO: type: object properties: name: type: string description: This is the name of the simulation suite. maxLength: 80 example: Checkout Flow Tests slackWebhookUrl: type: string description: This is the Slack webhook URL for notifications. simulationIds: description: This is the list of simulation IDs to include in the suite. type: array items: type: string path: type: string nullable: true description: 'Optional folder path for organizing simulation suites. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ required: - name - simulationIds SimulationSuite: type: object properties: id: type: string description: This is the unique identifier for the simulation suite. format: uuid orgId: type: string description: This is the unique identifier for the organization this suite belongs to. format: uuid createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the suite was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the suite was last updated. name: type: string description: This is the name of the simulation suite. maxLength: 80 example: Checkout Flow Tests slackWebhookUrl: type: string description: This is the Slack webhook URL for notifications. path: type: string nullable: true description: 'Optional folder path for organizing simulation suites. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ simulationIds: description: This is the list of simulation IDs in this suite. type: array items: type: string required: - id - orgId - createdAt - updatedAt - name - simulationIds UpdateSimulationSuiteDTO: type: object properties: name: type: string description: This is the name of the simulation suite. maxLength: 80 slackWebhookUrl: type: string description: This is the Slack webhook URL for notifications. simulationIds: description: This is the list of simulation IDs to include in the suite (replaces existing). type: array items: type: string path: type: string nullable: true description: 'Optional folder path for organizing simulation suites. Supports up to 3 levels (e.g., "dept/feature/variant"). Set to null to remove from folder.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ GenerateScenariosDTO: type: object properties: assistantId: type: string description: ID of the assistant to generate scenarios for squadId: type: string description: ID of the squad to generate scenarios for GeneratedScenario: type: object properties: name: type: string description: Short descriptive name instructions: type: string description: Instructions for the tester category: type: string enum: - happy_path - edge_case - failure_mode description: Scenario category reasoning: type: string description: Why this scenario is valuable required: - name - instructions - category - reasoning GenerateScenariosResponse: type: object properties: scenarios: description: Generated scenarios type: array items: $ref: '#/components/schemas/GeneratedScenario' coverageNotes: type: string description: Summary of test coverage required: - scenarios - coverageNotes CreateSimulationDTO: type: object properties: name: type: string description: This is an optional friendly name for the simulation. maxLength: 80 example: Eligible Path with Confused User scenarioId: type: string description: This is the ID of the scenario to use for this simulation. format: uuid personalityId: type: string description: This is the ID of the personality to use for this simulation. format: uuid path: type: string nullable: true description: 'Optional folder path for organizing simulations. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ required: - scenarioId - personalityId Simulation: type: object properties: id: type: string description: This is the unique identifier for the simulation. format: uuid orgId: type: string description: This is the unique identifier for the organization this simulation belongs to. format: uuid createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the simulation was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the simulation was last updated. name: type: string description: This is an optional friendly name for the simulation. maxLength: 80 example: Eligible Path with Confused User scenarioId: type: string description: This is the ID of the scenario to use for this simulation. format: uuid personalityId: type: string description: This is the ID of the personality to use for this simulation. format: uuid path: type: string nullable: true description: 'Optional folder path for organizing simulations. Supports up to 3 levels (e.g., "dept/feature/variant"). Maps to GitOps resource folder structure.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ required: - id - orgId - createdAt - updatedAt - scenarioId - personalityId UpdateSimulationDTO: type: object properties: name: type: string description: This is an optional friendly name for the simulation. maxLength: 80 scenarioId: type: string description: This is the ID of the scenario to use for this simulation. format: uuid personalityId: type: string description: This is the ID of the personality to use for this simulation. format: uuid path: type: string nullable: true description: 'Optional folder path for organizing simulations. Supports up to 3 levels (e.g., "dept/feature/variant"). Set to null to remove from folder.' maxLength: 255 pattern: /^[a-zA-Z0-9][a-zA-Z0-9._-]*(?:\/[a-zA-Z0-9][a-zA-Z0-9._-]*){0,2}$/ SimulationConcurrencyResponse: type: object properties: orgId: type: string concurrencyLimit: type: number description: 'Max call slots for simulations (each voice simulation uses 2 call slots: tester + target)' activeSimulations: type: number description: Number of call slots currently in use by running simulations availableToStart: type: number description: Number of voice simulations that can start now (available call slots / 2) createdAt: type: string format: date-time nullable: true updatedAt: type: string format: date-time nullable: true isDefault: type: boolean description: True if org is using platform default concurrency limit required: - orgId - concurrencyLimit - activeSimulations - availableToStart - createdAt - updatedAt - isDefault BarInsightMetadata: type: object properties: xAxisLabel: type: string minLength: 1 maxLength: 40 yAxisLabel: type: string minLength: 1 maxLength: 40 yAxisMin: type: number yAxisMax: type: number name: type: string minLength: 1 maxLength: 255 InsightTimeRangeWithStep: type: object properties: step: type: string description: 'This is the group by step for aggregation. If not provided, defaults to group by day.' enum: - minute - hour - day - week - month - quarter - year start: type: object description: 'This is the start date for the time range. Should be a valid ISO 8601 date-time string or relative time string. If not provided, defaults to the 7 days ago. Relative time strings of the format "-{number}{unit}" are allowed. Valid units are: - d: days - h: hours - w: weeks - m: months - y: years' example: '"2025-01-01" or "-7d" or "now"' end: type: object description: 'This is the end date for the time range. Should be a valid ISO 8601 date-time string or relative time string. If not provided, defaults to now. Relative time strings of the format "-{number}{unit}" are allowed. Valid units are: - d: days - h: hours - w: weeks - m: months - y: years' example: '"2025-01-01" or "now"' timezone: type: string description: 'This is the timezone you want to set for the query. If not provided, defaults to UTC.' BarInsight: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `bar` to create a bar insight.' enum: - bar formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' metadata: description: This is the metadata for the insight. allOf: - $ref: '#/components/schemas/BarInsightMetadata' timeRange: $ref: '#/components/schemas/InsightTimeRangeWithStep' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn - $ref: '#/components/schemas/JSONQueryOnEventsTable' title: JSONQueryOnEventsTable id: type: string description: This is the unique identifier for the Insight. orgId: type: string description: This is the unique identifier for the org that this Insight belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the Insight was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the Insight was last updated. systemKey: type: string description: Stable server-owned identifier for system-created insights. required: - type - queries - id - orgId - createdAt - updatedAt InsightTimeRange: type: object properties: start: type: object description: 'This is the start date for the time range. Should be a valid ISO 8601 date-time string or relative time string. If not provided, defaults to the 7 days ago. Relative time strings of the format "-{number}{unit}" are allowed. Valid units are: - d: days - h: hours - w: weeks - m: months - y: years' example: '"2025-01-01" or "-7d" or "now"' end: type: object description: 'This is the end date for the time range. Should be a valid ISO 8601 date-time string or relative time string. If not provided, defaults to now. Relative time strings of the format "-{number}{unit}" are allowed. Valid units are: - d: days - h: hours - w: weeks - m: months - y: years' example: '"2025-01-01" or "now"' timezone: type: string description: 'This is the timezone you want to set for the query. If not provided, defaults to UTC.' PieInsight: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `pie` to create a pie insight.' enum: - pie formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' timeRange: $ref: '#/components/schemas/InsightTimeRange' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn id: type: string description: This is the unique identifier for the Insight. orgId: type: string description: This is the unique identifier for the org that this Insight belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the Insight was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the Insight was last updated. systemKey: type: string description: Stable server-owned identifier for system-created insights. required: - type - queries - id - orgId - createdAt - updatedAt LineInsightMetadata: type: object properties: xAxisLabel: type: string minLength: 1 maxLength: 40 yAxisLabel: type: string minLength: 1 maxLength: 40 yAxisMin: type: number yAxisMax: type: number name: type: string minLength: 1 maxLength: 255 LineInsight: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `line` to create a line insight.' enum: - line formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' metadata: description: This is the metadata for the insight. allOf: - $ref: '#/components/schemas/LineInsightMetadata' timeRange: $ref: '#/components/schemas/InsightTimeRangeWithStep' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn id: type: string description: This is the unique identifier for the Insight. orgId: type: string description: This is the unique identifier for the org that this Insight belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the Insight was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the Insight was last updated. systemKey: type: string description: Stable server-owned identifier for system-created insights. required: - type - queries - id - orgId - createdAt - updatedAt TextInsight: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `text` to create a text insight.' enum: - text formula: type: object description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' timeRange: $ref: '#/components/schemas/InsightTimeRange' queries: type: array description: 'These are the queries to run to generate the insight. For Text Insights, we only allow a single query, or require a formula if multiple queries are provided' items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn id: type: string description: This is the unique identifier for the Insight. orgId: type: string description: This is the unique identifier for the org that this Insight belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the Insight was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the Insight was last updated. systemKey: type: string description: Stable server-owned identifier for system-created insights. required: - type - queries - id - orgId - createdAt - updatedAt UpdateBarInsightFromCallTableDTO: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `bar` to create a bar insight.' enum: - bar formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' metadata: description: This is the metadata for the insight. allOf: - $ref: '#/components/schemas/BarInsightMetadata' timeRange: $ref: '#/components/schemas/InsightTimeRangeWithStep' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn - $ref: '#/components/schemas/JSONQueryOnEventsTable' title: JSONQueryOnEventsTable UpdatePieInsightFromCallTableDTO: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `pie` to create a pie insight.' enum: - pie formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' timeRange: $ref: '#/components/schemas/InsightTimeRange' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn UpdateLineInsightFromCallTableDTO: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `line` to create a line insight.' enum: - line formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' metadata: description: This is the metadata for the insight. allOf: - $ref: '#/components/schemas/LineInsightMetadata' timeRange: $ref: '#/components/schemas/InsightTimeRangeWithStep' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn UpdateTextInsightFromCallTableDTO: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `text` to create a text insight.' enum: - text formula: type: object description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' timeRange: $ref: '#/components/schemas/InsightTimeRange' queries: type: array description: 'These are the queries to run to generate the insight. For Text Insights, we only allow a single query, or require a formula if multiple queries are provided' items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn CreateBarInsightFromCallTableDTO: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `bar` to create a bar insight.' enum: - bar formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' metadata: description: This is the metadata for the insight. allOf: - $ref: '#/components/schemas/BarInsightMetadata' timeRange: $ref: '#/components/schemas/InsightTimeRangeWithStep' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn - $ref: '#/components/schemas/JSONQueryOnEventsTable' title: JSONQueryOnEventsTable required: - type - queries CreatePieInsightFromCallTableDTO: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `pie` to create a pie insight.' enum: - pie formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' timeRange: $ref: '#/components/schemas/InsightTimeRange' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn required: - type - queries CreateLineInsightFromCallTableDTO: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `line` to create a line insight.' enum: - line formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' metadata: description: This is the metadata for the insight. allOf: - $ref: '#/components/schemas/LineInsightMetadata' timeRange: $ref: '#/components/schemas/InsightTimeRangeWithStep' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn required: - type - queries CreateTextInsightFromCallTableDTO: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `text` to create a text insight.' enum: - text formula: type: object description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' timeRange: $ref: '#/components/schemas/InsightTimeRange' queries: type: array description: 'These are the queries to run to generate the insight. For Text Insights, we only allow a single query, or require a formula if multiple queries are provided' items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn required: - type - queries JSONQueryOnCallTableWithStringTypeColumn: type: object properties: type: type: string description: This is the type of query. Only allowed type is "vapiql-json". example: vapiql-json enum: - vapiql-json table: type: string description: This is the table that will be queried. enum: - call filters: type: array description: 'This is the filters to apply to the insight. The discriminator automatically selects the correct filter type based on column and operator.' items: oneOf: - $ref: '#/components/schemas/FilterStringTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterStringArrayTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterNumberTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterNumberArrayTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterDateTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterStructuredOutputColumnOnCallTable' column: type: string enum: - id - artifact.structuredOutputs[OutputID] description: 'This is the column that will be queried in the selected table. Available columns depend on the selected table. String Type columns are columns where the rows store String data' example: id operation: type: string enum: - count description: 'This is the aggregation operation to perform on the column. When the column is a string type, the operation must be "count".' example: count name: type: string description: 'This is the name of the query. It will be used to label the query in the insight board on the UI.' example: Total Calls required: - type - table - column - operation JSONQueryOnCallTableWithNumberTypeColumn: type: object properties: type: type: string description: This is the type of query. Only allowed type is "vapiql-json". example: vapiql-json enum: - vapiql-json table: type: string description: This is the table that will be queried. enum: - call filters: type: array description: 'This is the filters to apply to the insight. The discriminator automatically selects the correct filter type based on column and operator.' items: oneOf: - $ref: '#/components/schemas/FilterStringTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterStringArrayTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterNumberTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterNumberArrayTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterDateTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterStructuredOutputColumnOnCallTable' column: type: string enum: - cost - duration - averageModelLatency - averageVoiceLatency - averageTranscriberLatency - averageTurnLatency - averageEndpointingLatency - artifact.structuredOutputs[OutputID] description: 'This is the column that will be queried in the selected table. Available columns depend on the selected table. Number Type columns are columns where the rows store Number data' example: duration operation: type: string enum: - average - sum - min - max description: 'This is the aggregation operation to perform on the column. When the column is a number type, the operation must be one of the following: - average - sum - min - max' example: sum name: type: string description: 'This is the name of the query. It will be used to label the query in the insight board on the UI.' example: Total Calls required: - type - table - column - operation JSONQueryOnCallTableWithStructuredOutputColumn: type: object properties: type: type: string description: This is the type of query. Only allowed type is "vapiql-json". example: vapiql-json enum: - vapiql-json table: type: string description: This is the table that will be queried. enum: - call filters: type: array description: 'This is the filters to apply to the insight. The discriminator automatically selects the correct filter type based on column and operator.' items: oneOf: - $ref: '#/components/schemas/FilterStringTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterStringArrayTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterNumberTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterNumberArrayTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterDateTypeColumnOnCallTable' - $ref: '#/components/schemas/FilterStructuredOutputColumnOnCallTable' column: type: string enum: - artifact.structuredOutputs[OutputID] description: 'This is the column that will be queried in the call table. Structured Output Type columns are only to query on artifact.structuredOutputs[OutputID] column.' example: artifact.structuredOutputs[OutputID] operation: type: string enum: - average - count - sum - min - max description: 'This is the aggregation operation to perform on the column. When the column is a structured output type, the operation depends on the value of the structured output. If the structured output is a string or boolean, the operation must be "count". If the structured output is a number, the operation can be "average", "sum", "min", or "max".' example: count name: type: string description: 'This is the name of the query. It will be used to label the query in the insight board on the UI.' example: Total Calls required: - type - table - column - operation JSONQueryOnEventsTable: type: object properties: type: type: string description: This is the type of query. Only allowed type is "vapiql-json". example: vapiql-json enum: - vapiql-json table: type: string description: 'This is the table that will be queried. Must be "events" for event-based insights.' enum: - events 'on': type: string description: The event type to query example: assistant.model.requestFailed enum: - call.started - call.ended - call.inProgress - call.queued - call.transportConnected - call.transportDisconnected - call.transportReconnected - call.transferInitiated - call.transferCompleted - call.transferFailed - call.transferCancelled - call.handoffInitiated - call.handoffCompleted - call.handoffFailed - call.assistantSwapped - call.assistantStarted - call.customerJoined - call.customerLeft - call.controlReceived - call.listenStarted - call.recordingStarted - call.recordingPaused - call.recordingResumed - call.voicemailDetected - call.voicemailNotDetected - call.dtmfReceived - call.dtmfSent - call.amdDetected - call.hookTriggered - call.hookSucceeded - call.hookFailed - call.statusReceived - call.silenceTimeout - call.microphoneTimeout - call.maxDurationReached - assistant.voice.requestStarted - assistant.voice.requestSucceeded - assistant.voice.requestFailed - assistant.voice.connectionOpened - assistant.voice.connectionClosed - assistant.voice.firstAudioReceived - assistant.voice.audioChunkReceived - assistant.voice.generationSucceeded - assistant.voice.generationFailed - assistant.voice.textPushed - assistant.voice.reconnecting - assistant.voice.cleanup - assistant.voice.clearing - assistant.voice.voiceSwitched - assistant.model.requestStarted - assistant.model.requestSucceeded - assistant.model.requestFailed - assistant.model.requestAttemptStarted - assistant.model.requestAttemptSucceeded - assistant.model.requestAttemptFailed - assistant.model.connectionOpened - assistant.model.connectionClosed - assistant.model.firstTokenReceived - assistant.model.tokenReceived - assistant.model.responseSucceeded - assistant.model.responseFailed - assistant.model.toolCallsReceived - assistant.model.reconnecting - assistant.model.cleanup - assistant.model.clearing - assistant.tool.started - assistant.tool.completed - assistant.tool.failed - assistant.tool.delayedMessageSent - assistant.tool.timeout - assistant.tool.asyncCallbackReceived - assistant.transcriber.requestStarted - assistant.transcriber.requestSucceeded - assistant.transcriber.requestFailed - assistant.transcriber.connectionOpened - assistant.transcriber.connectionClosed - assistant.transcriber.partialTranscript - assistant.transcriber.finalTranscript - assistant.transcriber.keepAlive - assistant.transcriber.reconnecting - assistant.transcriber.cleanup - assistant.transcriber.clearing - assistant.transcriber.transcriptIgnored - assistant.transcriber.languageSwitched - assistant.analysis.structuredOutputGenerated - pipeline.turnStarted - pipeline.cleared - pipeline.botSpeechStarted - pipeline.botSpeechStopped - pipeline.userSpeechStarted - pipeline.userSpeechStopped - pipeline.endpointingTriggered - pipeline.firstMessageStarted - pipeline.firstMessageCompleted operation: type: string description: 'This is the operation to perform on matching events. - "count": Returns the raw count of matching events - "percentage": Returns (count of matching events / total calls) * 100' example: count enum: - count - percentage filters: type: array description: 'These are the filters to apply to the events query. Each filter filters on a field specific to the event type.' items: oneOf: - $ref: '#/components/schemas/EventsTableStringCondition' - $ref: '#/components/schemas/EventsTableNumberCondition' - $ref: '#/components/schemas/EventsTableBooleanCondition' name: type: string description: 'This is the name of the query. It will be used to label the query in the insight board on the UI.' example: Model Failures required: - type - table - 'on' - operation FilterStringTypeColumnOnCallTable: type: object properties: column: type: string description: 'This is the column in the call table that will be filtered on. String Type columns are columns where the rows store data as a string. Must be a valid column for the selected table.' example: assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - customerNumber - status - endedReason - forwardedPhoneNumber - campaignId operator: type: string description: 'This is the operator to use for the filter. For string type columns, the operator must be "=", "!=", "contains", "not contains"' example: '"=" or "!="' enum: - '=' - '!=' - contains - not_contains value: type: string description: This is the value to filter on. required: - column - operator - value FilterNumberTypeColumnOnCallTable: type: object properties: column: type: string description: 'This is the column in the call table that will be filtered on. Number Type columns are columns where the rows store data as a number. Must be a valid column for the selected table.' example: duration enum: - duration - cost - averageModelLatency - averageVoiceLatency - averageTranscriberLatency - averageTurnLatency - averageEndpointingLatency operator: type: string description: 'This is the operator to use for the filter. For number type columns, the operator must be "=", ">", "<", ">=", "<="' example: '"=" or ">" or "<" or ">=" or "<="' enum: - '=' - '!=' - '>' - < - '>=' - <= value: type: number description: This is the value to filter on. required: - column - operator - value FilterDateTypeColumnOnCallTable: type: object properties: column: type: string description: 'This is the column in the call table that will be filtered on. Date Type columns are columns where the rows store data as a date. Must be a valid column for the selected table.' example: created_at enum: - startedAt - endedAt operator: type: string description: 'This is the operator to use for the filter. For date type columns, the operator must be "=", ">", "<", ">=", "<="' example: '"=" or ">" or "<" or ">=" or "<="' enum: - '=' - '!=' - '>' - < - '>=' - <= value: type: string description: 'This is the value to filter on. Must be a valid ISO 8601 date-time string.' example: '2025-01-01T00:00:00Z' required: - column - operator - value FilterStructuredOutputColumnOnCallTable: type: object properties: column: type: string description: 'This is the column in the call table that will be filtered on. Structured Output Type columns are only to filter on artifact.structuredOutputs[OutputID] column.' example: artifact.structuredOutputs[OutputID] enum: - artifact.structuredOutputs[OutputID] operator: type: string description: 'This is the operator to use for the filter. The operator depends on the value type of the structured output. If the structured output is a string or boolean, the operator must be "=", "!=" If the structured output is a number, the operator must be "=", ">", "<", ">=", "<=" If the structured output is an array, the operator must be "in" or "not_in"' example: '"=" or ">" or "<" or "in" or "not_in"' enum: - '=' - '!=' - '>' - < - '>=' - <= - in - not_in - contains - not_contains - is_empty - is_not_empty value: type: object description: 'This is the value to filter on. The value type depends on the structured output type being filtered.' required: - column - operator - value FilterStringArrayTypeColumnOnCallTable: type: object properties: column: type: string description: 'This is the column in the call table that will be filtered on. String Array Type columns are the same as String Type columns, but provides the ability to filter on multiple values provided as an array. Must be a valid column for the selected table.' example: assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - customerNumber - status - endedReason - forwardedPhoneNumber - campaignId operator: type: string description: 'This is the operator to use for the filter. The operator must be `in` or `not_in`.' example: '"in" or "not_in"' enum: - in - not_in - is_empty - is_not_empty value: description: These are the values to filter on. type: array items: type: string required: - column - operator - value FilterNumberArrayTypeColumnOnCallTable: type: object properties: column: type: string description: 'This is the column in the call table that will be filtered on. Number Array Type columns are the same as Number Type columns, but provides the ability to filter on multiple values provided as an array. Must be a valid column for the selected table.' example: duration enum: - duration - cost - averageModelLatency - averageVoiceLatency - averageTranscriberLatency - averageTurnLatency - averageEndpointingLatency operator: type: string description: 'This is the operator to use for the filter. The operator must be `in` or `not_in`.' example: '"in" or "not_in"' enum: - in - not_in - is_empty - is_not_empty value: description: This is the value to filter on. type: array items: type: number required: - column - operator - value EventsTableStringCondition: type: object properties: column: type: string description: The string field name from the event data example: provider operator: type: string description: String comparison operator example: '=' enum: - '=' - '!=' - contains - notContains value: type: string description: The string value to compare example: openai required: - column - operator - value EventsTableNumberCondition: type: object properties: column: type: string description: The number field name from the event data example: latency operator: type: string description: Number comparison operator example: '>=' enum: - '=' - '!=' - '>' - '>=' - < - <= value: type: number description: The number value to compare example: 1000 required: - column - operator - value EventsTableBooleanCondition: type: object properties: column: type: string description: The boolean field name from the event data example: success operator: type: string description: Boolean comparison operator example: '=' enum: - '=' value: type: boolean description: The boolean value to compare example: true required: - column - operator - value BarInsightFromCallTable: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `bar` to create a bar insight.' enum: - bar formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' metadata: description: This is the metadata for the insight. allOf: - $ref: '#/components/schemas/BarInsightMetadata' timeRange: $ref: '#/components/schemas/InsightTimeRangeWithStep' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn - $ref: '#/components/schemas/JSONQueryOnEventsTable' title: JSONQueryOnEventsTable required: - type - queries PieInsightFromCallTable: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `pie` to create a pie insight.' enum: - pie formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' timeRange: $ref: '#/components/schemas/InsightTimeRange' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn required: - type - queries LineInsightFromCallTable: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `line` to create a line insight.' enum: - line formulas: type: array description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' metadata: description: This is the metadata for the insight. allOf: - $ref: '#/components/schemas/LineInsightMetadata' timeRange: $ref: '#/components/schemas/InsightTimeRangeWithStep' groupBy: type: string description: 'This is the group by column for the insight when table is `call`. These are the columns to group the results by. All results are grouped by the time range step by default.' example: - assistant_id enum: - assistantId - workflowId - squadId - phoneNumberId - type - endedReason - customerNumber - campaignId - artifact.structuredOutputs[OutputID] queries: type: array description: These are the queries to run to generate the insight. items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn required: - type - queries TextInsightFromCallTable: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: 'This is the type of the Insight. It is required to be `text` to create a text insight.' enum: - text formula: type: object description: 'Formulas are mathematical expressions applied on the data returned by the queries to transform them before being used to create the insight. The formulas needs to be a valid mathematical expression, supported by MathJS - https://mathjs.org/docs/expressions/syntax.html A formula is created by using the query names as the variable. The formulas must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. For example, if you have 2 queries, ''Was Booking Made'' and ''Average Call Duration'', you can create a formula like this: ``` {{[''Query 1'']}} / {{[''Query 2'']}} * 100 ``` ``` ({{[Query 1]}} * 10) + {{[Query 2]}} ``` This will take the You can also use the query names as the variable in the formula.' items: $ref: '#/components/schemas/InsightFormula' timeRange: $ref: '#/components/schemas/InsightTimeRange' queries: type: array description: 'These are the queries to run to generate the insight. For Text Insights, we only allow a single query, or require a formula if multiple queries are provided' items: oneOf: - $ref: '#/components/schemas/JSONQueryOnCallTableWithStringTypeColumn' title: JSONQueryOnCallTableWithStringTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithNumberTypeColumn' title: JSONQueryOnCallTableWithNumberTypeColumn - $ref: '#/components/schemas/JSONQueryOnCallTableWithStructuredOutputColumn' title: JSONQueryOnCallTableWithStructuredOutputColumn required: - type - queries InsightFormula: type: object properties: name: type: string description: 'This is the name of the formula. It will be used to label the formula in the insight board on the UI.' example: Booking Rate minLength: 1 maxLength: 255 formula: type: string description: 'This is the formula to calculate the insight from the queries. The formula needs to be a valid mathematical expression. The formula must contain at least one query name in the LiquidJS format {{query_name}} or {{[''query name'']}} which will be substituted with the query result. Any MathJS formula is allowed - https://mathjs.org/docs/expressions/syntax.html Common valid math operations are +, -, *, /, %' minLength: 1 maxLength: 1000 required: - formula InsightRunFormatPlan: type: object properties: format: type: string description: 'This is the format of the data to return. If not provided, defaults to "raw". Raw provides the data as fetched from the database, with formulas evaluated. Recharts provides the data in a format that can is ready to be used by recharts.js to render charts.' example: raw enum: - raw - recharts InsightRunDTO: type: object properties: formatPlan: $ref: '#/components/schemas/InsightRunFormatPlan' timeRangeOverride: description: 'This is the optional time range override for the insight. If provided, overrides every field in the insight''s timeRange. If this is provided with missing fields, defaults will be used, not the insight''s timeRange. start default - "-7d" end default - "now" step default - "day" For Pie and Text Insights, step will be ignored even if provided.' example: '{ start: "2025-01-01", end: "2025-01-07", step: "day" }' allOf: - $ref: '#/components/schemas/InsightTimeRangeWithStep' assistantId: type: string description: 'Optional runtime assistant scope for dashboards. This is applied to call-table queries without mutating the saved insight.' InsightRunResponse: type: object properties: id: type: string insightId: type: string orgId: type: string createdAt: format: date-time type: string updatedAt: format: date-time type: string required: - id - insightId - orgId - createdAt - updatedAt Insight: type: object properties: name: type: string description: This is the name of the Insight. minLength: 1 maxLength: 255 type: type: string description: This is the type of the Insight. enum: - bar - line - pie - text id: type: string description: This is the unique identifier for the Insight. orgId: type: string description: This is the unique identifier for the org that this Insight belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the Insight was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the Insight was last updated. systemKey: type: string description: Stable server-owned identifier for system-created insights. required: - type - id - orgId - createdAt - updatedAt InsightPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/Insight' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata CreateEvalDTO: type: object properties: messages: type: array description: 'This is the mock conversation that will be used to evaluate the flow of the conversation. Mock Messages are used to simulate the flow of the conversation Evaluation Messages are used as checkpoints in the flow where the model''s response to previous conversation needs to be evaluated to check the content and tool calls' example: '[{ role: "user", content: "Hello, how are you?" }, { role: "assistant", judgePlan: { type: "exact", content: "I am good, thank you!" } }]' items: oneOf: - $ref: '#/components/schemas/ChatEvalAssistantMessageMock' title: ChatEvalAssistantMessageMock - $ref: '#/components/schemas/ChatEvalSystemMessageMock' title: ChatEvalSystemMessageMock - $ref: '#/components/schemas/ChatEvalToolResponseMessageMock' title: ChatEvalToolResponseMessageMock - $ref: '#/components/schemas/ChatEvalToolResponseMessageEvaluation' title: ChatEvalToolResponseMessageEvaluation - $ref: '#/components/schemas/ChatEvalUserMessageMock' title: ChatEvalUserMessageMock - $ref: '#/components/schemas/ChatEvalAssistantMessageEvaluation' title: ChatEvalAssistantMessageEvaluation name: type: string description: 'This is the name of the eval. It helps identify what the eval is checking for.' example: Verified User Flow Eval minLength: 1 maxLength: 80 description: type: string description: 'This is the description of the eval. This helps describe the eval and its purpose in detail. It will not be used to evaluate the flow of the conversation.' example: This eval checks if the user flow is verified. maxLength: 500 type: type: string description: 'This is the type of the eval. Currently it is fixed to `chat.mockConversation`.' example: chat.mockConversation enum: - chat.mockConversation required: - messages - type Eval: type: object properties: messages: type: array description: 'This is the mock conversation that will be used to evaluate the flow of the conversation. Mock Messages are used to simulate the flow of the conversation Evaluation Messages are used as checkpoints in the flow where the model''s response to previous conversation needs to be evaluated to check the content and tool calls' example: '[{ role: "user", content: "Hello, how are you?" }, { role: "assistant", judgePlan: { type: "exact", content: "I am good, thank you!" } }]' items: oneOf: - $ref: '#/components/schemas/ChatEvalAssistantMessageMock' title: ChatEvalAssistantMessageMock - $ref: '#/components/schemas/ChatEvalSystemMessageMock' title: ChatEvalSystemMessageMock - $ref: '#/components/schemas/ChatEvalToolResponseMessageMock' title: ChatEvalToolResponseMessageMock - $ref: '#/components/schemas/ChatEvalToolResponseMessageEvaluation' title: ChatEvalToolResponseMessageEvaluation - $ref: '#/components/schemas/ChatEvalUserMessageMock' title: ChatEvalUserMessageMock - $ref: '#/components/schemas/ChatEvalAssistantMessageEvaluation' title: ChatEvalAssistantMessageEvaluation id: type: string orgId: type: string createdAt: format: date-time type: string updatedAt: format: date-time type: string name: type: string description: 'This is the name of the eval. It helps identify what the eval is checking for.' example: Verified User Flow Eval minLength: 1 maxLength: 80 description: type: string description: 'This is the description of the eval. This helps describe the eval and its purpose in detail. It will not be used to evaluate the flow of the conversation.' example: This eval checks if the user flow is verified. maxLength: 500 type: type: string description: 'This is the type of the eval. Currently it is fixed to `chat.mockConversation`.' example: chat.mockConversation enum: - chat.mockConversation required: - messages - id - orgId - createdAt - updatedAt - type EvalModelListOptions: type: object properties: provider: type: string description: This is the provider of the model. enum: - openai - anthropic - google - groq - custom-llm required: - provider EvalUserEditable: type: object properties: messages: type: array description: 'This is the mock conversation that will be used to evaluate the flow of the conversation. Mock Messages are used to simulate the flow of the conversation Evaluation Messages are used as checkpoints in the flow where the model''s response to previous conversation needs to be evaluated to check the content and tool calls' example: '[{ role: "user", content: "Hello, how are you?" }, { role: "assistant", judgePlan: { type: "exact", content: "I am good, thank you!" } }]' items: oneOf: - $ref: '#/components/schemas/ChatEvalAssistantMessageMock' title: ChatEvalAssistantMessageMock - $ref: '#/components/schemas/ChatEvalSystemMessageMock' title: ChatEvalSystemMessageMock - $ref: '#/components/schemas/ChatEvalToolResponseMessageMock' title: ChatEvalToolResponseMessageMock - $ref: '#/components/schemas/ChatEvalToolResponseMessageEvaluation' title: ChatEvalToolResponseMessageEvaluation - $ref: '#/components/schemas/ChatEvalUserMessageMock' title: ChatEvalUserMessageMock - $ref: '#/components/schemas/ChatEvalAssistantMessageEvaluation' title: ChatEvalAssistantMessageEvaluation name: type: string description: 'This is the name of the eval. It helps identify what the eval is checking for.' example: Verified User Flow Eval minLength: 1 maxLength: 80 description: type: string description: 'This is the description of the eval. This helps describe the eval and its purpose in detail. It will not be used to evaluate the flow of the conversation.' example: This eval checks if the user flow is verified. maxLength: 500 type: type: string description: 'This is the type of the eval. Currently it is fixed to `chat.mockConversation`.' example: chat.mockConversation enum: - chat.mockConversation required: - messages - type ChatEvalAssistantMessageMockToolCall: type: object properties: name: type: string description: 'This is the name of the tool that will be called. It should be one of the tools created in the organization.' example: get_weather maxLength: 100 arguments: type: object description: This is the arguments that will be passed to the tool call. example: '"{"city": "San Francisco"}"' required: - name ChatEvalAssistantMessageMock: type: object properties: role: type: string enum: - assistant description: 'This is the role of the message author. For a mock assistant message, the role is always ''assistant'' @default ''assistant''' default: assistant content: type: string description: 'This is the content of the assistant message. This is the message that the assistant would have sent.' example: The weather in San Francisco is sunny. maxLength: 1000 toolCalls: description: This is the tool calls that will be made by the assistant. example: '[{ name: "get_weather", arguments: { city: "San Francisco" } }]' type: array items: $ref: '#/components/schemas/ChatEvalAssistantMessageMockToolCall' required: - role ChatEvalSystemMessageMock: type: object properties: role: type: string enum: - system description: 'This is the role of the message author. For a mock system message, the role is always ''system'' @default ''system''' default: system content: type: string description: 'This is the content of the system message that would have been added in the middle of the conversation. Do not include the assistant prompt as a part of this message. It will automatically be fetched during runtime.' example: You are a helpful assistant. required: - role - content ChatEvalToolResponseMessageMock: type: object properties: role: type: string enum: - tool description: 'This is the role of the message author. For a mock tool response message, the role is always ''tool'' @default ''tool''' default: tool content: type: string description: This is the content of the tool response message. JSON Objects should be stringified. examples: - The weather in San Francisco is sunny. - '{weather: sunny}' required: - role - content ChatEvalUserMessageMock: type: object properties: role: type: string enum: - user description: 'This is the role of the message author. For a mock user message, the role is always ''user'' @default ''user''' default: user content: type: string description: 'This is the content of the user message. This is the message that the user would have sent.' example: Hello, how are you? maxLength: 1000 required: - role - content AssistantMessageEvaluationContinuePlan: type: object properties: exitOnFailureEnabled: type: boolean description: 'This is whether the evaluation should exit if the assistant message evaluates to false. By default, it is false and the evaluation will continue. @default false' contentOverride: type: string description: 'This is the content that will be used in the conversation for this assistant turn moving forward if provided. It will override the content received from the model.' example: The weather in San Francisco is sunny. maxLength: 1000 toolCallsOverride: description: 'This is the tool calls that will be used in the conversation for this assistant turn moving forward if provided. It will override the tool calls received from the model.' example: '[{ name: "get_weather", arguments: { city: "San Francisco" } }]' type: array items: $ref: '#/components/schemas/ChatEvalAssistantMessageMockToolCall' ChatEvalAssistantMessageEvaluation: type: object properties: role: type: string enum: - assistant description: 'This is the role of the message author. For an assistant message evaluation, the role is always ''assistant'' @default ''assistant''' default: assistant judgePlan: description: 'This is the judge plan that instructs how to evaluate the assistant message. The assistant message can be evaluated against fixed content (exact match or RegEx) or with an LLM-as-judge by defining the evaluation criteria in a prompt.' oneOf: - $ref: '#/components/schemas/AssistantMessageJudgePlanExact' title: AssistantMessageJudgePlanExact - $ref: '#/components/schemas/AssistantMessageJudgePlanRegex' title: AssistantMessageJudgePlanRegex - $ref: '#/components/schemas/AssistantMessageJudgePlanAI' title: AssistantMessageJudgePlanAI continuePlan: description: 'This is the plan for how the overall evaluation will proceed after the assistant message is evaluated. This lets you configure whether to stop the evaluation if this message fails, and whether to override any content for future turns' allOf: - $ref: '#/components/schemas/AssistantMessageEvaluationContinuePlan' required: - role - judgePlan EvalOpenAIModel: type: object properties: provider: type: string description: This is the provider of the model (`openai`). enum: - openai model: type: string description: 'This is the OpenAI model that will be used. When using Vapi OpenAI or your own Azure Credentials, you have the option to specify the region for the selected model. This shouldn''t be specified unless you have a specific reason to do so. Vapi will automatically find the fastest region that make sense. This is helpful when you are required to comply with Data Residency rules. Learn more about Azure regions here https://azure.microsoft.com/en-us/explore/global-infrastructure/data-residency/.' maxLength: 100 enum: - gpt-5.4 - gpt-5.4-mini - gpt-5.4-nano - gpt-5.2 - gpt-5.2-chat-latest - gpt-5.1 - gpt-5.1-chat-latest - gpt-5 - gpt-5-chat-latest - gpt-5-mini - gpt-5-nano - gpt-4.1-2025-04-14 - gpt-4.1-mini-2025-04-14 - gpt-4.1-nano-2025-04-14 - gpt-4.1 - gpt-4.1-mini - gpt-4.1-nano - chatgpt-4o-latest - o3 - o3-mini - o4-mini - o1-mini - o1-mini-2024-09-12 - gpt-4o-mini-2024-07-18 - gpt-4o-mini - gpt-4o - gpt-4o-2024-05-13 - gpt-4o-2024-08-06 - gpt-4o-2024-11-20 - gpt-4-turbo - gpt-4-turbo-2024-04-09 - gpt-4-turbo-preview - gpt-4-0125-preview - gpt-4-1106-preview - gpt-4 - gpt-4-0613 - gpt-3.5-turbo - gpt-3.5-turbo-0125 - gpt-3.5-turbo-1106 - gpt-3.5-turbo-16k - gpt-3.5-turbo-0613 - gpt-4.1-2025-04-14:westus - gpt-4.1-2025-04-14:eastus2 - gpt-4.1-2025-04-14:eastus - gpt-4.1-2025-04-14:westus3 - gpt-4.1-2025-04-14:northcentralus - gpt-4.1-2025-04-14:southcentralus - gpt-4.1-2025-04-14:westeurope - gpt-4.1-2025-04-14:germanywestcentral - gpt-4.1-2025-04-14:polandcentral - gpt-4.1-2025-04-14:spaincentral - gpt-4.1-mini-2025-04-14:westus - gpt-4.1-mini-2025-04-14:eastus2 - gpt-4.1-mini-2025-04-14:eastus - gpt-4.1-mini-2025-04-14:westus3 - gpt-4.1-mini-2025-04-14:northcentralus - gpt-4.1-mini-2025-04-14:southcentralus - gpt-4.1-mini-2025-04-14:westeurope - gpt-4.1-mini-2025-04-14:germanywestcentral - gpt-4.1-mini-2025-04-14:polandcentral - gpt-4.1-mini-2025-04-14:spaincentral - gpt-4.1-nano-2025-04-14:westus - gpt-4.1-nano-2025-04-14:eastus2 - gpt-4.1-nano-2025-04-14:westus3 - gpt-4.1-nano-2025-04-14:northcentralus - gpt-4.1-nano-2025-04-14:southcentralus - gpt-4o-2024-11-20:swedencentral - gpt-4o-2024-11-20:westus - gpt-4o-2024-11-20:eastus2 - gpt-4o-2024-11-20:eastus - gpt-4o-2024-11-20:westus3 - gpt-4o-2024-11-20:southcentralus - gpt-4o-2024-11-20:westeurope - gpt-4o-2024-11-20:germanywestcentral - gpt-4o-2024-11-20:polandcentral - gpt-4o-2024-11-20:spaincentral - gpt-4o-2024-08-06:westus - gpt-4o-2024-08-06:westus3 - gpt-4o-2024-08-06:eastus - gpt-4o-2024-08-06:eastus2 - gpt-4o-2024-08-06:northcentralus - gpt-4o-2024-08-06:southcentralus - gpt-4o-mini-2024-07-18:westus - gpt-4o-mini-2024-07-18:westus3 - gpt-4o-mini-2024-07-18:eastus - gpt-4o-mini-2024-07-18:eastus2 - gpt-4o-mini-2024-07-18:northcentralus - gpt-4o-mini-2024-07-18:southcentralus - gpt-4o-2024-05-13:eastus2 - gpt-4o-2024-05-13:eastus - gpt-4o-2024-05-13:northcentralus - gpt-4o-2024-05-13:southcentralus - gpt-4o-2024-05-13:westus3 - gpt-4o-2024-05-13:westus - gpt-4-turbo-2024-04-09:eastus2 - gpt-4-0125-preview:eastus - gpt-4-0125-preview:northcentralus - gpt-4-0125-preview:southcentralus - gpt-4-1106-preview:australiaeast - gpt-4-1106-preview:canadaeast - gpt-4-1106-preview:france - gpt-4-1106-preview:india - gpt-4-1106-preview:norway - gpt-4-1106-preview:swedencentral - gpt-4-1106-preview:uk - gpt-4-1106-preview:westus - gpt-4-1106-preview:westus3 - gpt-4-0613:canadaeast - gpt-3.5-turbo-0125:canadaeast - gpt-3.5-turbo-0125:northcentralus - gpt-3.5-turbo-0125:southcentralus - gpt-3.5-turbo-1106:canadaeast - gpt-3.5-turbo-1106:westus temperature: type: number description: This is the temperature of the model. For LLM-as-a-judge, it's recommended to set it between 0 - 0.3 to avoid hallucinations and ensure the model judges the output correctly based on the instructions. minimum: 0 maximum: 2 maxTokens: type: number description: 'This is the max tokens of the model. If your Judge instructions return `true` or `false` takes only 1 token (as per the OpenAI Tokenizer), and therefore is recommended to set it to a low number to force the model to return a short response.' minimum: 50 maximum: 10000 messages: description: 'These are the messages which will instruct the AI Judge on how to evaluate the assistant message. The LLM-Judge must respond with "pass" or "fail" to indicate if the assistant message passes the eval. To access the messages in the mock conversation, use the LiquidJS variable `{{messages}}`. The assistant message to be evaluated will be passed as the last message in the `messages` array and can be accessed using `{{messages[-1]}}`. It is recommended to use the system message to instruct the LLM how to evaluate the assistant message, and then use the first user message to pass the assistant message to be evaluated.' example: '{' type: array items: type: object required: - provider - model - messages EvalAnthropicModel: type: object properties: provider: type: string description: This is the provider of the model (`anthropic`). enum: - anthropic model: type: string description: This is the specific model that will be used. maxLength: 100 enum: - claude-3-opus-20240229 - claude-3-sonnet-20240229 - claude-3-haiku-20240307 - claude-3-5-sonnet-20240620 - claude-3-5-sonnet-20241022 - claude-3-5-haiku-20241022 - claude-3-7-sonnet-20250219 - claude-opus-4-20250514 - claude-opus-4-5-20251101 - claude-opus-4-6 - claude-sonnet-4-20250514 - claude-sonnet-4-5-20250929 - claude-sonnet-4-6 - claude-haiku-4-5-20251001 thinking: description: 'This is the optional configuration for Anthropic''s thinking feature. - If provided, `maxTokens` must be greater than `thinking.budgetTokens`.' allOf: - $ref: '#/components/schemas/AnthropicThinkingConfig' temperature: type: number description: This is the temperature of the model. For LLM-as-a-judge, it's recommended to set it between 0 - 0.3 to avoid hallucinations and ensure the model judges the output correctly based on the instructions. minimum: 0 maximum: 2 maxTokens: type: number description: 'This is the max tokens of the model. If your Judge instructions return `true` or `false` takes only 1 token (as per the OpenAI Tokenizer), and therefore is recommended to set it to a low number to force the model to return a short response.' minimum: 50 maximum: 10000 messages: description: 'These are the messages which will instruct the AI Judge on how to evaluate the assistant message. The LLM-Judge must respond with "pass" or "fail" to indicate if the assistant message passes the eval. To access the messages in the mock conversation, use the LiquidJS variable `{{messages}}`. The assistant message to be evaluated will be passed as the last message in the `messages` array and can be accessed using `{{messages[-1]}}`. It is recommended to use the system message to instruct the LLM how to evaluate the assistant message, and then use the first user message to pass the assistant message to be evaluated.' example: '{' type: array items: type: object required: - provider - model - messages EvalGoogleModel: type: object properties: provider: type: string description: This is the provider of the model (`google`). enum: - google model: type: string description: This is the name of the model. Ex. gpt-4o maxLength: 100 enum: - gemini-3-flash-preview - gemini-2.5-pro - gemini-2.5-flash - gemini-2.5-flash-lite - gemini-2.0-flash-thinking-exp - gemini-2.0-pro-exp-02-05 - gemini-2.0-flash - gemini-2.0-flash-lite - gemini-2.0-flash-exp - gemini-2.0-flash-realtime-exp - gemini-1.5-flash - gemini-1.5-flash-002 - gemini-1.5-pro - gemini-1.5-pro-002 - gemini-1.0-pro temperature: type: number description: This is the temperature of the model. For LLM-as-a-judge, it's recommended to set it between 0 - 0.3 to avoid hallucinations and ensure the model judges the output correctly based on the instructions. minimum: 0 maximum: 2 maxTokens: type: number description: 'This is the max tokens of the model. If your Judge instructions return `true` or `false` takes only 1 token (as per the OpenAI Tokenizer), and therefore is recommended to set it to a low number to force the model to return a short response.' minimum: 50 maximum: 10000 messages: description: 'These are the messages which will instruct the AI Judge on how to evaluate the assistant message. The LLM-Judge must respond with "pass" or "fail" to indicate if the assistant message passes the eval. To access the messages in the mock conversation, use the LiquidJS variable `{{messages}}`. The assistant message to be evaluated will be passed as the last message in the `messages` array and can be accessed using `{{messages[-1]}}`. It is recommended to use the system message to instruct the LLM how to evaluate the assistant message, and then use the first user message to pass the assistant message to be evaluated.' example: '{' type: array items: type: object required: - provider - model - messages EvalGroqModel: type: object properties: provider: type: string description: This is the provider of the model (`groq`). enum: - groq model: type: string description: This is the name of the model. Ex. gpt-4o maxLength: 100 enum: - openai/gpt-oss-20b - openai/gpt-oss-120b - deepseek-r1-distill-llama-70b - llama-3.3-70b-versatile - llama-3.1-405b-reasoning - llama-3.1-8b-instant - llama3-8b-8192 - llama3-70b-8192 - gemma2-9b-it - moonshotai/kimi-k2-instruct-0905 - meta-llama/llama-4-maverick-17b-128e-instruct - meta-llama/llama-4-scout-17b-16e-instruct - mistral-saba-24b - compound-beta - compound-beta-mini temperature: type: number description: This is the temperature of the model. For LLM-as-a-judge, it's recommended to set it between 0 - 0.3 to avoid hallucinations and ensure the model judges the output correctly based on the instructions. minimum: 0 maximum: 2 maxTokens: type: number description: 'This is the max tokens of the model. If your Judge instructions return `true` or `false` takes only 1 token (as per the OpenAI Tokenizer), and therefore is recommended to set it to a low number to force the model to return a short response.' minimum: 50 maximum: 10000 messages: description: 'These are the messages which will instruct the AI Judge on how to evaluate the assistant message. The LLM-Judge must respond with "pass" or "fail" to indicate if the assistant message passes the eval. To access the messages in the mock conversation, use the LiquidJS variable `{{messages}}`. The assistant message to be evaluated will be passed as the last message in the `messages` array and can be accessed using `{{messages[-1]}}`. It is recommended to use the system message to instruct the LLM how to evaluate the assistant message, and then use the first user message to pass the assistant message to be evaluated.' example: '{' type: array items: type: object required: - provider - model - messages EvalCustomModel: type: object properties: provider: type: string description: This is the provider of the model (`custom-llm`). enum: - custom-llm url: type: string description: These is the URL we'll use for the OpenAI client's `baseURL`. Ex. https://openrouter.ai/api/v1 headers: type: object description: These are the headers we'll use for the OpenAI client's `headers`. timeoutSeconds: type: number description: This 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. gpt-4o maxLength: 100 temperature: type: number description: This is the temperature of the model. For LLM-as-a-judge, it's recommended to set it between 0 - 0.3 to avoid hallucinations and ensure the model judges the output correctly based on the instructions. minimum: 0 maximum: 2 maxTokens: type: number description: 'This is the max tokens of the model. If your Judge instructions return `true` or `false` takes only 1 token (as per the OpenAI Tokenizer), and therefore is recommended to set it to a low number to force the model to return a short response.' minimum: 50 maximum: 10000 messages: description: 'These are the messages which will instruct the AI Judge on how to evaluate the assistant message. The LLM-Judge must respond with "pass" or "fail" to indicate if the assistant message passes the eval. To access the messages in the mock conversation, use the LiquidJS variable `{{messages}}`. The assistant message to be evaluated will be passed as the last message in the `messages` array and can be accessed using `{{messages[-1]}}`. It is recommended to use the system message to instruct the LLM how to evaluate the assistant message, and then use the first user message to pass the assistant message to be evaluated.' example: '{' type: array items: type: object required: - provider - url - model - messages AssistantMessageJudgePlanAI: type: object properties: model: description: 'This is the model to use for the LLM-as-a-judge. If not provided, will default to the assistant''s model. The instructions on how to evaluate the model output with this LLM-Judge must be passed as a system message in the messages array of the model. The Mock conversation can be passed to the LLM-Judge to evaluate using the prompt {{messages}} and will be evaluated as a LiquidJS Variable. To access and judge only the last message, use {{messages[-1]}} The LLM-Judge must respond with "pass" or "fail" and only those two responses are allowed.' example: '{' oneOf: - $ref: '#/components/schemas/EvalOpenAIModel' title: EvalOpenAIModel - $ref: '#/components/schemas/EvalAnthropicModel' title: EvalAnthropicModel - $ref: '#/components/schemas/EvalGoogleModel' title: EvalGoogleModel - $ref: '#/components/schemas/EvalCustomModel' title: EvalCustomModel type: type: string enum: - ai description: 'This is the type of the judge plan. Use ''ai'' to evaluate the assistant message content using LLM-as-a-judge. @default ''ai''' autoIncludeMessageHistory: type: boolean description: 'This is the flag to enable automatically adding the liquid variable {{messages}} to the model''s messages array This is only applicable if the user has not provided any messages in the model''s messages array @default true' required: - model - type ChatEvalToolResponseMessageEvaluation: type: object properties: role: type: string enum: - tool description: 'This is the role of the message author. For a tool response message evaluation, the role is always ''tool'' @default ''tool''' default: tool judgePlan: description: 'This is the judge plan that instructs how to evaluate the tool response message. The tool response message can be evaluated with an LLM-as-judge by defining the evaluation criteria in a prompt.' oneOf: - $ref: '#/components/schemas/AssistantMessageJudgePlanAI' title: AssistantMessageJudgePlanAI allOf: - $ref: '#/components/schemas/AssistantMessageJudgePlanAI' required: - role - judgePlan AssistantMessageJudgePlanExact: type: object properties: type: type: string enum: - exact description: 'This is the type of the judge plan. Use ''exact'' for an exact match on the content and tool calls - without using LLM-as-a-judge. @default ''exact''' content: type: string description: 'This is what that will be used to evaluate the model''s message content. If you provide a string, the assistant message content will be evaluated against it as an exact match, case-insensitive.' example: The weather in San Francisco is sunny. maxLength: 1000 toolCalls: description: 'This is the tool calls that will be used to evaluate the model''s message content. The tool name must be a valid tool that the assistant is allowed to call. For the Query tool, the arguments for the tool call are in the format - {knowledgeBaseNames: [''kb_name'', ''kb_name_2'']} For the DTMF tool, the arguments for the tool call are in the format - {dtmf: "1234*"} For the Handoff tool, the arguments for the tool call are in the format - {destination: "assistant_id"} For the Transfer Call tool, the arguments for the tool call are in the format - {destination: "phone_number_or_assistant_id"} For all other tools, they are called without arguments or with user-defined arguments' example: '[{ name: "get_weather", arguments: { city: "San Francisco" } }]' type: array items: $ref: '#/components/schemas/ChatEvalAssistantMessageMockToolCall' required: - type - content AssistantMessageJudgePlanRegex: type: object properties: type: type: string enum: - regex description: 'This is the type of the judge plan. Use ''regex'' for a regex match on the content and tool calls - without using LLM-as-a-judge. @default ''regex''' content: type: string description: 'This is what that will be used to evaluate the model''s message content. The content will be evaluated against the regex pattern provided in the Judge Plan content field. Evaluation is considered successful if the regex pattern matches any part of the assistant message content.' example: /sunny/i maxLength: 1000 toolCalls: description: 'This is the tool calls that will be used to evaluate the model''s message content. The tool name must be a valid tool that the assistant is allowed to call. The values to the arguments for the tool call should be a Regular Expression. Evaluation is considered successful if the regex pattern matches any part of each tool call argument. For the Query tool, the arguments for the tool call are in the format - {knowledgeBaseNames: [''kb_name'', ''kb_name_2'']} For the DTMF tool, the arguments for the tool call are in the format - {dtmf: "1234*"} For the Handoff tool, the arguments for the tool call are in the format - {destination: "assistant_id"} For the Transfer Call tool, the arguments for the tool call are in the format - {destination: "phone_number_or_assistant_id"} For all other tools, they are called without arguments or with user-defined arguments' example: '[{ name: "get_weather", arguments: { city: "/San Francisco/i" } }]' type: array items: $ref: '#/components/schemas/ChatEvalAssistantMessageMockToolCall' required: - type - content GetEvalPaginatedDTO: type: object properties: id: type: string page: type: number description: This is the page number to return. Defaults to 1. minimum: 1 sortOrder: type: string description: This is the sort order for pagination. Defaults to 'DESC'. enum: - ASC - DESC sortBy: type: string description: This is the column to sort by. Defaults to 'createdAt'. enum: - createdAt - duration - cost limit: type: number description: This is the maximum number of items to return. Defaults to 100. minimum: 0 maximum: 1000 createdAtGt: format: date-time type: string description: This will return items where the createdAt is greater than the specified value. createdAtLt: format: date-time type: string description: This will return items where the createdAt is less than the specified value. createdAtGe: format: date-time type: string description: This will return items where the createdAt is greater than or equal to the specified value. createdAtLe: format: date-time type: string description: This will return items where the createdAt is less than or equal to the specified value. updatedAtGt: format: date-time type: string description: This will return items where the updatedAt is greater than the specified value. updatedAtLt: format: date-time type: string description: This will return items where the updatedAt is less than the specified value. updatedAtGe: format: date-time type: string description: This will return items where the updatedAt is greater than or equal to the specified value. updatedAtLe: format: date-time type: string description: This will return items where the updatedAt is less than or equal to the specified value. EvalPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/Eval' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata UpdateEvalDTO: type: object properties: messages: type: array description: 'This is the mock conversation that will be used to evaluate the flow of the conversation. Mock Messages are used to simulate the flow of the conversation Evaluation Messages are used as checkpoints in the flow where the model''s response to previous conversation needs to be evaluated to check the content and tool calls' example: '[{ role: "user", content: "Hello, how are you?" }, { role: "assistant", judgePlan: { type: "exact", content: "I am good, thank you!" } }]' items: oneOf: - $ref: '#/components/schemas/ChatEvalAssistantMessageMock' title: ChatEvalAssistantMessageMock - $ref: '#/components/schemas/ChatEvalSystemMessageMock' title: ChatEvalSystemMessageMock - $ref: '#/components/schemas/ChatEvalToolResponseMessageMock' title: ChatEvalToolResponseMessageMock - $ref: '#/components/schemas/ChatEvalToolResponseMessageEvaluation' title: ChatEvalToolResponseMessageEvaluation - $ref: '#/components/schemas/ChatEvalUserMessageMock' title: ChatEvalUserMessageMock - $ref: '#/components/schemas/ChatEvalAssistantMessageEvaluation' title: ChatEvalAssistantMessageEvaluation name: type: string description: 'This is the name of the eval. It helps identify what the eval is checking for.' example: Verified User Flow Eval minLength: 1 maxLength: 80 description: type: string description: 'This is the description of the eval. This helps describe the eval and its purpose in detail. It will not be used to evaluate the flow of the conversation.' example: This eval checks if the user flow is verified. maxLength: 500 type: type: string description: 'This is the type of the eval. Currently it is fixed to `chat.mockConversation`.' example: chat.mockConversation enum: - chat.mockConversation CreateEvalRunDTO: type: object properties: eval: description: This is the transient eval that will be run oneOf: - $ref: '#/components/schemas/CreateEvalDTO' title: CreateEvalDTO allOf: - $ref: '#/components/schemas/CreateEvalDTO' target: description: This is the target that will be run against the eval oneOf: - $ref: '#/components/schemas/EvalRunTargetAssistant' title: EvalRunTargetAssistant - $ref: '#/components/schemas/EvalRunTargetSquad' title: EvalRunTargetSquad type: type: string description: 'This is the type of the run. Currently it is fixed to `eval`.' example: eval enum: - eval evalId: type: string description: This is the id of the eval that will be run. example: 123e4567-e89b-12d3-a456-426614174000 required: - target - type EvalRunResult: type: object properties: status: type: string description: 'This is the status of the eval run result. The status is only ''pass'' or ''fail'' for an eval run result. Currently, An eval is considered `pass` only if all the Assistant Judge messages are evaluated to pass.' example: pass enum: - pass - fail messages: type: array description: 'This is the messages of the eval run result. It contains the user/system messages' items: oneOf: - $ref: '#/components/schemas/ChatEvalUserMessageMock' title: ChatEvalUserMessageMock - $ref: '#/components/schemas/ChatEvalSystemMessageMock' title: ChatEvalSystemMessageMock - $ref: '#/components/schemas/ChatEvalToolResponseMessageMock' title: ChatEvalToolResponseMessageMock - $ref: '#/components/schemas/ChatEvalAssistantMessageMock' title: ChatEvalAssistantMessageMock startedAt: format: date-time type: string description: This is the start time of the eval run result. example: '2021-01-01T00:00:00.000Z' endedAt: format: date-time type: string description: This is the end time of the eval run result. example: '2021-01-01T00:00:00.000Z' required: - status - messages - startedAt - endedAt EvalRun: type: object properties: status: type: string description: 'This is the status of the eval run. When an eval run is created, the status is ''running''. When the eval run is completed, the status is ''ended''.' example: running enum: - running - ended - queued endedReason: type: string description: 'This is the reason for the eval run to end. When the eval run is completed normally i.e end of mock conversation, the status is ''mockConversation.done''. When the eval fails due to an error like Chat error or incorrect configuration, the status is ''error''. When the eval runs for too long, due to model issues or tool call issues, the status is ''timeout''. When the eval run is cancelled by the user, the status is ''cancelled''. When the eval run is cancelled by Vapi for any reason, the status is ''aborted''.' example: mockConversation.done enum: - mockConversation.done - error - timeout - cancelled - aborted eval: description: This is the transient eval that will be run oneOf: - $ref: '#/components/schemas/CreateEvalDTO' title: CreateEvalDTO allOf: - $ref: '#/components/schemas/CreateEvalDTO' target: description: This is the target that will be run against the eval oneOf: - $ref: '#/components/schemas/EvalRunTargetAssistant' title: EvalRunTargetAssistant - $ref: '#/components/schemas/EvalRunTargetSquad' title: EvalRunTargetSquad id: type: string orgId: type: string createdAt: format: date-time type: string startedAt: format: date-time type: string endedAt: format: date-time type: string endedMessage: type: string description: This is the ended message when the eval run ended for any reason apart from mockConversation.done example: The Assistant returned an error results: description: 'This is the results of the eval or suite run. The array will have a single item for an eval run, and multiple items each corresponding to the an eval in a suite run in the same order as the evals in the suite.' type: array items: $ref: '#/components/schemas/EvalRunResult' cost: type: number description: This is the cost of the eval or suite run in USD. example: 0.01 costs: description: This is the break up of costs of the eval or suite run. example: '[{ type: "model", model: "gpt-4o", cost: 0.01 }]' type: array items: type: object type: type: string description: 'This is the type of the run. Currently it is fixed to `eval`.' example: eval enum: - eval evalId: type: string description: This is the id of the eval that will be run. example: 123e4567-e89b-12d3-a456-426614174000 required: - status - endedReason - target - id - orgId - createdAt - startedAt - endedAt - results - cost - costs - type EvalRunPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/EvalRun' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata GetEvalRunPaginatedDTO: type: object properties: id: type: string page: type: number description: This is the page number to return. Defaults to 1. minimum: 1 sortOrder: type: string description: This is the sort order for pagination. Defaults to 'DESC'. enum: - ASC - DESC sortBy: type: string description: This is the column to sort by. Defaults to 'createdAt'. enum: - createdAt - duration - cost limit: type: number description: This is the maximum number of items to return. Defaults to 100. minimum: 0 maximum: 1000 createdAtGt: format: date-time type: string description: This will return items where the createdAt is greater than the specified value. createdAtLt: format: date-time type: string description: This will return items where the createdAt is less than the specified value. createdAtGe: format: date-time type: string description: This will return items where the createdAt is greater than or equal to the specified value. createdAtLe: format: date-time type: string description: This will return items where the createdAt is less than or equal to the specified value. updatedAtGt: format: date-time type: string description: This will return items where the updatedAt is greater than the specified value. updatedAtLt: format: date-time type: string description: This will return items where the updatedAt is less than the specified value. updatedAtGe: format: date-time type: string description: This will return items where the updatedAt is greater than or equal to the specified value. updatedAtLe: format: date-time type: string description: This will return items where the updatedAt is less than or equal to the specified value. EvalRunTargetAssistant: type: object properties: assistant: description: This is the transient assistant that will be run against the eval oneOf: - $ref: '#/components/schemas/CreateAssistantDTO' title: CreateAssistantDTO allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: This is the overrides that will be applied to the assistant. example: '{' oneOf: - $ref: '#/components/schemas/AssistantOverrides' title: AssistantOverrides allOf: - $ref: '#/components/schemas/AssistantOverrides' type: type: string description: 'This is the type of the target. Currently it is fixed to `assistant`.' example: assistant enum: - assistant assistantId: type: string description: This is the id of the assistant that will be run against the eval example: 123e4567-e89b-12d3-a456-426614174000 required: - type EvalRunTargetSquad: type: object properties: squad: description: This is the transient squad that will be run against the eval oneOf: - $ref: '#/components/schemas/CreateSquadDTO' title: CreateSquadDTO allOf: - $ref: '#/components/schemas/CreateSquadDTO' assistantOverrides: description: This is the overrides that will be applied to the assistants. example: '{' oneOf: - $ref: '#/components/schemas/AssistantOverrides' title: AssistantOverrides allOf: - $ref: '#/components/schemas/AssistantOverrides' type: type: string description: 'This is the type of the target. Currently it is fixed to `squad`.' example: squad enum: - squad squadId: type: string description: This is the id of the squad that will be run against the eval example: 123e4567-e89b-12d3-a456-426614174000 required: - type Scorecard: type: object properties: id: type: string description: This is the unique identifier for the scorecard. orgId: type: string description: This is the unique identifier for the org that this scorecard belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the scorecard was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the scorecard was last updated. name: type: string description: This is the name of the scorecard. It is only for user reference and will not be used for any evaluation. maxLength: 80 description: type: string description: This is the description of the scorecard. It is only for user reference and will not be used for any evaluation. maxLength: 500 metrics: description: 'These are the metrics that will be used to evaluate the scorecard. Each metric will have a set of conditions and points that will be used to generate the score.' type: array items: $ref: '#/components/schemas/ScorecardMetric' assistantIds: description: 'These are the assistant IDs that this scorecard is linked to. When linked to assistants, this scorecard will be available for evaluation during those assistants'' calls.' type: array items: type: string required: - id - orgId - createdAt - updatedAt - metrics ScorecardPaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/Scorecard' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata UpdateScorecardDTO: type: object properties: name: type: string description: This is the name of the scorecard. It is only for user reference and will not be used for any evaluation. maxLength: 80 description: type: string description: This is the description of the scorecard. It is only for user reference and will not be used for any evaluation. maxLength: 500 metrics: description: 'These are the metrics that will be used to evaluate the scorecard. Each metric will have a set of conditions and points that will be used to generate the score.' type: array items: $ref: '#/components/schemas/ScorecardMetric' assistantIds: description: 'These are the assistant IDs that this scorecard is linked to. When linked to assistants, this scorecard will be available for evaluation during those assistants'' calls.' type: array items: type: string CreateOrgDTO: type: object properties: hipaaEnabled: type: boolean description: 'When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. When HIPAA is enabled, only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. This is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.' example: false subscriptionId: type: string description: This is the ID of the subscription the org belongs to. name: type: string description: This is the name of the org. This is just for your own reference. maxLength: 40 channel: type: string description: This is the channel of the org. There is the cluster the API traffic for the org will be directed. enum: - daily - default - weekly - intuit - hcs 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. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' concurrencyLimit: type: number description: This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai. deprecated: true minimum: 1 maximum: 10 compliancePlan: description: 'Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field. When this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost. At the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided. Defaults to false. When PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers. This 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. threshold: type: number description: This is the limit at which the reload is triggered. required: - credits - threshold InvoicePlan: type: object properties: companyName: type: string description: This is the name of the company. companyAddress: type: string description: This is the address of the company. companyTaxId: type: string description: This is the tax ID of the company. companyEmail: type: string description: This is the preferred invoicing email of the company. If not specified, defaults to the subscription's email. Subscription: type: object properties: id: type: string description: This is the unique identifier for the subscription. createdAt: format: date-time type: string description: This is the timestamp when the subscription was created. updatedAt: format: date-time type: string description: This is the timestamp when the subscription was last updated. type: type: string description: This is the type / tier of the subscription. enum: - pay-as-you-go - enterprise - agency - startup - growth - scale status: type: string description: 'This is the status of the subscription. Past due subscriptions are subscriptions with past due payments.' enum: - active - frozen credits: type: string description: 'This is the number of credits the subscription currently has. Note: 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 is sufficient for the monthly charge.' stripeCustomerId: type: string description: This is the Stripe customer ID. stripePaymentMethodId: type: string description: This is the Stripe payment ID. slackSupportEnabled: type: boolean description: If this flag is true, then the user has purchased slack support. slackChannelId: type: string description: If this subscription has a slack support subscription, the slack channel's ID will be stored here. hipaaEnabled: type: boolean description: 'This is the HIPAA enabled flag for the subscription. It determines whether orgs under this subscription have the option to enable HIPAA compliance.' zdrEnabled: type: boolean description: 'This is the ZDR enabled flag for the subscription. It determines whether orgs under this subscription have the option to enable ZDR.' dataRetentionEnabled: type: boolean description: 'This is the data retention enabled flag for the subscription. It determines whether orgs under this subscription have the option to enable data retention.' hipaaCommonPaperAgreementId: type: string description: This is the ID for the Common Paper agreement outlining the HIPAA contract. stripePaymentMethodFingerprint: type: string description: 'This is the Stripe fingerprint of the payment method (card). It allows us to detect users who try to abuse our system through multiple sign-ups.' stripeCustomerEmail: type: string description: This is the customer's email on Stripe. referredByEmail: type: string description: This is the email of the referrer for the subscription. autoReloadPlan: description: This is the auto reload plan configured for the subscription. allOf: - $ref: '#/components/schemas/AutoReloadPlan' 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 outboundCallsCounterNextResetAt: format: date-time 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 couponUsageLeft: type: string description: This is the number of credits left obtained from a coupon. 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 subscription have the option to enable PCI compliance.' pciCommonPaperAgreementId: type: string description: This is the ID for the Common Paper agreement outlining the PCI contract. callRetentionDays: type: number description: This is the call retention days for the subscription. chatRetentionDays: type: number description: This is the chat retention days for the subscription. minutesIncludedResetFrequency: type: string description: This is the minutes_included reset frequency for the subscription. enum: - monthly - annually rbacEnabled: type: boolean description: This is the Role Based Access Control (RBAC) enabled flag for the subscription. platformFee: type: number description: This is the platform fee for the subscription. required: - id - createdAt - updatedAt - type - status - credits - concurrencyCounter - concurrencyLimitIncluded - concurrencyLimitPurchased Org: type: object properties: hipaaEnabled: type: boolean description: 'When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. When HIPAA is enabled, only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. This 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 type: string description: This is the ISO 8601 date-time string of when the org was last updated. stripeSubscriptionId: type: string description: This is the subscription for the org. 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. jwtSecret: type: string description: This is the secret key used for signing JWT tokens for the org. minutesUsed: type: number description: This is the total number of call minutes used by this org across all time. name: type: string description: This is the name of the org. This is just for your own reference. 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: - daily - default - weekly - intuit - hcs 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. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' concurrencyLimit: type: number description: This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai. deprecated: true minimum: 1 maximum: 10 compliancePlan: description: 'Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field. When this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost. At the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided. Defaults to false. When PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers. This is due to the compliance requirements of PCI. Other providers may not meet these requirements.' allOf: - $ref: '#/components/schemas/CompliancePlan' required: - id - createdAt - updatedAt UpdateOrgDTO: type: object properties: hipaaEnabled: type: boolean description: 'When this is enabled, logs, recordings, and transcriptions will be stored in HIPAA-compliant storage. Defaults to false. When HIPAA is enabled, only HIPAA-compliant providers will be available for LLM, Voice, and Transcriber respectively. This is due to the compliance requirements of HIPAA. Other providers may not meet these requirements.' example: false subscriptionId: type: string description: This is the ID of the subscription the org belongs to. name: type: string description: This is the name of the org. This is just for your own reference. maxLength: 40 channel: type: string description: This is the channel of the org. There is the cluster the API traffic for the org will be directed. enum: - daily - default - weekly - intuit - hcs 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. The order of precedence is: 1. assistant.server 2. phoneNumber.server 3. org.server' allOf: - $ref: '#/components/schemas/Server' concurrencyLimit: type: number description: This is the concurrency limit for the org. This is the maximum number of calls that can be active at any given time. To go beyond 10, please contact us at support@vapi.ai. deprecated: true minimum: 1 maximum: 10 compliancePlan: description: 'Stores the information about the compliance plan enforced at the organization level. Currently pciEnabled is supported through this field. When this is enabled, any logs, recordings, or transcriptions will be shipped to the customer endpoints if provided else lost. At the end of the call, you will receive an end-of-call-report message to store on your server, if webhook is provided. Defaults to false. When PCI is enabled, only PCI-compliant Providers will be available for LLM, Voice and transcribers. This is due to the compliance requirements of PCI. Other providers may not meet these requirements.' allOf: - $ref: '#/components/schemas/CompliancePlan' User: type: object properties: id: type: string description: This is the unique identifier for the profile or user. createdAt: format: date-time type: string 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 profile was last updated. email: type: string 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: - id - createdAt - updatedAt - email InviteUserDTO: type: object properties: emails: maxItems: 100 type: array items: type: string role: enum: - admin - editor - viewer type: string redirectTo: type: string required: - emails - role UpdateUserRoleDTO: type: object properties: userId: type: string role: enum: - admin - editor - viewer type: string required: - userId - role JwtResponse: type: object properties: accessToken: type: string aud: type: object required: - accessToken - aud TokenRestrictions: 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. Only 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. Only 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. If `allowedAssistantIds` is provided, this is automatically false. Only relevant for `public` tokens.' CreateTokenDTO: type: object properties: tag: type: string description: This is the tag for the token. It represents its scope. enum: - private - public name: type: string description: This is the name of the token. This is just for your own reference. maxLength: 40 restrictions: description: This are the restrictions for the token. allOf: - $ref: '#/components/schemas/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 token. orgId: type: string description: This is unique identifier for the org that this token belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the token was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the token was last updated. value: type: string description: This is the token key. name: type: string description: This is the name of the token. This is just for your own reference. maxLength: 40 restrictions: description: This are the restrictions for the token. allOf: - $ref: '#/components/schemas/TokenRestrictions' required: - id - orgId - createdAt - updatedAt 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: - 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. 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 AWSStsAuthenticationArtifact: type: object properties: externalId: type: string description: This is the optional external ID for the AWS credential required: - externalId AWSStsAssumeRoleUser: type: object properties: AssumedRoleId: type: string description: This is the assumed role ID Arn: type: string description: This is the assumed role ARN AWSStsCredentials: type: object properties: AccessKeyId: type: string description: This is the access key ID for the AWS credential Expiration: format: date-time type: string description: This is the expiration date for the AWS credential SecretAccessKey: type: string description: This is the secret access key for the AWS credential SessionToken: type: string description: This is the session token for the AWS credential AWSStsAuthenticationSession: type: object properties: assumedRoleUser: description: This is the assumed role user allOf: - $ref: '#/components/schemas/AWSStsAssumeRoleUser' credentials: description: This is the credentials for the AWS STS assume role allOf: - $ref: '#/components/schemas/AWSStsCredentials' packedPolicySize: type: number description: This is the size of the policy sourcedIDEntity: type: string description: This is the sourced ID entity AnthropicBedrockCredential: type: object properties: provider: type: string enum: - anthropic-bedrock region: type: string description: AWS region where Bedrock is configured. enum: - us-east-1 - us-west-2 - eu-west-1 - eu-west-3 - ap-northeast-1 - ap-southeast-2 authenticationPlan: description: Authentication method - either direct IAM credentials or cross-account role assumption. oneOf: - $ref: '#/components/schemas/AWSIAMCredentialsAuthenticationPlan' - $ref: '#/components/schemas/AWSStsAuthenticationPlan' 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. authenticationArtifact: description: Stores the external ID (generated or user-provided) for future AssumeRole calls. allOf: - $ref: '#/components/schemas/AWSStsAuthenticationArtifact' authenticationSession: description: 'Cached authentication session from AssumeRole (temporary credentials). Managed by the system, auto-refreshed when expired.' allOf: - $ref: '#/components/schemas/AWSStsAuthenticationSession' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - region - authenticationPlan - id - orgId - createdAt - updatedAt AnyscaleCredential: type: object properties: provider: type: string enum: - anyscale 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 AssemblyAICredential: type: object properties: provider: type: string enum: - assembly-ai apiKey: type: string description: This is not returned in the API. id: type: string description: This is the unique identifier for the credential. orgId: type: string description: This is the unique identifier for the org that this credential belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the credential was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the assistant was last updated. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey - id - orgId - createdAt - updatedAt AzureCredential: type: object properties: provider: type: string enum: - azure service: type: string description: This is the service being used in Azure. enum: - speech - blob_storage default: speech region: type: string description: This is the region of the Azure resource. enum: - australiaeast - canadaeast - canadacentral - centralus - eastus2 - eastus - france - germanywestcentral - india - japaneast - japanwest - northcentralus - norway - polandcentral - southcentralus - spaincentral - swedencentral - switzerland - uaenorth - uk - westeurope - westus - westus3 apiKey: type: string description: This is not returned in the API. maxLength: 10000 fallbackIndex: type: number minimum: 1 description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. id: type: string description: This is the unique identifier for the credential. orgId: type: string description: This is the unique identifier for the org that this credential belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the credential was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the assistant was last updated. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 bucketPlan: description: This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage. allOf: - $ref: '#/components/schemas/AzureBlobStorageBucketPlan' required: - provider - service - id - orgId - createdAt - updatedAt AzureOpenAICredential: type: object properties: provider: type: string enum: - azure-openai region: type: string enum: - australiaeast - canadaeast - canadacentral - centralus - eastus2 - eastus - france - germanywestcentral - india - japaneast - japanwest - northcentralus - norway - polandcentral - southcentralus - spaincentral - swedencentral - switzerland - uaenorth - uk - westeurope - westus - westus3 models: type: array enum: - gpt-5.4 - gpt-5.4-mini - gpt-5.4-nano - gpt-5.2 - gpt-5.2-chat - gpt-5.1 - gpt-5.1-chat - gpt-5 - gpt-5-mini - gpt-5-nano - gpt-4.1-2025-04-14 - gpt-4.1-mini-2025-04-14 - gpt-4.1-nano-2025-04-14 - gpt-4o-2024-11-20 - gpt-4o-2024-08-06 - gpt-4o-2024-05-13 - gpt-4o-mini-2024-07-18 - gpt-4-turbo-2024-04-09 - gpt-4-0125-preview - gpt-4-1106-preview - gpt-4-0613 - gpt-35-turbo-0125 - gpt-35-turbo-1106 example: - gpt-4-0125-preview - gpt-4-0613 items: type: string enum: - gpt-5.4 - gpt-5.4-mini - gpt-5.4-nano - gpt-5.2 - gpt-5.2-chat - gpt-5.1 - gpt-5.1-chat - gpt-5 - gpt-5-mini - gpt-5-nano - gpt-4.1-2025-04-14 - gpt-4.1-mini-2025-04-14 - gpt-4.1-nano-2025-04-14 - gpt-4o-2024-11-20 - gpt-4o-2024-08-06 - gpt-4o-2024-05-13 - gpt-4o-mini-2024-07-18 - gpt-4-turbo-2024-04-09 - gpt-4-0125-preview - gpt-4-1106-preview - gpt-4-0613 - gpt-35-turbo-0125 - gpt-35-turbo-1106 openAIKey: type: string maxLength: 10000 description: This is not returned in the API. ocpApimSubscriptionKey: 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 openAIEndpoint: type: string maxLength: 10000 required: - provider - region - models - openAIKey - id - orgId - createdAt - updatedAt - openAIEndpoint 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: - byo-sip-trunk 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 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. Usage: - Vonage/Twilio requires leading plus for all outbound calls. Set this to true. @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: - id - orgId - createdAt - updatedAt - gateways CartesiaCredential: 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. 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 apiUrl: type: string description: This can be used to point to an onprem Cartesia instance. Defaults to api.cartesia.ai. required: - provider - apiKey - id - orgId - createdAt - updatedAt CerebrasCredential: type: object properties: provider: type: string enum: - cerebras 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 CloudflareCredential: type: object properties: provider: type: string enum: - cloudflare description: Credential provider. Only allowed value is cloudflare accountId: type: string description: Cloudflare Account Id. apiKey: type: string description: Cloudflare API Key / Token. accountEmail: type: string description: Cloudflare Account Email. fallbackIndex: type: number description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. minimum: 1 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 bucketPlan: description: This is the bucket plan that can be provided to store call artifacts in R2 allOf: - $ref: '#/components/schemas/CloudflareR2BucketPlan' required: - provider - id - orgId - createdAt - updatedAt Oauth2AuthenticationSession: type: object properties: accessToken: type: string description: This is the OAuth2 access token. expiresAt: format: date-time type: string description: This is the OAuth2 access token expiration. refreshToken: type: string description: This is the OAuth2 refresh token. CustomLLMCredential: type: object properties: provider: type: string enum: - custom-llm apiKey: type: string maxLength: 10000 description: This is not returned in the API. authenticationPlan: description: This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey allOf: - $ref: '#/components/schemas/OAuth2AuthenticationPlan' 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 description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey - id - orgId - createdAt - updatedAt DeepgramCredential: type: object properties: provider: type: string enum: - deepgram apiKey: type: string description: This is not returned in the API. id: type: string description: This is the unique identifier for the credential. 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 apiUrl: type: string description: This can be used to point to an onprem Deepgram instance. Defaults to api.deepgram.com. required: - provider - apiKey - id - orgId - createdAt - updatedAt DeepInfraCredential: type: object properties: provider: type: string enum: - deepinfra 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 DeepSeekCredential: type: object properties: provider: type: string enum: - deep-seek 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 ElevenLabsCredential: type: object properties: provider: type: string enum: - 11labs 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 GcpCredential: type: object properties: provider: type: string enum: - gcp fallbackIndex: type: number description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. minimum: 1 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 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. The schema is identical to the JSON that GCP outputs.' allOf: - $ref: '#/components/schemas/GcpKey' region: type: string description: This is the region of the GCP resource. maxLength: 40 bucketPlan: $ref: '#/components/schemas/BucketPlan' required: - provider - id - orgId - createdAt - updatedAt - gcpKey GladiaCredential: type: object properties: provider: type: string enum: - gladia 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 GoHighLevelCredential: type: object properties: provider: type: string enum: - gohighlevel 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 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: - google 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 GroqCredential: type: object properties: provider: type: string enum: - groq 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 HumeCredential: type: object properties: provider: type: string enum: - hume 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 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: - inflection-ai apiKey: type: string maxLength: 10000 description: This is not returned in the API. id: type: string description: This is the unique identifier for the 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 LangfuseCredential: type: object properties: provider: type: string enum: - langfuse publicKey: type: string description: 'The public key for Langfuse project. Eg: pk-lf-...' apiKey: type: string description: 'The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API.' apiUrl: type: string description: 'The host URL for Langfuse project. Eg: https://cloud.langfuse.com' 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 - publicKey - apiKey - apiUrl - id - orgId - createdAt - updatedAt LmntCredential: type: object properties: provider: type: string enum: - lmnt 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 MakeCredential: type: object properties: provider: type: string enum: - make teamId: type: string description: Team ID region: type: string description: 'Region of your application. For example: eu1, eu2, us1, us2' apiKey: type: string description: This is not returned in the API. 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 - teamId - region - apiKey - id - orgId - createdAt - updatedAt MistralCredential: type: object properties: provider: type: string enum: - mistral apiKey: type: string maxLength: 100 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 NeuphonicCredential: type: object properties: provider: type: string enum: - neuphonic 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 OpenAICredential: type: object properties: provider: type: string enum: - openai 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 OpenRouterCredential: type: object properties: provider: type: string enum: - openrouter 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 PerplexityAICredential: type: object properties: provider: type: string enum: - perplexity-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 PlayHTCredential: type: object properties: provider: type: string enum: - playht 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 userId: type: string required: - provider - apiKey - id - orgId - createdAt - updatedAt - userId RimeAICredential: type: object properties: provider: type: string enum: - rime-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 RunpodCredential: type: object properties: provider: type: string enum: - runpod 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 WellSaidCredential: type: object properties: provider: type: string enum: - wellsaid 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 S3Credential: type: object properties: provider: type: string enum: - s3 description: Credential provider. Only allowed value is s3 awsAccessKeyId: type: string description: AWS access key ID. awsSecretAccessKey: type: string description: AWS access key secret. This is not returned in the API. region: type: string description: AWS region in which the S3 bucket is located. s3BucketName: type: string description: AWS S3 bucket name. s3PathPrefix: type: string description: The path prefix for the uploaded recording. Ex. "recordings/" fallbackIndex: type: number minimum: 1 description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. 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 - awsAccessKeyId - awsSecretAccessKey - region - s3BucketName - s3PathPrefix - id - orgId - createdAt - updatedAt SmallestAICredential: type: object properties: provider: type: string enum: - smallest-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 SonioxCredential: type: object properties: provider: type: string enum: - soniox apiKey: type: string description: This is not returned in the API. apiUrl: type: string description: Custom Soniox WebSocket endpoint (e.g. EU server wss://stt-rt.eu.soniox.com/transcribe-websocket). Defaults to the region-appropriate endpoint when omitted. 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 SpeechmaticsCredential: type: object properties: provider: type: string enum: - speechmatics apiKey: type: string description: This is not returned in the API. id: type: string description: This is the unique identifier for the credential. orgId: type: string description: This is the unique identifier for the org that this credential belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the credential was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the assistant was last updated. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey - id - orgId - createdAt - updatedAt SupabaseCredential: type: object properties: provider: type: string enum: - supabase description: This is for supabase storage. fallbackIndex: type: number minimum: 1 description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. 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 bucketPlan: $ref: '#/components/schemas/SupabaseBucketPlan' required: - provider - id - orgId - createdAt - updatedAt TavusCredential: type: object properties: provider: type: string enum: - tavus 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 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 TwilioCredential: type: object properties: provider: type: string enum: - twilio authToken: type: string description: This is not returned in the API. apiKey: type: string description: This is not returned in the API. apiSecret: type: string description: This is not returned in the API. 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 - id - orgId - createdAt - updatedAt - accountSid VonageCredential: type: object properties: vonageApplicationPrivateKey: type: string description: This is not returned in the API. maxLength: 10000 provider: type: string enum: - vonage apiSecret: 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. vonageApplicationId: type: string description: 'This is the Vonage Application ID for the credential. Only relevant for Vonage credentials.' maxLength: 10000 name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 apiKey: type: string required: - vonageApplicationPrivateKey - provider - apiSecret - id - orgId - createdAt - updatedAt - vonageApplicationId - apiKey WebhookCredential: type: object properties: provider: type: string enum: - webhook authenticationPlan: description: This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. oneOf: - $ref: '#/components/schemas/OAuth2AuthenticationPlan' - $ref: '#/components/schemas/HMACAuthenticationPlan' - $ref: '#/components/schemas/BearerAuthenticationPlan' discriminator: propertyName: type mapping: oauth2: '#/components/schemas/OAuth2AuthenticationPlan' hmac: '#/components/schemas/HMACAuthenticationPlan' bearer: '#/components/schemas/BearerAuthenticationPlan' 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 description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - authenticationPlan - id - orgId - createdAt - updatedAt - authenticationSession SpkiPemPublicKeyConfig: type: object properties: name: type: string description: Optional name of the key for identification purposes. maxLength: 100 format: type: string description: The format of the public key. enum: - spki-pem pem: type: string description: The PEM-encoded public key. required: - format - pem PublicKeyEncryptionPlan: type: object properties: type: type: string description: The type of encryption plan. enum: - public-key algorithm: type: string description: The encryption algorithm to use. enum: - RSA-OAEP-256 publicKey: description: The public key configuration. oneOf: - $ref: '#/components/schemas/SpkiPemPublicKeyConfig' discriminator: propertyName: format mapping: spki-pem: '#/components/schemas/SpkiPemPublicKeyConfig' allOf: - $ref: '#/components/schemas/SpkiPemPublicKeyConfig' required: - type - algorithm - publicKey CustomCredential: type: object properties: provider: type: string enum: - custom-credential authenticationPlan: description: This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. oneOf: - $ref: '#/components/schemas/OAuth2AuthenticationPlan' - $ref: '#/components/schemas/HMACAuthenticationPlan' - $ref: '#/components/schemas/BearerAuthenticationPlan' discriminator: propertyName: type mapping: oauth2: '#/components/schemas/OAuth2AuthenticationPlan' hmac: '#/components/schemas/HMACAuthenticationPlan' bearer: '#/components/schemas/BearerAuthenticationPlan' encryptionPlan: description: This is the encryption plan for encrypting sensitive data. Currently supports public-key encryption. oneOf: - $ref: '#/components/schemas/PublicKeyEncryptionPlan' discriminator: propertyName: type mapping: public-key: '#/components/schemas/PublicKeyEncryptionPlan' allOf: - $ref: '#/components/schemas/PublicKeyEncryptionPlan' 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 description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - authenticationPlan - id - orgId - createdAt - updatedAt - authenticationSession 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. 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 GoogleCalendarOAuth2ClientCredential: type: object properties: provider: type: string enum: - google.calendar.oauth2-client 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 - id - orgId - createdAt - updatedAt GoogleCalendarOAuth2AuthorizationCredential: type: object properties: provider: type: string enum: - google.calendar.oauth2-authorization authorizationId: type: string description: The authorization ID for the OAuth2 authorization 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 - authorizationId - id - orgId - createdAt - updatedAt GoogleSheetsOAuth2AuthorizationCredential: type: object properties: provider: type: string enum: - google.sheets.oauth2-authorization authorizationId: type: string description: The authorization ID for the OAuth2 authorization 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 - authorizationId - id - orgId - createdAt - updatedAt SlackOAuth2AuthorizationCredential: type: object properties: provider: type: string enum: - slack.oauth2-authorization authorizationId: type: string description: The authorization ID for the OAuth2 authorization 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 - authorizationId - id - orgId - createdAt - updatedAt GoHighLevelMCPCredential: type: object properties: provider: type: string enum: - ghl.oauth2-authorization authenticationSession: description: This is the authentication session for the credential. allOf: - $ref: '#/components/schemas/Oauth2AuthenticationSession' id: type: string description: This is the unique identifier for the credential. orgId: type: string description: This is the unique identifier for the org that this credential belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the credential was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the assistant was last updated. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - authenticationSession - id - orgId - createdAt - updatedAt InworldCredential: type: object properties: provider: type: string enum: - inworld apiKey: type: string description: This is the Inworld Basic (Base64) authentication token. This is not returned in the API. example: your-base64-token-here 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 EmailCredential: type: object properties: provider: type: string enum: - email email: type: string description: The recipient email address for alerts 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 - email - id - orgId - createdAt - updatedAt SlackWebhookCredential: type: object properties: provider: type: string enum: - slack-webhook webhookUrl: type: string description: Slack incoming webhook URL. See https://api.slack.com/messaging/webhooks for setup instructions. 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 - webhookUrl - id - orgId - createdAt - updatedAt CreateCerebrasCredentialDTO: type: object properties: provider: type: string enum: - cerebras 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 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: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateHumeCredentialDTO: type: object properties: provider: type: string enum: - hume 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 CreateInflectionAICredentialDTO: type: object properties: provider: type: string description: 'This is the api key for Pi in InflectionAI''s console. Get it from here: https://developers.inflection.ai/keys, billing will need to be setup' enum: - inflection-ai 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 CreateMistralCredentialDTO: type: object properties: provider: type: string enum: - mistral apiKey: type: string maxLength: 100 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 CreateNeuphonicCredentialDTO: type: object properties: provider: type: string enum: - neuphonic apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateWellSaidCredentialDTO: type: object properties: provider: type: string enum: - wellsaid 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 CreateSonioxCredentialDTO: type: object properties: provider: type: string enum: - soniox apiKey: type: string description: This is not returned in the API. apiUrl: type: string description: Custom Soniox WebSocket endpoint (e.g. EU server wss://stt-rt.eu.soniox.com/transcribe-websocket). Defaults to the region-appropriate endpoint when omitted. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateSpeechmaticsCredentialDTO: type: object properties: provider: type: string enum: - speechmatics apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateCustomCredentialDTO: type: object properties: provider: type: string enum: - custom-credential authenticationPlan: description: This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. oneOf: - $ref: '#/components/schemas/OAuth2AuthenticationPlan' - $ref: '#/components/schemas/HMACAuthenticationPlan' - $ref: '#/components/schemas/BearerAuthenticationPlan' discriminator: propertyName: type mapping: oauth2: '#/components/schemas/OAuth2AuthenticationPlan' hmac: '#/components/schemas/HMACAuthenticationPlan' bearer: '#/components/schemas/BearerAuthenticationPlan' encryptionPlan: description: This is the encryption plan for encrypting sensitive data. Currently supports public-key encryption. oneOf: - $ref: '#/components/schemas/PublicKeyEncryptionPlan' discriminator: propertyName: type mapping: public-key: '#/components/schemas/PublicKeyEncryptionPlan' allOf: - $ref: '#/components/schemas/PublicKeyEncryptionPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - authenticationPlan CreateGoHighLevelMCPCredentialDTO: type: object properties: provider: type: string enum: - ghl.oauth2-authorization authenticationSession: description: This is the authentication session for the credential. allOf: - $ref: '#/components/schemas/Oauth2AuthenticationSession' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - authenticationSession CreateInworldCredentialDTO: type: object properties: provider: type: string enum: - inworld apiKey: type: string description: This is the Inworld Basic (Base64) authentication token. This is not returned in the API. example: your-base64-token-here name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - apiKey CreateEmailCredentialDTO: type: object properties: provider: type: string enum: - email email: type: string description: The recipient email address for alerts name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 required: - provider - email CreateSlackWebhookCredentialDTO: type: object properties: provider: type: string enum: - slack-webhook webhookUrl: type: string description: Slack incoming webhook URL. See https://api.slack.com/messaging/webhooks for setup instructions. 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 - webhookUrl UpdateAnthropicCredentialDTO: type: object properties: 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 UpdateAnthropicBedrockCredentialDTO: type: object properties: region: type: string description: AWS region where Bedrock is configured. enum: - us-east-1 - us-west-2 - eu-west-1 - eu-west-3 - ap-northeast-1 - ap-southeast-2 authenticationPlan: description: Authentication method - either direct IAM credentials or cross-account role assumption. oneOf: - $ref: '#/components/schemas/AWSIAMCredentialsAuthenticationPlan' - $ref: '#/components/schemas/AWSStsAuthenticationPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateAnyscaleCredentialDTO: type: object properties: 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 UpdateAssemblyAICredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateAzureCredentialDTO: type: object properties: 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: - australiaeast - canadaeast - canadacentral - centralus - eastus2 - eastus - france - germanywestcentral - india - japaneast - japanwest - northcentralus - norway - polandcentral - southcentralus - spaincentral - swedencentral - switzerland - uaenorth - uk - westeurope - westus - westus3 apiKey: type: string description: This is not returned in the API. maxLength: 10000 fallbackIndex: type: number minimum: 1 description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 bucketPlan: description: This is the bucket plan that can be provided to store call artifacts in Azure Blob Storage. allOf: - $ref: '#/components/schemas/AzureBlobStorageBucketPlan' UpdateAzureOpenAICredentialDTO: type: object properties: region: type: string enum: - australiaeast - canadaeast - canadacentral - centralus - eastus2 - eastus - france - germanywestcentral - india - japaneast - japanwest - northcentralus - norway - polandcentral - southcentralus - spaincentral - swedencentral - switzerland - uaenorth - uk - westeurope - westus - westus3 models: type: array enum: - gpt-5.4 - gpt-5.4-mini - gpt-5.4-nano - gpt-5.2 - gpt-5.2-chat - gpt-5.1 - gpt-5.1-chat - gpt-5 - gpt-5-mini - gpt-5-nano - gpt-4.1-2025-04-14 - gpt-4.1-mini-2025-04-14 - gpt-4.1-nano-2025-04-14 - gpt-4o-2024-11-20 - gpt-4o-2024-08-06 - gpt-4o-2024-05-13 - gpt-4o-mini-2024-07-18 - gpt-4-turbo-2024-04-09 - gpt-4-0125-preview - gpt-4-1106-preview - gpt-4-0613 - gpt-35-turbo-0125 - gpt-35-turbo-1106 example: - gpt-4-0125-preview - gpt-4-0613 items: type: string enum: - gpt-5.4 - gpt-5.4-mini - gpt-5.4-nano - gpt-5.2 - gpt-5.2-chat - gpt-5.1 - gpt-5.1-chat - gpt-5 - gpt-5-mini - gpt-5-nano - gpt-4.1-2025-04-14 - gpt-4.1-mini-2025-04-14 - gpt-4.1-nano-2025-04-14 - gpt-4o-2024-11-20 - gpt-4o-2024-08-06 - gpt-4o-2024-05-13 - gpt-4o-mini-2024-07-18 - gpt-4-turbo-2024-04-09 - gpt-4-0125-preview - gpt-4-1106-preview - gpt-4-0613 - gpt-35-turbo-0125 - gpt-35-turbo-1106 openAIKey: type: string maxLength: 10000 description: This is not returned in the API. ocpApimSubscriptionKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 openAIEndpoint: type: string maxLength: 10000 UpdateByoSipTrunkCredentialDTO: type: object properties: name: 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' outboundLeadingPlusEnabled: type: boolean description: 'This ensures the outbound origination attempts have a leading plus. Defaults to false to match conventional telecom behavior. Usage: - Vonage/Twilio requires leading plus for all outbound calls. Set this to true. @default false' techPrefix: type: string description: This can be used to configure the tech prefix on outbound calls. This is an advanced property. maxLength: 10000 sipDiversionHeader: type: string description: This can be used to enable the SIP diversion header for authenticating the calling number if the SIP trunk supports it. This is an advanced property. maxLength: 10000 sbcConfiguration: description: This is an advanced configuration for enterprise deployments. This uses the onprem SBC to trunk into the SIP trunk's `gateways`, rather than the managed SBC provided by Vapi. allOf: - $ref: '#/components/schemas/SbcConfiguration' UpdateCartesiaCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 apiUrl: type: string description: This can be used to point to an onprem Cartesia instance. Defaults to api.cartesia.ai. UpdateCerebrasCredentialDTO: type: object properties: 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 UpdateCloudflareCredentialDTO: type: object properties: accountId: type: string description: Cloudflare Account Id. apiKey: type: string description: Cloudflare API Key / Token. accountEmail: type: string description: Cloudflare Account Email. fallbackIndex: type: number description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. minimum: 1 name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 bucketPlan: description: This is the bucket plan that can be provided to store call artifacts in R2 allOf: - $ref: '#/components/schemas/CloudflareR2BucketPlan' UpdateCustomLLMCredentialDTO: type: object properties: apiKey: type: string maxLength: 10000 description: This is not returned in the API. authenticationPlan: description: This is the authentication plan. Currently supports OAuth2 RFC 6749. To use Bearer authentication, use apiKey allOf: - $ref: '#/components/schemas/OAuth2AuthenticationPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateDeepgramCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. 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. UpdateDeepInfraCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateDeepSeekCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateElevenLabsCredentialDTO: type: object properties: 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 UpdateGcpCredentialDTO: type: object properties: fallbackIndex: type: number description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. minimum: 1 name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 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. The schema is identical to the JSON that GCP outputs.' allOf: - $ref: '#/components/schemas/GcpKey' region: type: string description: This is the region of the GCP resource. maxLength: 40 bucketPlan: $ref: '#/components/schemas/BucketPlan' UpdateGladiaCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateGoHighLevelCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateGoogleCredentialDTO: type: object properties: 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 UpdateGroqCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateHumeCredentialDTO: type: object properties: 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 UpdateInflectionAICredentialDTO: type: object properties: 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 UpdateLangfuseCredentialDTO: type: object properties: publicKey: type: string description: 'The public key for Langfuse project. Eg: pk-lf-...' apiKey: type: string description: 'The secret key for Langfuse project. Eg: sk-lf-... .This is not returned in the API.' apiUrl: type: string description: 'The host URL for Langfuse project. Eg: https://cloud.langfuse.com' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateLmntCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateMakeCredentialDTO: type: object properties: teamId: type: string description: Team ID region: type: string description: 'Region of your application. For example: eu1, eu2, us1, us2' apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateMistralCredentialDTO: type: object properties: apiKey: type: string maxLength: 100 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 UpdateNeuphonicCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateOpenAICredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateOpenRouterCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdatePerplexityAICredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdatePlayHTCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 userId: type: string UpdateRimeAICredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateRunpodCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateWellSaidCredentialDTO: type: object properties: 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 UpdateS3CredentialDTO: 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: type: string description: AWS S3 bucket name. s3PathPrefix: type: string description: The path prefix for the uploaded recording. Ex. "recordings/" fallbackIndex: type: number minimum: 1 description: This is the order in which this storage provider is tried during upload retries. Lower numbers are tried first in increasing order. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateTogetherAICredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateTwilioCredentialDTO: type: object properties: authToken: type: string description: This is not returned in the API. apiKey: type: string description: This is not returned in the API. apiSecret: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 accountSid: type: string UpdateVonageCredentialDTO: type: object properties: apiSecret: type: string description: This is not returned in the API. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 apiKey: type: string UpdateWebhookCredentialDTO: type: object properties: authenticationPlan: description: This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. oneOf: - $ref: '#/components/schemas/OAuth2AuthenticationPlan' - $ref: '#/components/schemas/HMACAuthenticationPlan' - $ref: '#/components/schemas/BearerAuthenticationPlan' discriminator: propertyName: type mapping: oauth2: '#/components/schemas/OAuth2AuthenticationPlan' hmac: '#/components/schemas/HMACAuthenticationPlan' bearer: '#/components/schemas/BearerAuthenticationPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateCustomCredentialDTO: type: object properties: authenticationPlan: description: This is the authentication plan. Supports OAuth2 RFC 6749, HMAC signing, and Bearer authentication. oneOf: - $ref: '#/components/schemas/OAuth2AuthenticationPlan' - $ref: '#/components/schemas/HMACAuthenticationPlan' - $ref: '#/components/schemas/BearerAuthenticationPlan' discriminator: propertyName: type mapping: oauth2: '#/components/schemas/OAuth2AuthenticationPlan' hmac: '#/components/schemas/HMACAuthenticationPlan' bearer: '#/components/schemas/BearerAuthenticationPlan' encryptionPlan: description: This is the encryption plan for encrypting sensitive data. Currently supports public-key encryption. oneOf: - $ref: '#/components/schemas/PublicKeyEncryptionPlan' discriminator: propertyName: type mapping: public-key: '#/components/schemas/PublicKeyEncryptionPlan' allOf: - $ref: '#/components/schemas/PublicKeyEncryptionPlan' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateXAiCredentialDTO: type: object properties: apiKey: 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 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 name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateGoogleSheetsOAuth2AuthorizationCredentialDTO: type: object properties: authorizationId: type: string description: The authorization ID for the OAuth2 authorization name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateSlackOAuth2AuthorizationCredentialDTO: type: object properties: authorizationId: type: string description: The authorization ID for the OAuth2 authorization name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateGoHighLevelMCPCredentialDTO: type: object properties: authenticationSession: description: This is the authentication session for the credential. allOf: - $ref: '#/components/schemas/Oauth2AuthenticationSession' name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateInworldCredentialDTO: type: object properties: apiKey: type: string description: This is the Inworld Basic (Base64) authentication token. This is not returned in the API. example: your-base64-token-here name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateEmailCredentialDTO: type: object properties: email: type: string description: The recipient email address for alerts name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 UpdateSlackWebhookCredentialDTO: type: object properties: webhookUrl: type: string description: Slack incoming webhook URL. See https://api.slack.com/messaging/webhooks for setup instructions. 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 UpdateSonioxCredentialDTO: type: object properties: apiKey: type: string description: This is not returned in the API. apiUrl: type: string description: Custom Soniox WebSocket endpoint (e.g. EU server wss://stt-rt.eu.soniox.com/transcribe-websocket). Defaults to the region-appropriate endpoint when omitted. name: type: string description: This is the name of credential. This is just for your reference. minLength: 1 maxLength: 40 CredentialSessionResponse: type: object properties: sessionToken: type: string required: - sessionToken CredentialEndUser: type: object properties: endUserEmail: type: string nullable: true endUserId: type: string organizationId: type: string tags: type: object required: - endUserId - organizationId CredentialSessionError: type: object properties: type: type: string description: type: string required: - type - description CredentialWebhookDTO: type: object properties: type: type: string enum: - auth - sync - forward operation: type: string enum: - creation - override - refresh from: type: string connectionId: type: string authMode: type: string enum: - OAUTH2 - API_KEY - BASIC providerConfigKey: type: string provider: type: string environment: type: string success: type: boolean endUser: $ref: '#/components/schemas/CredentialEndUser' error: $ref: '#/components/schemas/CredentialSessionError' tags: type: object required: - type - operation - from - connectionId - authMode - providerConfigKey - provider - environment - success - endUser CredentialActionRequest: type: object properties: action_name: type: string input: type: object required: - action_name - input HMACAuthenticationPlan: type: object properties: type: type: string enum: - hmac secretKey: type: string description: This is the HMAC secret key used to sign requests. algorithm: type: string enum: - sha256 - sha512 - sha1 description: This is the HMAC algorithm to use for signing. signatureHeader: type: string description: This is the header name where the signature will be sent. Defaults to 'x-signature'. timestampHeader: type: string description: This is the header name where the timestamp will be sent. Defaults to 'x-timestamp'. signaturePrefix: type: string description: This is the prefix for the signature. For example, 'sha256=' for GitHub-style signatures. includeTimestamp: type: boolean description: Whether to include a timestamp in the signature payload. Defaults to true. payloadFormat: type: string description: Custom payload format. Use {body} for request body, {timestamp} for timestamp, {method} for HTTP method, {url} for URL, {svix-id} for unique message ID. Defaults to '{timestamp}.{body}'. messageIdHeader: type: string description: This is the header name where the unique message ID will be sent. Used for Svix-style webhooks. signatureEncoding: type: string enum: - hex - base64 description: The encoding format for the signature. Defaults to 'hex'. secretIsBase64: type: boolean description: Whether the secret key is base64-encoded and should be decoded before use. Defaults to false. required: - type - secretKey - algorithm BearerAuthenticationPlan: type: object properties: type: type: string enum: - bearer token: type: string description: This is the bearer token value. headerName: type: string description: This is the header name where the bearer token will be sent. Defaults to 'Authorization'. bearerPrefixEnabled: type: boolean description: Whether to include the 'Bearer ' prefix in the header value. Defaults to true. required: - type - token AWSIAMCredentialsAuthenticationPlan: type: object properties: type: type: string enum: - aws-iam awsAccessKeyId: type: string description: AWS Access Key ID. This is not returned in the API. maxLength: 128 awsSecretAccessKey: type: string description: AWS Secret Access Key. This is not returned in the API. maxLength: 256 required: - type - awsAccessKeyId - awsSecretAccessKey AWSStsAuthenticationPlan: type: object properties: type: type: string description: This is the type of authentication plan enum: - aws-sts roleArn: type: string description: This is the role ARN for the AWS credential externalId: type: string description: Optional external ID for additional security in the role trust policy. maxLength: 256 required: - type - roleArn ToolTemplateSetup: type: object properties: title: type: string description: type: string videoUrl: type: string docsUrl: type: string required: - title MakeToolProviderDetails: type: object properties: templateUrl: type: string description: This is the Template URL or the Snapshot URL corresponding to the Template. setupInstructions: type: array items: $ref: '#/components/schemas/ToolTemplateSetup' type: type: string enum: - make description: The type of tool. "make" for Make tool. scenarioId: type: number scenarioName: type: string triggerHookId: type: number triggerHookName: type: string required: - type GhlToolProviderDetails: type: object properties: templateUrl: type: string description: This is the Template URL or the Snapshot URL corresponding to the Template. setupInstructions: type: array items: $ref: '#/components/schemas/ToolTemplateSetup' type: type: string enum: - ghl description: The type of tool. "ghl" for GHL tool. workflowId: type: string workflowName: type: string webhookHookId: type: string webhookHookName: type: string locationId: type: string required: - type FunctionToolProviderDetails: type: object properties: templateUrl: type: string description: This is the Template URL or the Snapshot URL corresponding to the Template. setupInstructions: type: array items: $ref: '#/components/schemas/ToolTemplateSetup' type: type: string enum: - function description: The type of tool. "function" for Function tool. required: - type GoogleCalendarCreateEventToolProviderDetails: type: object properties: templateUrl: type: string description: This is the Template URL or the Snapshot URL corresponding to the Template. setupInstructions: type: array items: $ref: '#/components/schemas/ToolTemplateSetup' type: type: string enum: - google.calendar.event.create description: The type of tool. "google.calendar.event.create" for Google Calendar tool. required: - type GoogleSheetsRowAppendToolProviderDetails: type: object properties: templateUrl: type: string description: This is the Template URL or the Snapshot URL corresponding to the Template. setupInstructions: type: array items: $ref: '#/components/schemas/ToolTemplateSetup' type: type: string enum: - google.sheets.row.append description: The type of tool. "google.sheets.row.append" for Google Sheets tool. required: - type GoHighLevelCalendarAvailabilityToolProviderDetails: type: object properties: templateUrl: type: string description: This is the Template URL or the Snapshot URL corresponding to the Template. setupInstructions: type: array items: $ref: '#/components/schemas/ToolTemplateSetup' type: type: string enum: - gohighlevel.calendar.availability.check description: The type of tool. "gohighlevel.calendar.availability.check" for GoHighLevel Calendar availability check tool. required: - type GoHighLevelCalendarEventCreateToolProviderDetails: type: object properties: templateUrl: type: string description: This is the Template URL or the Snapshot URL corresponding to the Template. setupInstructions: type: array items: $ref: '#/components/schemas/ToolTemplateSetup' type: type: string enum: - gohighlevel.calendar.event.create description: The type of tool. "gohighlevel.calendar.event.create" for GoHighLevel Calendar event create tool. required: - type GoHighLevelContactCreateToolProviderDetails: type: object properties: templateUrl: type: string description: This is the Template URL or the Snapshot URL corresponding to the Template. setupInstructions: type: array items: $ref: '#/components/schemas/ToolTemplateSetup' type: type: string enum: - gohighlevel.contact.create description: The type of tool. "gohighlevel.contact.create" for GoHighLevel contact create tool. required: - type GoHighLevelContactGetToolProviderDetails: type: object properties: templateUrl: type: string description: This is the Template URL or the Snapshot URL corresponding to the Template. setupInstructions: type: array items: $ref: '#/components/schemas/ToolTemplateSetup' type: type: string enum: - gohighlevel.contact.get description: The type of tool. "gohighlevel.contact.get" for GoHighLevel contact get tool. required: - type ToolTemplateMetadata: type: object properties: collectionType: type: string collectionId: type: string collectionName: type: string CreateToolTemplateDTO: type: object properties: details: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool providerDetails: oneOf: - $ref: '#/components/schemas/MakeToolProviderDetails' title: MakeToolProviderDetails - $ref: '#/components/schemas/GhlToolProviderDetails' title: GhlToolProviderDetails - $ref: '#/components/schemas/FunctionToolProviderDetails' title: FunctionToolProviderDetails - $ref: '#/components/schemas/GoogleCalendarCreateEventToolProviderDetails' title: GoogleCalendarCreateEventToolProviderDetails - $ref: '#/components/schemas/GoogleSheetsRowAppendToolProviderDetails' title: GoogleSheetsRowAppendToolProviderDetails - $ref: '#/components/schemas/GoHighLevelCalendarAvailabilityToolProviderDetails' title: GoHighLevelCalendarAvailabilityToolProviderDetails - $ref: '#/components/schemas/GoHighLevelCalendarEventCreateToolProviderDetails' title: GoHighLevelCalendarEventCreateToolProviderDetails - $ref: '#/components/schemas/GoHighLevelContactCreateToolProviderDetails' title: GoHighLevelContactCreateToolProviderDetails - $ref: '#/components/schemas/GoHighLevelContactGetToolProviderDetails' title: GoHighLevelContactGetToolProviderDetails metadata: $ref: '#/components/schemas/ToolTemplateMetadata' visibility: type: string 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: - type Template: type: object properties: details: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool providerDetails: oneOf: - $ref: '#/components/schemas/MakeToolProviderDetails' title: MakeToolProviderDetails - $ref: '#/components/schemas/GhlToolProviderDetails' title: GhlToolProviderDetails - $ref: '#/components/schemas/FunctionToolProviderDetails' title: FunctionToolProviderDetails - $ref: '#/components/schemas/GoogleCalendarCreateEventToolProviderDetails' title: GoogleCalendarCreateEventToolProviderDetails - $ref: '#/components/schemas/GoogleSheetsRowAppendToolProviderDetails' title: GoogleSheetsRowAppendToolProviderDetails - $ref: '#/components/schemas/GoHighLevelCalendarAvailabilityToolProviderDetails' title: GoHighLevelCalendarAvailabilityToolProviderDetails - $ref: '#/components/schemas/GoHighLevelCalendarEventCreateToolProviderDetails' title: GoHighLevelCalendarEventCreateToolProviderDetails - $ref: '#/components/schemas/GoHighLevelContactCreateToolProviderDetails' title: GoHighLevelContactCreateToolProviderDetails - $ref: '#/components/schemas/GoHighLevelContactGetToolProviderDetails' title: GoHighLevelContactGetToolProviderDetails metadata: $ref: '#/components/schemas/ToolTemplateMetadata' visibility: default: private enum: - public - private type: string 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: enum: - make - gohighlevel - function type: string id: type: string description: The unique identifier for the template. orgId: type: string 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 - id - orgId - createdAt - updatedAt UpdateToolTemplateDTO: type: object properties: details: oneOf: - $ref: '#/components/schemas/CreateApiRequestToolDTO' title: ApiRequestTool - $ref: '#/components/schemas/CreateBashToolDTO' title: BashTool - $ref: '#/components/schemas/CreateCodeToolDTO' title: CodeTool - $ref: '#/components/schemas/CreateComputerToolDTO' title: ComputerTool - $ref: '#/components/schemas/CreateDtmfToolDTO' title: DtmfTool - $ref: '#/components/schemas/CreateEndCallToolDTO' title: EndCallTool - $ref: '#/components/schemas/CreateFunctionToolDTO' title: FunctionTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarAvailabilityToolDTO' title: GoHighLevelCalendarAvailabilityTool - $ref: '#/components/schemas/CreateGoHighLevelCalendarEventCreateToolDTO' title: GoHighLevelCalendarEventCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactCreateToolDTO' title: GoHighLevelContactCreateTool - $ref: '#/components/schemas/CreateGoHighLevelContactGetToolDTO' title: GoHighLevelContactGetTool - $ref: '#/components/schemas/CreateGoogleCalendarCheckAvailabilityToolDTO' title: GoogleCalendarCheckAvailabilityTool - $ref: '#/components/schemas/CreateGoogleCalendarCreateEventToolDTO' title: GoogleCalendarCreateEventTool - $ref: '#/components/schemas/CreateGoogleSheetsRowAppendToolDTO' title: GoogleSheetsRowAppendTool - $ref: '#/components/schemas/CreateHandoffToolDTO' title: HandoffTool - $ref: '#/components/schemas/CreateMcpToolDTO' title: McpTool - $ref: '#/components/schemas/CreateQueryToolDTO' title: QueryTool - $ref: '#/components/schemas/CreateSlackSendMessageToolDTO' title: SlackSendMessageTool - $ref: '#/components/schemas/CreateSmsToolDTO' title: SmsTool - $ref: '#/components/schemas/CreateTextEditorToolDTO' title: TextEditorTool - $ref: '#/components/schemas/CreateTransferCallToolDTO' title: TransferCallTool - $ref: '#/components/schemas/CreateSipRequestToolDTO' title: SipRequestTool - $ref: '#/components/schemas/CreateVoicemailToolDTO' title: VoicemailTool providerDetails: oneOf: - $ref: '#/components/schemas/MakeToolProviderDetails' title: MakeToolProviderDetails - $ref: '#/components/schemas/GhlToolProviderDetails' title: GhlToolProviderDetails - $ref: '#/components/schemas/FunctionToolProviderDetails' title: FunctionToolProviderDetails - $ref: '#/components/schemas/GoogleCalendarCreateEventToolProviderDetails' title: GoogleCalendarCreateEventToolProviderDetails - $ref: '#/components/schemas/GoogleSheetsRowAppendToolProviderDetails' title: GoogleSheetsRowAppendToolProviderDetails - $ref: '#/components/schemas/GoHighLevelCalendarAvailabilityToolProviderDetails' title: GoHighLevelCalendarAvailabilityToolProviderDetails - $ref: '#/components/schemas/GoHighLevelCalendarEventCreateToolProviderDetails' title: GoHighLevelCalendarEventCreateToolProviderDetails - $ref: '#/components/schemas/GoHighLevelContactCreateToolProviderDetails' title: GoHighLevelContactCreateToolProviderDetails - $ref: '#/components/schemas/GoHighLevelContactGetToolProviderDetails' title: GoHighLevelContactGetToolProviderDetails metadata: $ref: '#/components/schemas/ToolTemplateMetadata' visibility: type: string 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: - type VoiceLibrary: type: object properties: provider: type: object description: This is the voice provider that will be used. enum: - vapi - 11labs - azure - cartesia - custom-voice - deepgram - hume - lmnt - neuphonic - openai - playht - rime-ai - smallest-ai - tavus - sesame - inworld - minimax - wellsaid - orpheus providerId: type: string description: The ID of the voice provided by the provider. slug: type: string description: The unique slug of the voice. name: type: string description: The name of the voice. language: type: string description: The language of the voice. languageCode: type: string description: The language code of the voice. model: type: string description: The model of the voice. supportedModels: type: string description: The supported models of the voice. gender: type: string description: The gender of the voice. enum: - male - female accent: type: string description: The accent of the voice. previewUrl: type: string description: The preview URL of the voice. sortOrder: type: number description: The sort order of the voice for display purposes. Lower values appear first. description: type: string description: The description of the voice. credentialId: type: string description: The credential ID of the voice. id: type: string description: The unique identifier for the voice library. orgId: type: string description: The unique identifier for the organization that this voice library belongs to. isPublic: type: boolean description: The Public voice is shared accross all the organizations. isDeleted: type: boolean description: The deletion status of the voice. createdAt: format: date-time type: string description: The ISO 8601 date-time string of when the voice library was created. updatedAt: format: date-time type: string description: The ISO 8601 date-time string of when the voice library was last updated. required: - id - orgId - isPublic - isDeleted - createdAt - updatedAt SyncVoiceLibraryDTO: type: object properties: providers: type: array description: List of providers you want to sync. enum: - vapi - 11labs - azure - cartesia - custom-voice - deepgram - hume - lmnt - neuphonic - openai - playht - rime-ai - smallest-ai - tavus - sesame - inworld - minimax - wellsaid - orpheus items: type: string enum: - vapi - 11labs - azure - cartesia - custom-voice - deepgram - hume - lmnt - neuphonic - openai - playht - rime-ai - smallest-ai - tavus - sesame - inworld - minimax - wellsaid - orpheus CreateSesameVoiceDTO: type: object properties: voiceName: type: string description: The name of the voice. transcription: type: string description: The transcript of the utterance. CartesiaPronunciationDictItem: type: object properties: text: type: string description: The text to be replaced in pronunciation example: Vapi alias: type: string description: "The pronunciation alias or IPA representation\nCan be a \"\ sounds-like\" guidance (e.g., \"VAH-pee\") or IPA notation (e.g., \"<<\u02C8\ |v|\u0251|\u02C8|p|i>>\")" example: VAH-pee required: - text - alias CartesiaPronunciationDictionary: type: object properties: id: type: string description: Unique identifier for the pronunciation dictionary example: dict_abc123 name: type: string description: Name of the pronunciation dictionary example: My Dictionary ownerId: type: string description: ID of the user who owns this dictionary example: user_xyz789 pinned: type: boolean description: Whether this dictionary is pinned for the user example: false items: description: List of text-to-pronunciation mappings type: array items: $ref: '#/components/schemas/CartesiaPronunciationDictItem' createdAt: type: string description: ISO 8601 timestamp of when the dictionary was created example: '2024-01-15T10:30:00Z' required: - id - name - ownerId - pinned - items - createdAt ElevenLabsPronunciationDictionary: type: object properties: pronunciationDictionaryId: type: string description: The ID of the pronunciation dictionary example: 5xM3yVvZQKV0EfqQpLrJ dictionaryName: type: string description: The name of the pronunciation dictionary example: My Dictionary createdBy: type: string description: The user ID of the creator example: ar6633Es2kUjFXBdR1iVc9ztsXl1 creationTimeUnix: type: number description: The creation time in Unix timestamp example: 1714156800 versionId: type: string description: The version ID of the pronunciation dictionary example: 5xM3yVvZQKV0EfqQpLrJ versionRulesNum: type: number description: The number of rules in this version example: 5 permissionOnResource: type: string description: The permission level on this resource enum: - admin - editor - viewer description: type: string description: The description of the pronunciation dictionary example: This is a test dictionary required: - pronunciationDictionaryId - dictionaryName - createdBy - creationTimeUnix - versionId - versionRulesNum ProviderResource: type: object properties: id: type: string description: This is the unique identifier for the provider resource. orgId: type: string description: This is the unique identifier for the org that this provider resource belongs to. createdAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the provider resource was created. updatedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the provider resource was last updated. provider: type: string description: This is the provider that manages this resource. enum: - cartesia - 11labs resourceName: type: string description: This is the name/type of the resource. enum: - pronunciation-dictionary resourceId: type: string description: This is the provider-specific identifier for the resource. resource: type: object description: This is the full resource data from the provider's API. required: - id - orgId - createdAt - updatedAt - provider - resourceName - resourceId - resource ProviderResourcePaginatedResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/ProviderResource' metadata: $ref: '#/components/schemas/PaginationMeta' required: - results - metadata VoiceLibraryVoiceResponse: type: object properties: voiceId: type: string name: type: string publicOwnerId: type: string description: type: string gender: type: string age: type: object accent: type: string required: - voiceId - name 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 new name of the voice which you want to have once you have added voice to your provider Account from Provider Voice Library required: - ownerId - voiceId - name CloneVoiceDTO: type: object properties: name: type: string description: This is the name of the cloned voice in the provider account. 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 VariableValueGroupBy: type: object properties: key: type: string description: This is the key of the variable value to group by. maxLength: 100 required: - key TimeRange: type: object properties: step: type: string description: 'This is the time step for aggregations. If not provided, defaults to returning for the entire time range.' enum: - second - minute - hour - day - week - month - quarter - year - decade - century - millennium start: format: date-time type: string description: 'This is the start date for the time range. If not provided, defaults to the 7 days ago.' end: format: date-time type: string description: 'This is the end date for the time range. If not provided, defaults to now.' timezone: type: string description: 'This is the timezone you want to set for the query. If not provided, defaults to UTC.' AnalyticsOperation: type: object properties: operation: type: string description: This is the aggregation operation you want to perform. enum: - sum - avg - count - min - max - history 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.transport - costBreakdown.analysisBreakdown.summary - costBreakdown.transcriber - costBreakdown.ttsCharacters - costBreakdown.llmPromptTokens - costBreakdown.llmCompletionTokens - costBreakdown.llmCachedPromptTokens - duration - concurrency - minutesUsed alias: type: string description: This is the alias for column name returned. Defaults to `${operation}${column}`. maxLength: 40 required: - operation - column AnalyticsQuery: type: object properties: table: type: string description: This is the table you want to query. enum: - call - subscription groupBy: type: array description: This is the list of columns you want to group by. enum: - type - assistantId - endedReason - analysis.successEvaluation - status items: type: string enum: - type - assistantId - endedReason - analysis.successEvaluation - status groupByVariableValue: description: This is the list of variable value keys you want to group by. type: array items: $ref: '#/components/schemas/VariableValueGroupBy' name: type: string description: This is the name of the query. This will be used to identify the query in the response. maxLength: 40 timeRange: description: This is the time range for the query. allOf: - $ref: '#/components/schemas/TimeRange' operations: description: This is the list of operations you want to perform. type: array items: $ref: '#/components/schemas/AnalyticsOperation' required: - table - name - operations AnalyticsQueryDTO: type: object properties: queries: description: This is the list of metric queries you want to perform. type: array items: $ref: '#/components/schemas/AnalyticsQuery' required: - queries AnalyticsQueryResult: type: object properties: name: type: string description: This is the unique key for the query. 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: - name - timeRange - result ClientMessageWorkflowNodeStarted: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "workflow.node.started" is sent when the active node changes. enum: - workflow.node.started timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' node: type: object description: This is the active node. required: - type - node ClientMessageAssistantStarted: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "assistant.started" is sent when the assistant is started. enum: - assistant.started timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' newAssistant: description: This is the assistant that was updated. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' required: - type - newAssistant ClientMessageConversationUpdate: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "conversation-update" is sent when an update is committed to the conversation history. enum: - conversation-update messages: type: array description: This is the most up-to-date conversation history at the time the message is sent. items: oneOf: - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/BotMessage' title: BotMessage - $ref: '#/components/schemas/ToolCallMessage' title: ToolCallMessage - $ref: '#/components/schemas/ToolCallResultMessage' title: ToolCallResultMessage messagesOpenAIFormatted: description: This is the most up-to-date conversation history at the time the message is sent, formatted for OpenAI. type: array items: $ref: '#/components/schemas/OpenAIMessage' timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' required: - type - messagesOpenAIFormatted ClientMessageHang: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: 'This is the type of the message. "hang" is sent when the assistant is hanging due to a delay. The delay can be caused by many factors, such as: - the model is too slow to respond - the voice is too slow to respond - the tool call is still waiting for a response from your server - etc.' enum: - hang timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' required: - type ClientMessageMetadata: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "metadata" is sent to forward metadata to the client. enum: - metadata timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' metadata: type: string description: This is the metadata content required: - type - metadata ClientMessageModelOutput: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "model-output" is sent as the model outputs tokens. enum: - model-output turnId: type: string description: 'This is the unique identifier for the current LLM turn. All tokens from the same LLM response share the same turnId. Use this to group tokens and discard on interruption.' timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' output: type: object description: This is the output of the model. It can be a token or tool call. required: - type - output ClientMessageSpeechUpdate: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "speech-update" is sent whenever assistant or user start or stop speaking. enum: - speech-update status: type: string description: This is the status of the speech update. enum: - started - stopped role: type: string description: This is the role which the speech update is for. enum: - assistant - user turn: type: number description: This is the turn number of the speech update (0-indexed). timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' required: - type - status - role ClientMessageTranscript: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "transcript" is sent as transcriber outputs partial or final transcript. enum: - transcript - transcript[transcriptType="final"] timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' role: type: string description: This is the role for which the transcript is for. enum: - assistant - user transcriptType: type: string description: This is the type of the transcript. enum: - partial - final transcript: type: string description: This is the transcript content. isFiltered: type: boolean description: Indicates if the transcript was filtered for security reasons. detectedThreats: description: List of detected security threats if the transcript was filtered. type: array items: type: string originalTranscript: type: string description: The original transcript before filtering (only included if content was filtered). required: - type - role - transcriptType - transcript ClientMessageToolCalls: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "tool-calls" is sent to call a tool. enum: - tool-calls toolWithToolCallList: type: array description: This is the list of tools calls that the model is requesting along with the original tool configuration. items: oneOf: - $ref: '#/components/schemas/FunctionToolWithToolCall' title: FunctionToolWithToolCall - $ref: '#/components/schemas/GhlToolWithToolCall' title: GhlToolWithToolCall - $ref: '#/components/schemas/MakeToolWithToolCall' title: MakeToolWithToolCall - $ref: '#/components/schemas/BashToolWithToolCall' title: BashToolWithToolCall - $ref: '#/components/schemas/ComputerToolWithToolCall' title: ComputerToolWithToolCall - $ref: '#/components/schemas/TextEditorToolWithToolCall' title: TextEditorToolWithToolCall - $ref: '#/components/schemas/GoogleCalendarCreateEventToolWithToolCall' title: GoogleCalendarCreateEventToolWithToolCall timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' toolCallList: description: This is the list of tool calls that the model is requesting. type: array items: $ref: '#/components/schemas/ToolCall' required: - toolWithToolCallList - toolCallList ClientMessageToolCallsResult: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "tool-calls-result" is sent to forward the result of a tool call to the client. enum: - tool-calls-result timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' toolCallResult: type: object description: This is the result of the tool call. required: - type - toolCallResult ClientMessageTransferUpdate: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "transfer-update" is sent whenever a transfer happens. enum: - transfer-update destination: description: This is the destination of the transfer. oneOf: - $ref: '#/components/schemas/TransferDestinationAssistant' title: Assistant - $ref: '#/components/schemas/TransferDestinationNumber' title: Number - $ref: '#/components/schemas/TransferDestinationSip' title: Sip timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' toAssistant: description: This is the assistant that the call is being transferred to. This is only sent if `destination.type` is "assistant". allOf: - $ref: '#/components/schemas/CreateAssistantDTO' fromAssistant: description: This is the assistant that the call is being transferred from. This is only sent if `destination.type` is "assistant". allOf: - $ref: '#/components/schemas/CreateAssistantDTO' toStepRecord: type: object description: This is the step that the conversation moved to. fromStepRecord: type: object description: This is the step that the conversation moved from. = required: - type ClientMessageUserInterrupted: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "user-interrupted" is sent when the user interrupts the assistant. enum: - user-interrupted turnId: type: string description: 'This is the turnId of the LLM response that was interrupted. Matches the turnId on model-output messages so clients can discard the interrupted turn''s tokens.' timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' required: - type ClientMessageLanguageChangeDetected: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "language-change-detected" is sent when the transcriber is automatically switched based on the detected language. enum: - language-change-detected timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' language: type: string description: This is the language the transcriber is switched to. required: - type - language ClientMessageVoiceInput: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "voice-input" is sent when a generation is requested from voice provider. enum: - voice-input timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' input: type: string description: This is the voice input content required: - type - input ClientMessageAssistantSpeech: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "assistant-speech" is sent as assistant audio is being played. enum: - assistant.speechStarted text: type: string description: "The full assistant text for the current turn. This is the\ \ complete text,\nnot an incremental delta \u2014 consumers should use\ \ `timing` metadata (e.g.\n`wordsSpoken`) to determine which portion has\ \ been spoken so far." turn: type: number description: This is the turn number of the assistant speech event (0-indexed). source: type: string description: Indicates how the text was sourced. enum: - model - force-say - custom-voice timing: description: "Optional timing metadata. Shape depends on `timing.type`:\n\ \n- `word-alignment` (ElevenLabs): per-character timing at playback\n\ \ cadence. words[] includes space entries. Best consumed by tracking\n\ \ a running character count: join timing.words, add to a char cursor,\n\ \ and highlight text up to that position. No interpolation needed.\n\n\ - `word-progress` (Minimax with voice.subtitleType: 'word'): cursor-\n\ \ based word count per TTS segment. Use wordsSpoken as the anchor,\n\ \ interpolate forward using segmentDurationMs or timing.words until\n\ \ the next event arrives.\n\nWhen absent, the event is a text-only fallback\ \ for providers without\nword-level timing (e.g. Cartesia, Deepgram, Azure).\ \ Text emits once\nper TTS chunk when audio is playing. Optionally interpolate\ \ a word\ncursor at ~3.5 words/sec between events for approximate tracking." oneOf: - $ref: '#/components/schemas/AssistantSpeechWordAlignmentTiming' title: WordAlignmentTiming - $ref: '#/components/schemas/AssistantSpeechWordProgressTiming' title: WordProgressTiming discriminator: propertyName: type timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' required: - type - text ClientMessageChatCreated: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "chat.created" is sent when a new chat is created. enum: - chat.created timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' chat: description: This is the chat that was created. allOf: - $ref: '#/components/schemas/Chat' required: - type - chat ClientMessageChatDeleted: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "chat.deleted" is sent when a chat is deleted. enum: - chat.deleted timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' chat: description: This is the chat that was deleted. allOf: - $ref: '#/components/schemas/Chat' required: - type - chat ClientMessageSessionCreated: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "session.created" is sent when a new session is created. enum: - session.created timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' session: description: This is the session that was created. allOf: - $ref: '#/components/schemas/Session' required: - type - session ClientMessageSessionUpdated: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "session.updated" is sent when a session is updated. enum: - session.updated timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' session: description: This is the session that was updated. allOf: - $ref: '#/components/schemas/Session' required: - type - session ClientMessageSessionDeleted: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "session.deleted" is sent when a session is deleted. enum: - session.deleted timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' session: description: This is the session that was deleted. allOf: - $ref: '#/components/schemas/Session' required: - type - session ClientMessageCallDeleted: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "call.deleted" is sent when a call is deleted. enum: - call.deleted timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' required: - type ClientMessageCallDeleteFailed: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "call.deleted" is sent when a call is deleted. enum: - call.delete.failed timestamp: type: number description: This is the timestamp of the message. call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' required: - type ClientMessage: type: object properties: message: description: These are all the messages that can be sent to the client-side SDKs during the call. Configure the messages you'd like to receive in `assistant.clientMessages`. oneOf: - $ref: '#/components/schemas/ClientMessageWorkflowNodeStarted' title: WorkflowNodeStarted - $ref: '#/components/schemas/ClientMessageAssistantStarted' title: AssistantStarted - $ref: '#/components/schemas/ClientMessageConversationUpdate' title: ConversationUpdate - $ref: '#/components/schemas/ClientMessageHang' title: Hang - $ref: '#/components/schemas/ClientMessageMetadata' title: Metadata - $ref: '#/components/schemas/ClientMessageModelOutput' title: ModelOutput - $ref: '#/components/schemas/ClientMessageSpeechUpdate' title: SpeechUpdate - $ref: '#/components/schemas/ClientMessageTranscript' title: Transcript - $ref: '#/components/schemas/ClientMessageToolCalls' title: ToolCalls - $ref: '#/components/schemas/ClientMessageToolCallsResult' title: ToolCallsResult - $ref: '#/components/schemas/ClientMessageTransferUpdate' title: TransferUpdate - $ref: '#/components/schemas/ClientMessageUserInterrupted' title: UserInterrupted - $ref: '#/components/schemas/ClientMessageLanguageChangeDetected' title: LanguageChangeDetected - $ref: '#/components/schemas/ClientMessageVoiceInput' title: VoiceInput - $ref: '#/components/schemas/ClientMessageAssistantSpeech' title: AssistantSpeech - $ref: '#/components/schemas/ClientMessageChatCreated' title: ChatCreated - $ref: '#/components/schemas/ClientMessageChatDeleted' title: ChatDeleted - $ref: '#/components/schemas/ClientMessageSessionCreated' title: SessionCreated - $ref: '#/components/schemas/ClientMessageSessionUpdated' title: SessionUpdated - $ref: '#/components/schemas/ClientMessageSessionDeleted' title: SessionDeleted - $ref: '#/components/schemas/ClientMessageCallDeleted' title: CallDeleted - $ref: '#/components/schemas/ClientMessageCallDeleteFailed' title: CallDeleteFailed required: - message ServerMessageAssistantRequest: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "assistant-request" is sent to fetch assistant configuration for an incoming call. enum: - assistant-request timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type ServerMessageConversationUpdate: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "conversation-update" is sent when an update is committed to the conversation history. enum: - conversation-update messages: type: array description: This is the most up-to-date conversation history at the time the message is sent. items: oneOf: - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/BotMessage' title: BotMessage - $ref: '#/components/schemas/ToolCallMessage' title: ToolCallMessage - $ref: '#/components/schemas/ToolCallResultMessage' title: ToolCallResultMessage messagesOpenAIFormatted: description: This is the most up-to-date conversation history at the time the message is sent, formatted for OpenAI. type: array items: $ref: '#/components/schemas/OpenAIMessage' timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type - messagesOpenAIFormatted ServerMessageEndOfCallReport: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "end-of-call-report" is sent when the call ends and post-processing is complete. enum: - end-of-call-report endedReason: type: string description: This is the reason the call ended. This can also be found at `call.endedReason` on GET /call/:id. enum: - call-start-error-neither-assistant-nor-server-set - assistant-request-failed - assistant-request-returned-error - assistant-request-returned-unspeakable-error - assistant-request-returned-invalid-assistant - assistant-request-returned-no-assistant - assistant-request-returned-forwarding-phone-number - scheduled-call-deleted - call.start.error-vapifault-get-org - call.start.error-vapifault-get-subscription - call.start.error-get-assistant - call.start.error-get-phone-number - call.start.error-get-customer - 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 - call.start.error-subscription-wallet-does-not-exist - call.start.error-fraud-check-failed - call.start.error-subscription-frozen - call.start.error-subscription-insufficient-credits - call.start.error-subscription-upgrade-failed - call.start.error-subscription-concurrency-limit-reached - call.start.error-enterprise-feature-not-available-recording-consent - assistant-not-valid - call.start.error-vapifault-database-error - assistant-not-found - pipeline-error-openai-voice-failed - pipeline-error-cartesia-voice-failed - pipeline-error-deepgram-voice-failed - pipeline-error-eleven-labs-voice-failed - pipeline-error-playht-voice-failed - pipeline-error-lmnt-voice-failed - pipeline-error-azure-voice-failed - pipeline-error-rime-ai-voice-failed - pipeline-error-smallest-ai-voice-failed - pipeline-error-vapi-voice-failed - pipeline-error-neuphonic-voice-failed - pipeline-error-hume-voice-failed - pipeline-error-sesame-voice-failed - pipeline-error-inworld-voice-failed - pipeline-error-minimax-voice-failed - pipeline-error-wellsaid-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-vapi-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-inworld-voice-failed - call.in-progress.error-vapifault-minimax-voice-failed - call.in-progress.error-vapifault-wellsaid-voice-failed - call.in-progress.error-vapifault-tavus-video-failed - pipeline-error-vapi-llm-failed - pipeline-error-vapi-400-bad-request-validation-failed - pipeline-error-vapi-401-unauthorized - pipeline-error-vapi-403-model-access-denied - pipeline-error-vapi-429-exceeded-quota - pipeline-error-vapi-500-server-error - pipeline-error-vapi-503-server-overloaded-error - call.in-progress.error-providerfault-vapi-llm-failed - call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed - call.in-progress.error-vapifault-vapi-401-unauthorized - call.in-progress.error-vapifault-vapi-403-model-access-denied - call.in-progress.error-vapifault-vapi-429-exceeded-quota - call.in-progress.error-providerfault-vapi-500-server-error - call.in-progress.error-providerfault-vapi-503-server-overloaded-error - pipeline-error-deepgram-transcriber-failed - pipeline-error-deepgram-transcriber-api-key-missing - call.in-progress.error-vapifault-deepgram-transcriber-failed - pipeline-error-gladia-transcriber-failed - call.in-progress.error-vapifault-gladia-transcriber-failed - pipeline-error-speechmatics-transcriber-failed - call.in-progress.error-vapifault-speechmatics-transcriber-failed - pipeline-error-assembly-ai-transcriber-failed - pipeline-error-assembly-ai-returning-400-insufficent-funds - pipeline-error-assembly-ai-returning-400-paid-only-feature - pipeline-error-assembly-ai-returning-401-invalid-credentials - pipeline-error-assembly-ai-returning-500-invalid-schema - pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed - call.in-progress.error-vapifault-assembly-ai-transcriber-failed - call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds - call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature - call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials - call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema - call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed - pipeline-error-talkscriber-transcriber-failed - call.in-progress.error-vapifault-talkscriber-transcriber-failed - pipeline-error-azure-speech-transcriber-failed - call.in-progress.error-vapifault-azure-speech-transcriber-failed - pipeline-error-eleven-labs-transcriber-failed - call.in-progress.error-vapifault-eleven-labs-transcriber-failed - 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 - pipeline-error-soniox-transcriber-auth-failed - pipeline-error-soniox-transcriber-rate-limited - pipeline-error-soniox-transcriber-invalid-config - pipeline-error-soniox-transcriber-server-error - pipeline-error-soniox-transcriber-failed - call.in-progress.error-vapifault-soniox-transcriber-auth-failed - call.in-progress.error-vapifault-soniox-transcriber-rate-limited - call.in-progress.error-vapifault-soniox-transcriber-invalid-config - call.in-progress.error-vapifault-soniox-transcriber-server-error - call.in-progress.error-vapifault-soniox-transcriber-failed - call.in-progress.error-pipeline-no-available-llm-model - worker-shutdown - vonage-disconnected - vonage-failed-to-connect-call - vonage-completed - phone-call-provider-bypass-enabled-but-no-call-received - call.in-progress.error-providerfault-transport-never-connected - call.in-progress.error-vapifault-worker-not-available - call.in-progress.error-vapifault-transport-never-connected - call.in-progress.error-vapifault-transport-connected-but-call-not-active - call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing - call.in-progress.error-vapifault-worker-died - call.in-progress.twilio-completed-call - call.in-progress.sip-completed-call - call.in-progress.error-sip-inbound-call-failed-to-connect - call.in-progress.error-providerfault-outbound-sip-503-service-unavailable - call.in-progress.error-sip-outbound-call-failed-to-connect - call.ringing.error-sip-inbound-call-failed-to-connect - call.in-progress.error-providerfault-openai-llm-failed - call.in-progress.error-providerfault-azure-openai-llm-failed - call.in-progress.error-providerfault-groq-llm-failed - call.in-progress.error-providerfault-google-llm-failed - call.in-progress.error-providerfault-xai-llm-failed - call.in-progress.error-providerfault-mistral-llm-failed - call.in-progress.error-providerfault-minimax-llm-failed - call.in-progress.error-providerfault-inflection-ai-llm-failed - call.in-progress.error-providerfault-cerebras-llm-failed - call.in-progress.error-providerfault-deep-seek-llm-failed - call.in-progress.error-providerfault-baseten-llm-failed - call.in-progress.error-vapifault-chat-pipeline-failed-to-start - pipeline-error-openai-400-bad-request-validation-failed - pipeline-error-openai-401-unauthorized - pipeline-error-openai-401-incorrect-api-key - pipeline-error-openai-401-account-not-in-organization - pipeline-error-openai-403-model-access-denied - pipeline-error-openai-429-exceeded-quota - pipeline-error-openai-429-rate-limit-reached - pipeline-error-openai-500-server-error - pipeline-error-openai-503-server-overloaded-error - pipeline-error-openai-llm-failed - call.in-progress.error-vapifault-openai-400-bad-request-validation-failed - call.in-progress.error-vapifault-openai-401-unauthorized - call.in-progress.error-vapifault-openai-401-incorrect-api-key - call.in-progress.error-vapifault-openai-401-account-not-in-organization - call.in-progress.error-vapifault-openai-403-model-access-denied - call.in-progress.error-vapifault-openai-429-exceeded-quota - call.in-progress.error-vapifault-openai-429-rate-limit-reached - call.in-progress.error-providerfault-openai-500-server-error - call.in-progress.error-providerfault-openai-503-server-overloaded-error - pipeline-error-azure-openai-400-bad-request-validation-failed - pipeline-error-azure-openai-401-unauthorized - pipeline-error-azure-openai-403-model-access-denied - pipeline-error-azure-openai-429-exceeded-quota - pipeline-error-azure-openai-500-server-error - pipeline-error-azure-openai-503-server-overloaded-error - pipeline-error-azure-openai-llm-failed - call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed - call.in-progress.error-vapifault-azure-openai-401-unauthorized - call.in-progress.error-vapifault-azure-openai-403-model-access-denied - call.in-progress.error-vapifault-azure-openai-429-exceeded-quota - call.in-progress.error-providerfault-azure-openai-500-server-error - call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error - pipeline-error-google-400-bad-request-validation-failed - pipeline-error-google-401-unauthorized - pipeline-error-google-403-model-access-denied - pipeline-error-google-429-exceeded-quota - pipeline-error-google-500-server-error - pipeline-error-google-503-server-overloaded-error - pipeline-error-google-llm-failed - call.in-progress.error-vapifault-google-400-bad-request-validation-failed - call.in-progress.error-vapifault-google-401-unauthorized - call.in-progress.error-vapifault-google-403-model-access-denied - call.in-progress.error-vapifault-google-429-exceeded-quota - call.in-progress.error-providerfault-google-500-server-error - call.in-progress.error-providerfault-google-503-server-overloaded-error - pipeline-error-xai-400-bad-request-validation-failed - pipeline-error-xai-401-unauthorized - pipeline-error-xai-403-model-access-denied - pipeline-error-xai-429-exceeded-quota - pipeline-error-xai-500-server-error - pipeline-error-xai-503-server-overloaded-error - pipeline-error-xai-llm-failed - call.in-progress.error-vapifault-xai-400-bad-request-validation-failed - call.in-progress.error-vapifault-xai-401-unauthorized - call.in-progress.error-vapifault-xai-403-model-access-denied - call.in-progress.error-vapifault-xai-429-exceeded-quota - call.in-progress.error-providerfault-xai-500-server-error - call.in-progress.error-providerfault-xai-503-server-overloaded-error - pipeline-error-baseten-400-bad-request-validation-failed - pipeline-error-baseten-401-unauthorized - pipeline-error-baseten-403-model-access-denied - pipeline-error-baseten-429-exceeded-quota - pipeline-error-baseten-500-server-error - pipeline-error-baseten-503-server-overloaded-error - pipeline-error-baseten-llm-failed - call.in-progress.error-vapifault-baseten-400-bad-request-validation-failed - call.in-progress.error-vapifault-baseten-401-unauthorized - call.in-progress.error-vapifault-baseten-403-model-access-denied - call.in-progress.error-vapifault-baseten-429-exceeded-quota - call.in-progress.error-providerfault-baseten-500-server-error - call.in-progress.error-providerfault-baseten-503-server-overloaded-error - pipeline-error-mistral-400-bad-request-validation-failed - pipeline-error-mistral-401-unauthorized - pipeline-error-mistral-403-model-access-denied - pipeline-error-mistral-429-exceeded-quota - pipeline-error-mistral-500-server-error - pipeline-error-mistral-503-server-overloaded-error - pipeline-error-mistral-llm-failed - call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed - call.in-progress.error-vapifault-mistral-401-unauthorized - call.in-progress.error-vapifault-mistral-403-model-access-denied - call.in-progress.error-vapifault-mistral-429-exceeded-quota - call.in-progress.error-providerfault-mistral-500-server-error - call.in-progress.error-providerfault-mistral-503-server-overloaded-error - pipeline-error-minimax-400-bad-request-validation-failed - pipeline-error-minimax-401-unauthorized - pipeline-error-minimax-403-model-access-denied - pipeline-error-minimax-429-exceeded-quota - pipeline-error-minimax-500-server-error - pipeline-error-minimax-503-server-overloaded-error - pipeline-error-minimax-llm-failed - call.in-progress.error-vapifault-minimax-400-bad-request-validation-failed - call.in-progress.error-vapifault-minimax-401-unauthorized - call.in-progress.error-vapifault-minimax-403-model-access-denied - call.in-progress.error-vapifault-minimax-429-exceeded-quota - call.in-progress.error-providerfault-minimax-500-server-error - call.in-progress.error-providerfault-minimax-503-server-overloaded-error - pipeline-error-inflection-ai-400-bad-request-validation-failed - pipeline-error-inflection-ai-401-unauthorized - pipeline-error-inflection-ai-403-model-access-denied - pipeline-error-inflection-ai-429-exceeded-quota - pipeline-error-inflection-ai-500-server-error - pipeline-error-inflection-ai-503-server-overloaded-error - pipeline-error-inflection-ai-llm-failed - call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed - call.in-progress.error-vapifault-inflection-ai-401-unauthorized - call.in-progress.error-vapifault-inflection-ai-403-model-access-denied - call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota - call.in-progress.error-providerfault-inflection-ai-500-server-error - call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error - pipeline-error-deep-seek-400-bad-request-validation-failed - pipeline-error-deep-seek-401-unauthorized - pipeline-error-deep-seek-403-model-access-denied - pipeline-error-deep-seek-429-exceeded-quota - pipeline-error-deep-seek-500-server-error - pipeline-error-deep-seek-503-server-overloaded-error - pipeline-error-deep-seek-llm-failed - call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed - call.in-progress.error-vapifault-deep-seek-401-unauthorized - call.in-progress.error-vapifault-deep-seek-403-model-access-denied - call.in-progress.error-vapifault-deep-seek-429-exceeded-quota - call.in-progress.error-providerfault-deep-seek-500-server-error - call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error - pipeline-error-groq-400-bad-request-validation-failed - pipeline-error-groq-401-unauthorized - pipeline-error-groq-403-model-access-denied - pipeline-error-groq-429-exceeded-quota - pipeline-error-groq-500-server-error - pipeline-error-groq-503-server-overloaded-error - pipeline-error-groq-llm-failed - call.in-progress.error-vapifault-groq-400-bad-request-validation-failed - call.in-progress.error-vapifault-groq-401-unauthorized - call.in-progress.error-vapifault-groq-403-model-access-denied - call.in-progress.error-vapifault-groq-429-exceeded-quota - call.in-progress.error-providerfault-groq-500-server-error - call.in-progress.error-providerfault-groq-503-server-overloaded-error - pipeline-error-cerebras-400-bad-request-validation-failed - pipeline-error-cerebras-401-unauthorized - pipeline-error-cerebras-403-model-access-denied - pipeline-error-cerebras-429-exceeded-quota - pipeline-error-cerebras-500-server-error - pipeline-error-cerebras-503-server-overloaded-error - pipeline-error-cerebras-llm-failed - call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed - call.in-progress.error-vapifault-cerebras-401-unauthorized - call.in-progress.error-vapifault-cerebras-403-model-access-denied - call.in-progress.error-vapifault-cerebras-429-exceeded-quota - call.in-progress.error-providerfault-cerebras-500-server-error - call.in-progress.error-providerfault-cerebras-503-server-overloaded-error - pipeline-error-anthropic-400-bad-request-validation-failed - pipeline-error-anthropic-401-unauthorized - pipeline-error-anthropic-403-model-access-denied - pipeline-error-anthropic-429-exceeded-quota - pipeline-error-anthropic-500-server-error - pipeline-error-anthropic-503-server-overloaded-error - pipeline-error-anthropic-llm-failed - call.in-progress.error-providerfault-anthropic-llm-failed - call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed - call.in-progress.error-vapifault-anthropic-401-unauthorized - call.in-progress.error-vapifault-anthropic-403-model-access-denied - call.in-progress.error-vapifault-anthropic-429-exceeded-quota - call.in-progress.error-providerfault-anthropic-500-server-error - call.in-progress.error-providerfault-anthropic-503-server-overloaded-error - pipeline-error-anthropic-bedrock-400-bad-request-validation-failed - pipeline-error-anthropic-bedrock-401-unauthorized - pipeline-error-anthropic-bedrock-403-model-access-denied - pipeline-error-anthropic-bedrock-429-exceeded-quota - pipeline-error-anthropic-bedrock-500-server-error - pipeline-error-anthropic-bedrock-503-server-overloaded-error - pipeline-error-anthropic-bedrock-llm-failed - call.in-progress.error-providerfault-anthropic-bedrock-llm-failed - call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed - call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized - call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied - call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota - call.in-progress.error-providerfault-anthropic-bedrock-500-server-error - call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error - pipeline-error-anthropic-vertex-400-bad-request-validation-failed - pipeline-error-anthropic-vertex-401-unauthorized - pipeline-error-anthropic-vertex-403-model-access-denied - pipeline-error-anthropic-vertex-429-exceeded-quota - pipeline-error-anthropic-vertex-500-server-error - pipeline-error-anthropic-vertex-503-server-overloaded-error - pipeline-error-anthropic-vertex-llm-failed - call.in-progress.error-providerfault-anthropic-vertex-llm-failed - call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed - call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized - call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied - call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota - call.in-progress.error-providerfault-anthropic-vertex-500-server-error - call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error - pipeline-error-together-ai-400-bad-request-validation-failed - pipeline-error-together-ai-401-unauthorized - pipeline-error-together-ai-403-model-access-denied - pipeline-error-together-ai-429-exceeded-quota - pipeline-error-together-ai-500-server-error - pipeline-error-together-ai-503-server-overloaded-error - pipeline-error-together-ai-llm-failed - call.in-progress.error-providerfault-together-ai-llm-failed - call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed - call.in-progress.error-vapifault-together-ai-401-unauthorized - call.in-progress.error-vapifault-together-ai-403-model-access-denied - call.in-progress.error-vapifault-together-ai-429-exceeded-quota - call.in-progress.error-providerfault-together-ai-500-server-error - call.in-progress.error-providerfault-together-ai-503-server-overloaded-error - pipeline-error-anyscale-400-bad-request-validation-failed - pipeline-error-anyscale-401-unauthorized - pipeline-error-anyscale-403-model-access-denied - pipeline-error-anyscale-429-exceeded-quota - pipeline-error-anyscale-500-server-error - pipeline-error-anyscale-503-server-overloaded-error - pipeline-error-anyscale-llm-failed - call.in-progress.error-providerfault-anyscale-llm-failed - call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed - call.in-progress.error-vapifault-anyscale-401-unauthorized - call.in-progress.error-vapifault-anyscale-403-model-access-denied - call.in-progress.error-vapifault-anyscale-429-exceeded-quota - call.in-progress.error-providerfault-anyscale-500-server-error - call.in-progress.error-providerfault-anyscale-503-server-overloaded-error - pipeline-error-openrouter-400-bad-request-validation-failed - pipeline-error-openrouter-401-unauthorized - pipeline-error-openrouter-403-model-access-denied - pipeline-error-openrouter-429-exceeded-quota - pipeline-error-openrouter-500-server-error - pipeline-error-openrouter-503-server-overloaded-error - pipeline-error-openrouter-llm-failed - call.in-progress.error-providerfault-openrouter-llm-failed - call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed - call.in-progress.error-vapifault-openrouter-401-unauthorized - call.in-progress.error-vapifault-openrouter-403-model-access-denied - call.in-progress.error-vapifault-openrouter-429-exceeded-quota - call.in-progress.error-providerfault-openrouter-500-server-error - call.in-progress.error-providerfault-openrouter-503-server-overloaded-error - pipeline-error-perplexity-ai-400-bad-request-validation-failed - pipeline-error-perplexity-ai-401-unauthorized - pipeline-error-perplexity-ai-403-model-access-denied - pipeline-error-perplexity-ai-429-exceeded-quota - pipeline-error-perplexity-ai-500-server-error - pipeline-error-perplexity-ai-503-server-overloaded-error - pipeline-error-perplexity-ai-llm-failed - call.in-progress.error-providerfault-perplexity-ai-llm-failed - call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed - call.in-progress.error-vapifault-perplexity-ai-401-unauthorized - call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied - call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota - call.in-progress.error-providerfault-perplexity-ai-500-server-error - call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error - pipeline-error-deepinfra-400-bad-request-validation-failed - pipeline-error-deepinfra-401-unauthorized - pipeline-error-deepinfra-403-model-access-denied - pipeline-error-deepinfra-429-exceeded-quota - pipeline-error-deepinfra-500-server-error - pipeline-error-deepinfra-503-server-overloaded-error - pipeline-error-deepinfra-llm-failed - call.in-progress.error-providerfault-deepinfra-llm-failed - call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed - call.in-progress.error-vapifault-deepinfra-401-unauthorized - call.in-progress.error-vapifault-deepinfra-403-model-access-denied - call.in-progress.error-vapifault-deepinfra-429-exceeded-quota - call.in-progress.error-providerfault-deepinfra-500-server-error - call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error - pipeline-error-runpod-400-bad-request-validation-failed - pipeline-error-runpod-401-unauthorized - pipeline-error-runpod-403-model-access-denied - pipeline-error-runpod-429-exceeded-quota - pipeline-error-runpod-500-server-error - pipeline-error-runpod-503-server-overloaded-error - pipeline-error-runpod-llm-failed - call.in-progress.error-providerfault-runpod-llm-failed - call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed - call.in-progress.error-vapifault-runpod-401-unauthorized - call.in-progress.error-vapifault-runpod-403-model-access-denied - call.in-progress.error-vapifault-runpod-429-exceeded-quota - call.in-progress.error-providerfault-runpod-500-server-error - call.in-progress.error-providerfault-runpod-503-server-overloaded-error - pipeline-error-custom-llm-400-bad-request-validation-failed - pipeline-error-custom-llm-401-unauthorized - pipeline-error-custom-llm-403-model-access-denied - pipeline-error-custom-llm-429-exceeded-quota - pipeline-error-custom-llm-500-server-error - pipeline-error-custom-llm-503-server-overloaded-error - pipeline-error-custom-llm-llm-failed - call.in-progress.error-providerfault-custom-llm-llm-failed - call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed - call.in-progress.error-vapifault-custom-llm-401-unauthorized - call.in-progress.error-vapifault-custom-llm-403-model-access-denied - call.in-progress.error-vapifault-custom-llm-429-exceeded-quota - call.in-progress.error-providerfault-custom-llm-500-server-error - call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error - call.in-progress.error-pipeline-ws-model-connection-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-502-server-error - pipeline-error-cartesia-503-server-error - pipeline-error-cartesia-522-server-error - call.in-progress.error-vapifault-cartesia-socket-hang-up - call.in-progress.error-vapifault-cartesia-requested-payment - call.in-progress.error-providerfault-cartesia-500-server-error - call.in-progress.error-providerfault-cartesia-503-server-error - call.in-progress.error-providerfault-cartesia-522-server-error - pipeline-error-eleven-labs-voice-not-found - pipeline-error-eleven-labs-quota-exceeded - pipeline-error-eleven-labs-unauthorized-access - pipeline-error-eleven-labs-unauthorized-to-access-model - pipeline-error-eleven-labs-professional-voices-only-for-creator-plus - pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade - pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade - pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade - pipeline-error-eleven-labs-system-busy-and-requested-upgrade - pipeline-error-eleven-labs-voice-not-fine-tuned - pipeline-error-eleven-labs-invalid-api-key - pipeline-error-eleven-labs-invalid-voice-samples - pipeline-error-eleven-labs-voice-disabled-by-owner - pipeline-error-eleven-labs-vapi-voice-disabled-by-owner - pipeline-error-eleven-labs-blocked-account-in-probation - pipeline-error-eleven-labs-blocked-content-against-their-policy - pipeline-error-eleven-labs-missing-samples-for-voice-clone - pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used - pipeline-error-eleven-labs-voice-not-allowed-for-free-users - pipeline-error-eleven-labs-max-character-limit-exceeded - pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification - pipeline-error-eleven-labs-500-server-error - pipeline-error-eleven-labs-503-server-error - call.in-progress.error-vapifault-eleven-labs-voice-not-found - call.in-progress.error-vapifault-eleven-labs-quota-exceeded - call.in-progress.error-vapifault-eleven-labs-unauthorized-access - call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model - call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus - call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned - call.in-progress.error-vapifault-eleven-labs-invalid-api-key - call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples - call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner - call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation - call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy - call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone - call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used - call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users - call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded - call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification - call.in-progress.error-providerfault-eleven-labs-system-busy-and-requested-upgrade - call.in-progress.error-providerfault-eleven-labs-500-server-error - call.in-progress.error-providerfault-eleven-labs-503-server-error - pipeline-error-playht-request-timed-out - pipeline-error-playht-invalid-voice - pipeline-error-playht-unexpected-error - pipeline-error-playht-out-of-credits - pipeline-error-playht-invalid-emotion - pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri - pipeline-error-playht-401-unauthorized - pipeline-error-playht-403-forbidden-out-of-characters - pipeline-error-playht-403-forbidden-api-access-not-available - pipeline-error-playht-429-exceeded-quota - pipeline-error-playht-502-gateway-error - pipeline-error-playht-504-gateway-error - call.in-progress.error-vapifault-playht-request-timed-out - call.in-progress.error-vapifault-playht-invalid-voice - call.in-progress.error-vapifault-playht-unexpected-error - call.in-progress.error-vapifault-playht-out-of-credits - call.in-progress.error-vapifault-playht-invalid-emotion - call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri - call.in-progress.error-vapifault-playht-401-unauthorized - call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters - call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available - call.in-progress.error-vapifault-playht-429-exceeded-quota - call.in-progress.error-providerfault-playht-502-gateway-error - call.in-progress.error-providerfault-playht-504-gateway-error - pipeline-error-custom-transcriber-failed - call.in-progress.error-vapifault-custom-transcriber-failed - pipeline-error-eleven-labs-transcriber-failed - call.in-progress.error-vapifault-eleven-labs-transcriber-failed - pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination - pipeline-error-deepgram-returning-401-invalid-credentials - pipeline-error-deepgram-returning-403-model-access-denied - pipeline-error-deepgram-returning-404-not-found - pipeline-error-deepgram-returning-500-invalid-json - pipeline-error-deepgram-returning-502-network-error - pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach - pipeline-error-deepgram-returning-econnreset - call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination - call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials - call.in-progress.error-vapifault-deepgram-returning-404-not-found - call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied - call.in-progress.error-providerfault-deepgram-returning-500-invalid-json - call.in-progress.error-providerfault-deepgram-returning-502-network-error - call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach - pipeline-error-google-transcriber-failed - call.in-progress.error-vapifault-google-transcriber-failed - pipeline-error-openai-transcriber-failed - call.in-progress.error-vapifault-openai-transcriber-failed - pipeline-error-soniox-transcriber-auth-failed - pipeline-error-soniox-transcriber-rate-limited - pipeline-error-soniox-transcriber-invalid-config - pipeline-error-soniox-transcriber-server-error - pipeline-error-soniox-transcriber-failed - call.in-progress.error-vapifault-soniox-transcriber-auth-failed - call.in-progress.error-vapifault-soniox-transcriber-rate-limited - call.in-progress.error-vapifault-soniox-transcriber-invalid-config - call.in-progress.error-vapifault-soniox-transcriber-server-error - call.in-progress.error-vapifault-soniox-transcriber-failed - call.in-progress.error-warm-transfer-max-duration - call.in-progress.error-warm-transfer-assistant-cancelled - call.in-progress.error-warm-transfer-silence-timeout - call.in-progress.error-warm-transfer-microphone-timeout - assistant-ended-call - assistant-said-end-call-phrase - assistant-ended-call-with-hangup-task - assistant-ended-call-after-message-spoken - assistant-forwarded-call - assistant-join-timed-out - call.in-progress.error-assistant-did-not-receive-customer-audio - call.in-progress.error-transfer-failed - customer-busy - customer-ended-call - customer-ended-call-before-warm-transfer - customer-ended-call-after-warm-transfer-attempt - customer-ended-call-during-transfer - customer-did-not-answer - customer-did-not-give-microphone-permission - exceeded-max-duration - manually-canceled - phone-call-provider-closed-websocket - call.forwarding.operator-busy - silence-timed-out - call.in-progress.error-sip-inbound-call-failed-to-connect - call.in-progress.error-providerfault-outbound-sip-403-forbidden - call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required - call.in-progress.error-providerfault-outbound-sip-408-request-timeout - call.in-progress.error-providerfault-outbound-sip-503-service-unavailable - call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable - call.in-progress.error-sip-outbound-call-failed-to-connect - call.ringing.hook-executed-say - call.ringing.hook-executed-transfer - call.ending.hook-executed-say - call.ending.hook-executed-transfer - call.ringing.sip-inbound-caller-hungup-before-call-connect - call.ringing.error-sip-inbound-call-failed-to-connect - twilio-failed-to-connect-call - twilio-reported-customer-misdialed - vonage-rejected - voicemail - call-deleted cost: type: number description: This is the cost of the call in USD. This can also be found at `call.cost` on GET /call/:id. costs: type: array description: These are the costs of individual components of the call in USD. This can also be found at `call.costs` on GET /call/:id. items: oneOf: - $ref: '#/components/schemas/TransportCost' title: TransportCost - $ref: '#/components/schemas/TranscriberCost' title: TranscriberCost - $ref: '#/components/schemas/ModelCost' title: ModelCost - $ref: '#/components/schemas/VoiceCost' title: VoiceCost - $ref: '#/components/schemas/VapiCost' title: VapiCost - $ref: '#/components/schemas/VoicemailDetectionCost' title: VoicemailDetectionCost - $ref: '#/components/schemas/AnalysisCost' title: AnalysisCost - $ref: '#/components/schemas/KnowledgeBaseCost' title: KnowledgeBaseCost destination: description: 'This is the destination the call was transferred to, if the call was forwarded. This can also be found at `call.destination` on GET /call/:id.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination timestamp: type: number description: This is the timestamp of the message. artifact: description: These are the artifacts from the call. This can also be found at `call.artifact` on GET /call/:id. allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' analysis: description: This is the analysis of the call. This can also be found at `call.analysis` on GET /call/:id. allOf: - $ref: '#/components/schemas/Analysis' startedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the call started. This can also be found at `call.startedAt` on GET /call/:id. endedAt: format: date-time type: string description: This is the ISO 8601 date-time string of when the call ended. This can also be found at `call.endedAt` on GET /call/:id. compliance: description: This is the compliance result of the call. This can also be found at `call.compliance` on GET /call/:id. allOf: - $ref: '#/components/schemas/Compliance' required: - type - endedReason - artifact - analysis ServerMessageHandoffDestinationRequest: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "handoff-destination-request" is sent when the model is requesting handoff but destination is unknown. enum: - handoff-destination-request timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' parameters: type: object description: This is the parameters of the handoff destination request. required: - type - parameters ServerMessageHang: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: 'This is the type of the message. "hang" is sent when the assistant is hanging due to a delay. The delay can be caused by many factors, such as: - the model is too slow to respond - the voice is too slow to respond - the tool call is still waiting for a response from your server - etc.' enum: - hang timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type ServerMessageKnowledgeBaseRequest: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "knowledge-base-request" is sent to request knowledge base documents. To enable, use `assistant.knowledgeBase.provider=custom-knowledge-base`. enum: - knowledge-base-request messages: type: array description: These are the messages that are going to be sent to the `model` right after the `knowledge-base-request` webhook completes. items: oneOf: - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/BotMessage' title: BotMessage - $ref: '#/components/schemas/ToolCallMessage' title: ToolCallMessage - $ref: '#/components/schemas/ToolCallResultMessage' title: ToolCallResultMessage messagesOpenAIFormatted: description: This is just `messages` formatted for OpenAI. type: array items: $ref: '#/components/schemas/OpenAIMessage' timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type - messagesOpenAIFormatted ServerMessageModelOutput: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "model-output" is sent as the model outputs tokens. enum: - model-output turnId: type: string description: 'This is the unique identifier for the current LLM turn. All tokens from the same LLM response share the same turnId. Use this to group tokens and discard on interruption.' timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' output: type: object description: This is the output of the model. It can be a token or tool call. required: - type - output ServerMessagePhoneCallControl: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: 'This is the type of the message. "phone-call-control" is an advanced type of message. When it is requested in `assistant.serverMessages`, the hangup and forwarding responsibilities are delegated to your server. Vapi will no longer do the actual transfer and hangup.' enum: - phone-call-control request: type: string description: This is the request to control the phone call. enum: - forward - hang-up destination: description: This is the destination to forward the call to if the request is "forward". oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type - request ServerMessageSpeechUpdate: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "speech-update" is sent whenever assistant or user start or stop speaking. enum: - speech-update status: type: string description: This is the status of the speech update. enum: - started - stopped role: type: string description: This is the role which the speech update is for. enum: - assistant - user turn: type: number description: This is the turn number of the speech update (0-indexed). timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type - status - role ServerMessageStatusUpdate: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "status-update" is sent whenever the `call.status` changes. enum: - status-update status: type: string description: This is the status of the call. enum: - scheduled - queued - ringing - in-progress - forwarding - ended - not-found - deletion-failed endedReason: type: string description: This is the reason the call ended. This is only sent if the status is "ended". enum: - call-start-error-neither-assistant-nor-server-set - assistant-request-failed - assistant-request-returned-error - assistant-request-returned-unspeakable-error - assistant-request-returned-invalid-assistant - assistant-request-returned-no-assistant - assistant-request-returned-forwarding-phone-number - scheduled-call-deleted - call.start.error-vapifault-get-org - call.start.error-vapifault-get-subscription - call.start.error-get-assistant - call.start.error-get-phone-number - call.start.error-get-customer - 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 - call.start.error-subscription-wallet-does-not-exist - call.start.error-fraud-check-failed - call.start.error-subscription-frozen - call.start.error-subscription-insufficient-credits - call.start.error-subscription-upgrade-failed - call.start.error-subscription-concurrency-limit-reached - call.start.error-enterprise-feature-not-available-recording-consent - assistant-not-valid - call.start.error-vapifault-database-error - assistant-not-found - pipeline-error-openai-voice-failed - pipeline-error-cartesia-voice-failed - pipeline-error-deepgram-voice-failed - pipeline-error-eleven-labs-voice-failed - pipeline-error-playht-voice-failed - pipeline-error-lmnt-voice-failed - pipeline-error-azure-voice-failed - pipeline-error-rime-ai-voice-failed - pipeline-error-smallest-ai-voice-failed - pipeline-error-vapi-voice-failed - pipeline-error-neuphonic-voice-failed - pipeline-error-hume-voice-failed - pipeline-error-sesame-voice-failed - pipeline-error-inworld-voice-failed - pipeline-error-minimax-voice-failed - pipeline-error-wellsaid-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-vapi-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-inworld-voice-failed - call.in-progress.error-vapifault-minimax-voice-failed - call.in-progress.error-vapifault-wellsaid-voice-failed - call.in-progress.error-vapifault-tavus-video-failed - pipeline-error-vapi-llm-failed - pipeline-error-vapi-400-bad-request-validation-failed - pipeline-error-vapi-401-unauthorized - pipeline-error-vapi-403-model-access-denied - pipeline-error-vapi-429-exceeded-quota - pipeline-error-vapi-500-server-error - pipeline-error-vapi-503-server-overloaded-error - call.in-progress.error-providerfault-vapi-llm-failed - call.in-progress.error-vapifault-vapi-400-bad-request-validation-failed - call.in-progress.error-vapifault-vapi-401-unauthorized - call.in-progress.error-vapifault-vapi-403-model-access-denied - call.in-progress.error-vapifault-vapi-429-exceeded-quota - call.in-progress.error-providerfault-vapi-500-server-error - call.in-progress.error-providerfault-vapi-503-server-overloaded-error - pipeline-error-deepgram-transcriber-failed - pipeline-error-deepgram-transcriber-api-key-missing - call.in-progress.error-vapifault-deepgram-transcriber-failed - pipeline-error-gladia-transcriber-failed - call.in-progress.error-vapifault-gladia-transcriber-failed - pipeline-error-speechmatics-transcriber-failed - call.in-progress.error-vapifault-speechmatics-transcriber-failed - pipeline-error-assembly-ai-transcriber-failed - pipeline-error-assembly-ai-returning-400-insufficent-funds - pipeline-error-assembly-ai-returning-400-paid-only-feature - pipeline-error-assembly-ai-returning-401-invalid-credentials - pipeline-error-assembly-ai-returning-500-invalid-schema - pipeline-error-assembly-ai-returning-500-word-boost-parsing-failed - call.in-progress.error-vapifault-assembly-ai-transcriber-failed - call.in-progress.error-vapifault-assembly-ai-returning-400-insufficent-funds - call.in-progress.error-vapifault-assembly-ai-returning-400-paid-only-feature - call.in-progress.error-vapifault-assembly-ai-returning-401-invalid-credentials - call.in-progress.error-vapifault-assembly-ai-returning-500-invalid-schema - call.in-progress.error-vapifault-assembly-ai-returning-500-word-boost-parsing-failed - pipeline-error-talkscriber-transcriber-failed - call.in-progress.error-vapifault-talkscriber-transcriber-failed - pipeline-error-azure-speech-transcriber-failed - call.in-progress.error-vapifault-azure-speech-transcriber-failed - pipeline-error-eleven-labs-transcriber-failed - call.in-progress.error-vapifault-eleven-labs-transcriber-failed - 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 - pipeline-error-soniox-transcriber-auth-failed - pipeline-error-soniox-transcriber-rate-limited - pipeline-error-soniox-transcriber-invalid-config - pipeline-error-soniox-transcriber-server-error - pipeline-error-soniox-transcriber-failed - call.in-progress.error-vapifault-soniox-transcriber-auth-failed - call.in-progress.error-vapifault-soniox-transcriber-rate-limited - call.in-progress.error-vapifault-soniox-transcriber-invalid-config - call.in-progress.error-vapifault-soniox-transcriber-server-error - call.in-progress.error-vapifault-soniox-transcriber-failed - call.in-progress.error-pipeline-no-available-llm-model - worker-shutdown - vonage-disconnected - vonage-failed-to-connect-call - vonage-completed - phone-call-provider-bypass-enabled-but-no-call-received - call.in-progress.error-providerfault-transport-never-connected - call.in-progress.error-vapifault-worker-not-available - call.in-progress.error-vapifault-transport-never-connected - call.in-progress.error-vapifault-transport-connected-but-call-not-active - call.in-progress.error-vapifault-call-started-but-connection-to-transport-missing - call.in-progress.error-vapifault-worker-died - call.in-progress.twilio-completed-call - call.in-progress.sip-completed-call - call.in-progress.error-sip-inbound-call-failed-to-connect - call.in-progress.error-providerfault-outbound-sip-503-service-unavailable - call.in-progress.error-sip-outbound-call-failed-to-connect - call.ringing.error-sip-inbound-call-failed-to-connect - call.in-progress.error-providerfault-openai-llm-failed - call.in-progress.error-providerfault-azure-openai-llm-failed - call.in-progress.error-providerfault-groq-llm-failed - call.in-progress.error-providerfault-google-llm-failed - call.in-progress.error-providerfault-xai-llm-failed - call.in-progress.error-providerfault-mistral-llm-failed - call.in-progress.error-providerfault-minimax-llm-failed - call.in-progress.error-providerfault-inflection-ai-llm-failed - call.in-progress.error-providerfault-cerebras-llm-failed - call.in-progress.error-providerfault-deep-seek-llm-failed - call.in-progress.error-providerfault-baseten-llm-failed - call.in-progress.error-vapifault-chat-pipeline-failed-to-start - pipeline-error-openai-400-bad-request-validation-failed - pipeline-error-openai-401-unauthorized - pipeline-error-openai-401-incorrect-api-key - pipeline-error-openai-401-account-not-in-organization - pipeline-error-openai-403-model-access-denied - pipeline-error-openai-429-exceeded-quota - pipeline-error-openai-429-rate-limit-reached - pipeline-error-openai-500-server-error - pipeline-error-openai-503-server-overloaded-error - pipeline-error-openai-llm-failed - call.in-progress.error-vapifault-openai-400-bad-request-validation-failed - call.in-progress.error-vapifault-openai-401-unauthorized - call.in-progress.error-vapifault-openai-401-incorrect-api-key - call.in-progress.error-vapifault-openai-401-account-not-in-organization - call.in-progress.error-vapifault-openai-403-model-access-denied - call.in-progress.error-vapifault-openai-429-exceeded-quota - call.in-progress.error-vapifault-openai-429-rate-limit-reached - call.in-progress.error-providerfault-openai-500-server-error - call.in-progress.error-providerfault-openai-503-server-overloaded-error - pipeline-error-azure-openai-400-bad-request-validation-failed - pipeline-error-azure-openai-401-unauthorized - pipeline-error-azure-openai-403-model-access-denied - pipeline-error-azure-openai-429-exceeded-quota - pipeline-error-azure-openai-500-server-error - pipeline-error-azure-openai-503-server-overloaded-error - pipeline-error-azure-openai-llm-failed - call.in-progress.error-vapifault-azure-openai-400-bad-request-validation-failed - call.in-progress.error-vapifault-azure-openai-401-unauthorized - call.in-progress.error-vapifault-azure-openai-403-model-access-denied - call.in-progress.error-vapifault-azure-openai-429-exceeded-quota - call.in-progress.error-providerfault-azure-openai-500-server-error - call.in-progress.error-providerfault-azure-openai-503-server-overloaded-error - pipeline-error-google-400-bad-request-validation-failed - pipeline-error-google-401-unauthorized - pipeline-error-google-403-model-access-denied - pipeline-error-google-429-exceeded-quota - pipeline-error-google-500-server-error - pipeline-error-google-503-server-overloaded-error - pipeline-error-google-llm-failed - call.in-progress.error-vapifault-google-400-bad-request-validation-failed - call.in-progress.error-vapifault-google-401-unauthorized - call.in-progress.error-vapifault-google-403-model-access-denied - call.in-progress.error-vapifault-google-429-exceeded-quota - call.in-progress.error-providerfault-google-500-server-error - call.in-progress.error-providerfault-google-503-server-overloaded-error - pipeline-error-xai-400-bad-request-validation-failed - pipeline-error-xai-401-unauthorized - pipeline-error-xai-403-model-access-denied - pipeline-error-xai-429-exceeded-quota - pipeline-error-xai-500-server-error - pipeline-error-xai-503-server-overloaded-error - pipeline-error-xai-llm-failed - call.in-progress.error-vapifault-xai-400-bad-request-validation-failed - call.in-progress.error-vapifault-xai-401-unauthorized - call.in-progress.error-vapifault-xai-403-model-access-denied - call.in-progress.error-vapifault-xai-429-exceeded-quota - call.in-progress.error-providerfault-xai-500-server-error - call.in-progress.error-providerfault-xai-503-server-overloaded-error - pipeline-error-baseten-400-bad-request-validation-failed - pipeline-error-baseten-401-unauthorized - pipeline-error-baseten-403-model-access-denied - pipeline-error-baseten-429-exceeded-quota - pipeline-error-baseten-500-server-error - pipeline-error-baseten-503-server-overloaded-error - pipeline-error-baseten-llm-failed - call.in-progress.error-vapifault-baseten-400-bad-request-validation-failed - call.in-progress.error-vapifault-baseten-401-unauthorized - call.in-progress.error-vapifault-baseten-403-model-access-denied - call.in-progress.error-vapifault-baseten-429-exceeded-quota - call.in-progress.error-providerfault-baseten-500-server-error - call.in-progress.error-providerfault-baseten-503-server-overloaded-error - pipeline-error-mistral-400-bad-request-validation-failed - pipeline-error-mistral-401-unauthorized - pipeline-error-mistral-403-model-access-denied - pipeline-error-mistral-429-exceeded-quota - pipeline-error-mistral-500-server-error - pipeline-error-mistral-503-server-overloaded-error - pipeline-error-mistral-llm-failed - call.in-progress.error-vapifault-mistral-400-bad-request-validation-failed - call.in-progress.error-vapifault-mistral-401-unauthorized - call.in-progress.error-vapifault-mistral-403-model-access-denied - call.in-progress.error-vapifault-mistral-429-exceeded-quota - call.in-progress.error-providerfault-mistral-500-server-error - call.in-progress.error-providerfault-mistral-503-server-overloaded-error - pipeline-error-minimax-400-bad-request-validation-failed - pipeline-error-minimax-401-unauthorized - pipeline-error-minimax-403-model-access-denied - pipeline-error-minimax-429-exceeded-quota - pipeline-error-minimax-500-server-error - pipeline-error-minimax-503-server-overloaded-error - pipeline-error-minimax-llm-failed - call.in-progress.error-vapifault-minimax-400-bad-request-validation-failed - call.in-progress.error-vapifault-minimax-401-unauthorized - call.in-progress.error-vapifault-minimax-403-model-access-denied - call.in-progress.error-vapifault-minimax-429-exceeded-quota - call.in-progress.error-providerfault-minimax-500-server-error - call.in-progress.error-providerfault-minimax-503-server-overloaded-error - pipeline-error-inflection-ai-400-bad-request-validation-failed - pipeline-error-inflection-ai-401-unauthorized - pipeline-error-inflection-ai-403-model-access-denied - pipeline-error-inflection-ai-429-exceeded-quota - pipeline-error-inflection-ai-500-server-error - pipeline-error-inflection-ai-503-server-overloaded-error - pipeline-error-inflection-ai-llm-failed - call.in-progress.error-vapifault-inflection-ai-400-bad-request-validation-failed - call.in-progress.error-vapifault-inflection-ai-401-unauthorized - call.in-progress.error-vapifault-inflection-ai-403-model-access-denied - call.in-progress.error-vapifault-inflection-ai-429-exceeded-quota - call.in-progress.error-providerfault-inflection-ai-500-server-error - call.in-progress.error-providerfault-inflection-ai-503-server-overloaded-error - pipeline-error-deep-seek-400-bad-request-validation-failed - pipeline-error-deep-seek-401-unauthorized - pipeline-error-deep-seek-403-model-access-denied - pipeline-error-deep-seek-429-exceeded-quota - pipeline-error-deep-seek-500-server-error - pipeline-error-deep-seek-503-server-overloaded-error - pipeline-error-deep-seek-llm-failed - call.in-progress.error-vapifault-deep-seek-400-bad-request-validation-failed - call.in-progress.error-vapifault-deep-seek-401-unauthorized - call.in-progress.error-vapifault-deep-seek-403-model-access-denied - call.in-progress.error-vapifault-deep-seek-429-exceeded-quota - call.in-progress.error-providerfault-deep-seek-500-server-error - call.in-progress.error-providerfault-deep-seek-503-server-overloaded-error - pipeline-error-groq-400-bad-request-validation-failed - pipeline-error-groq-401-unauthorized - pipeline-error-groq-403-model-access-denied - pipeline-error-groq-429-exceeded-quota - pipeline-error-groq-500-server-error - pipeline-error-groq-503-server-overloaded-error - pipeline-error-groq-llm-failed - call.in-progress.error-vapifault-groq-400-bad-request-validation-failed - call.in-progress.error-vapifault-groq-401-unauthorized - call.in-progress.error-vapifault-groq-403-model-access-denied - call.in-progress.error-vapifault-groq-429-exceeded-quota - call.in-progress.error-providerfault-groq-500-server-error - call.in-progress.error-providerfault-groq-503-server-overloaded-error - pipeline-error-cerebras-400-bad-request-validation-failed - pipeline-error-cerebras-401-unauthorized - pipeline-error-cerebras-403-model-access-denied - pipeline-error-cerebras-429-exceeded-quota - pipeline-error-cerebras-500-server-error - pipeline-error-cerebras-503-server-overloaded-error - pipeline-error-cerebras-llm-failed - call.in-progress.error-vapifault-cerebras-400-bad-request-validation-failed - call.in-progress.error-vapifault-cerebras-401-unauthorized - call.in-progress.error-vapifault-cerebras-403-model-access-denied - call.in-progress.error-vapifault-cerebras-429-exceeded-quota - call.in-progress.error-providerfault-cerebras-500-server-error - call.in-progress.error-providerfault-cerebras-503-server-overloaded-error - pipeline-error-anthropic-400-bad-request-validation-failed - pipeline-error-anthropic-401-unauthorized - pipeline-error-anthropic-403-model-access-denied - pipeline-error-anthropic-429-exceeded-quota - pipeline-error-anthropic-500-server-error - pipeline-error-anthropic-503-server-overloaded-error - pipeline-error-anthropic-llm-failed - call.in-progress.error-providerfault-anthropic-llm-failed - call.in-progress.error-vapifault-anthropic-400-bad-request-validation-failed - call.in-progress.error-vapifault-anthropic-401-unauthorized - call.in-progress.error-vapifault-anthropic-403-model-access-denied - call.in-progress.error-vapifault-anthropic-429-exceeded-quota - call.in-progress.error-providerfault-anthropic-500-server-error - call.in-progress.error-providerfault-anthropic-503-server-overloaded-error - pipeline-error-anthropic-bedrock-400-bad-request-validation-failed - pipeline-error-anthropic-bedrock-401-unauthorized - pipeline-error-anthropic-bedrock-403-model-access-denied - pipeline-error-anthropic-bedrock-429-exceeded-quota - pipeline-error-anthropic-bedrock-500-server-error - pipeline-error-anthropic-bedrock-503-server-overloaded-error - pipeline-error-anthropic-bedrock-llm-failed - call.in-progress.error-providerfault-anthropic-bedrock-llm-failed - call.in-progress.error-vapifault-anthropic-bedrock-400-bad-request-validation-failed - call.in-progress.error-vapifault-anthropic-bedrock-401-unauthorized - call.in-progress.error-vapifault-anthropic-bedrock-403-model-access-denied - call.in-progress.error-vapifault-anthropic-bedrock-429-exceeded-quota - call.in-progress.error-providerfault-anthropic-bedrock-500-server-error - call.in-progress.error-providerfault-anthropic-bedrock-503-server-overloaded-error - pipeline-error-anthropic-vertex-400-bad-request-validation-failed - pipeline-error-anthropic-vertex-401-unauthorized - pipeline-error-anthropic-vertex-403-model-access-denied - pipeline-error-anthropic-vertex-429-exceeded-quota - pipeline-error-anthropic-vertex-500-server-error - pipeline-error-anthropic-vertex-503-server-overloaded-error - pipeline-error-anthropic-vertex-llm-failed - call.in-progress.error-providerfault-anthropic-vertex-llm-failed - call.in-progress.error-vapifault-anthropic-vertex-400-bad-request-validation-failed - call.in-progress.error-vapifault-anthropic-vertex-401-unauthorized - call.in-progress.error-vapifault-anthropic-vertex-403-model-access-denied - call.in-progress.error-vapifault-anthropic-vertex-429-exceeded-quota - call.in-progress.error-providerfault-anthropic-vertex-500-server-error - call.in-progress.error-providerfault-anthropic-vertex-503-server-overloaded-error - pipeline-error-together-ai-400-bad-request-validation-failed - pipeline-error-together-ai-401-unauthorized - pipeline-error-together-ai-403-model-access-denied - pipeline-error-together-ai-429-exceeded-quota - pipeline-error-together-ai-500-server-error - pipeline-error-together-ai-503-server-overloaded-error - pipeline-error-together-ai-llm-failed - call.in-progress.error-providerfault-together-ai-llm-failed - call.in-progress.error-vapifault-together-ai-400-bad-request-validation-failed - call.in-progress.error-vapifault-together-ai-401-unauthorized - call.in-progress.error-vapifault-together-ai-403-model-access-denied - call.in-progress.error-vapifault-together-ai-429-exceeded-quota - call.in-progress.error-providerfault-together-ai-500-server-error - call.in-progress.error-providerfault-together-ai-503-server-overloaded-error - pipeline-error-anyscale-400-bad-request-validation-failed - pipeline-error-anyscale-401-unauthorized - pipeline-error-anyscale-403-model-access-denied - pipeline-error-anyscale-429-exceeded-quota - pipeline-error-anyscale-500-server-error - pipeline-error-anyscale-503-server-overloaded-error - pipeline-error-anyscale-llm-failed - call.in-progress.error-providerfault-anyscale-llm-failed - call.in-progress.error-vapifault-anyscale-400-bad-request-validation-failed - call.in-progress.error-vapifault-anyscale-401-unauthorized - call.in-progress.error-vapifault-anyscale-403-model-access-denied - call.in-progress.error-vapifault-anyscale-429-exceeded-quota - call.in-progress.error-providerfault-anyscale-500-server-error - call.in-progress.error-providerfault-anyscale-503-server-overloaded-error - pipeline-error-openrouter-400-bad-request-validation-failed - pipeline-error-openrouter-401-unauthorized - pipeline-error-openrouter-403-model-access-denied - pipeline-error-openrouter-429-exceeded-quota - pipeline-error-openrouter-500-server-error - pipeline-error-openrouter-503-server-overloaded-error - pipeline-error-openrouter-llm-failed - call.in-progress.error-providerfault-openrouter-llm-failed - call.in-progress.error-vapifault-openrouter-400-bad-request-validation-failed - call.in-progress.error-vapifault-openrouter-401-unauthorized - call.in-progress.error-vapifault-openrouter-403-model-access-denied - call.in-progress.error-vapifault-openrouter-429-exceeded-quota - call.in-progress.error-providerfault-openrouter-500-server-error - call.in-progress.error-providerfault-openrouter-503-server-overloaded-error - pipeline-error-perplexity-ai-400-bad-request-validation-failed - pipeline-error-perplexity-ai-401-unauthorized - pipeline-error-perplexity-ai-403-model-access-denied - pipeline-error-perplexity-ai-429-exceeded-quota - pipeline-error-perplexity-ai-500-server-error - pipeline-error-perplexity-ai-503-server-overloaded-error - pipeline-error-perplexity-ai-llm-failed - call.in-progress.error-providerfault-perplexity-ai-llm-failed - call.in-progress.error-vapifault-perplexity-ai-400-bad-request-validation-failed - call.in-progress.error-vapifault-perplexity-ai-401-unauthorized - call.in-progress.error-vapifault-perplexity-ai-403-model-access-denied - call.in-progress.error-vapifault-perplexity-ai-429-exceeded-quota - call.in-progress.error-providerfault-perplexity-ai-500-server-error - call.in-progress.error-providerfault-perplexity-ai-503-server-overloaded-error - pipeline-error-deepinfra-400-bad-request-validation-failed - pipeline-error-deepinfra-401-unauthorized - pipeline-error-deepinfra-403-model-access-denied - pipeline-error-deepinfra-429-exceeded-quota - pipeline-error-deepinfra-500-server-error - pipeline-error-deepinfra-503-server-overloaded-error - pipeline-error-deepinfra-llm-failed - call.in-progress.error-providerfault-deepinfra-llm-failed - call.in-progress.error-vapifault-deepinfra-400-bad-request-validation-failed - call.in-progress.error-vapifault-deepinfra-401-unauthorized - call.in-progress.error-vapifault-deepinfra-403-model-access-denied - call.in-progress.error-vapifault-deepinfra-429-exceeded-quota - call.in-progress.error-providerfault-deepinfra-500-server-error - call.in-progress.error-providerfault-deepinfra-503-server-overloaded-error - pipeline-error-runpod-400-bad-request-validation-failed - pipeline-error-runpod-401-unauthorized - pipeline-error-runpod-403-model-access-denied - pipeline-error-runpod-429-exceeded-quota - pipeline-error-runpod-500-server-error - pipeline-error-runpod-503-server-overloaded-error - pipeline-error-runpod-llm-failed - call.in-progress.error-providerfault-runpod-llm-failed - call.in-progress.error-vapifault-runpod-400-bad-request-validation-failed - call.in-progress.error-vapifault-runpod-401-unauthorized - call.in-progress.error-vapifault-runpod-403-model-access-denied - call.in-progress.error-vapifault-runpod-429-exceeded-quota - call.in-progress.error-providerfault-runpod-500-server-error - call.in-progress.error-providerfault-runpod-503-server-overloaded-error - pipeline-error-custom-llm-400-bad-request-validation-failed - pipeline-error-custom-llm-401-unauthorized - pipeline-error-custom-llm-403-model-access-denied - pipeline-error-custom-llm-429-exceeded-quota - pipeline-error-custom-llm-500-server-error - pipeline-error-custom-llm-503-server-overloaded-error - pipeline-error-custom-llm-llm-failed - call.in-progress.error-providerfault-custom-llm-llm-failed - call.in-progress.error-vapifault-custom-llm-400-bad-request-validation-failed - call.in-progress.error-vapifault-custom-llm-401-unauthorized - call.in-progress.error-vapifault-custom-llm-403-model-access-denied - call.in-progress.error-vapifault-custom-llm-429-exceeded-quota - call.in-progress.error-providerfault-custom-llm-500-server-error - call.in-progress.error-providerfault-custom-llm-503-server-overloaded-error - call.in-progress.error-pipeline-ws-model-connection-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-502-server-error - pipeline-error-cartesia-503-server-error - pipeline-error-cartesia-522-server-error - call.in-progress.error-vapifault-cartesia-socket-hang-up - call.in-progress.error-vapifault-cartesia-requested-payment - call.in-progress.error-providerfault-cartesia-500-server-error - call.in-progress.error-providerfault-cartesia-503-server-error - call.in-progress.error-providerfault-cartesia-522-server-error - pipeline-error-eleven-labs-voice-not-found - pipeline-error-eleven-labs-quota-exceeded - pipeline-error-eleven-labs-unauthorized-access - pipeline-error-eleven-labs-unauthorized-to-access-model - pipeline-error-eleven-labs-professional-voices-only-for-creator-plus - pipeline-error-eleven-labs-blocked-free-plan-and-requested-upgrade - pipeline-error-eleven-labs-blocked-concurrent-requests-and-requested-upgrade - pipeline-error-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade - pipeline-error-eleven-labs-system-busy-and-requested-upgrade - pipeline-error-eleven-labs-voice-not-fine-tuned - pipeline-error-eleven-labs-invalid-api-key - pipeline-error-eleven-labs-invalid-voice-samples - pipeline-error-eleven-labs-voice-disabled-by-owner - pipeline-error-eleven-labs-vapi-voice-disabled-by-owner - pipeline-error-eleven-labs-blocked-account-in-probation - pipeline-error-eleven-labs-blocked-content-against-their-policy - pipeline-error-eleven-labs-missing-samples-for-voice-clone - pipeline-error-eleven-labs-voice-not-fine-tuned-and-cannot-be-used - pipeline-error-eleven-labs-voice-not-allowed-for-free-users - pipeline-error-eleven-labs-max-character-limit-exceeded - pipeline-error-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification - pipeline-error-eleven-labs-500-server-error - pipeline-error-eleven-labs-503-server-error - call.in-progress.error-vapifault-eleven-labs-voice-not-found - call.in-progress.error-vapifault-eleven-labs-quota-exceeded - call.in-progress.error-vapifault-eleven-labs-unauthorized-access - call.in-progress.error-vapifault-eleven-labs-unauthorized-to-access-model - call.in-progress.error-vapifault-eleven-labs-professional-voices-only-for-creator-plus - call.in-progress.error-vapifault-eleven-labs-blocked-free-plan-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-blocked-concurrent-requests-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-blocked-using-instant-voice-clone-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-system-busy-and-requested-upgrade - call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned - call.in-progress.error-vapifault-eleven-labs-invalid-api-key - call.in-progress.error-vapifault-eleven-labs-invalid-voice-samples - call.in-progress.error-vapifault-eleven-labs-voice-disabled-by-owner - call.in-progress.error-vapifault-eleven-labs-blocked-account-in-probation - call.in-progress.error-vapifault-eleven-labs-blocked-content-against-their-policy - call.in-progress.error-vapifault-eleven-labs-missing-samples-for-voice-clone - call.in-progress.error-vapifault-eleven-labs-voice-not-fine-tuned-and-cannot-be-used - call.in-progress.error-vapifault-eleven-labs-voice-not-allowed-for-free-users - call.in-progress.error-vapifault-eleven-labs-max-character-limit-exceeded - call.in-progress.error-vapifault-eleven-labs-blocked-voice-potentially-against-terms-of-service-and-awaiting-verification - call.in-progress.error-providerfault-eleven-labs-system-busy-and-requested-upgrade - call.in-progress.error-providerfault-eleven-labs-500-server-error - call.in-progress.error-providerfault-eleven-labs-503-server-error - pipeline-error-playht-request-timed-out - pipeline-error-playht-invalid-voice - pipeline-error-playht-unexpected-error - pipeline-error-playht-out-of-credits - pipeline-error-playht-invalid-emotion - pipeline-error-playht-voice-must-be-a-valid-voice-manifest-uri - pipeline-error-playht-401-unauthorized - pipeline-error-playht-403-forbidden-out-of-characters - pipeline-error-playht-403-forbidden-api-access-not-available - pipeline-error-playht-429-exceeded-quota - pipeline-error-playht-502-gateway-error - pipeline-error-playht-504-gateway-error - call.in-progress.error-vapifault-playht-request-timed-out - call.in-progress.error-vapifault-playht-invalid-voice - call.in-progress.error-vapifault-playht-unexpected-error - call.in-progress.error-vapifault-playht-out-of-credits - call.in-progress.error-vapifault-playht-invalid-emotion - call.in-progress.error-vapifault-playht-voice-must-be-a-valid-voice-manifest-uri - call.in-progress.error-vapifault-playht-401-unauthorized - call.in-progress.error-vapifault-playht-403-forbidden-out-of-characters - call.in-progress.error-vapifault-playht-403-forbidden-api-access-not-available - call.in-progress.error-vapifault-playht-429-exceeded-quota - call.in-progress.error-providerfault-playht-502-gateway-error - call.in-progress.error-providerfault-playht-504-gateway-error - pipeline-error-custom-transcriber-failed - call.in-progress.error-vapifault-custom-transcriber-failed - pipeline-error-eleven-labs-transcriber-failed - call.in-progress.error-vapifault-eleven-labs-transcriber-failed - pipeline-error-deepgram-returning-400-no-such-model-language-tier-combination - pipeline-error-deepgram-returning-401-invalid-credentials - pipeline-error-deepgram-returning-403-model-access-denied - pipeline-error-deepgram-returning-404-not-found - pipeline-error-deepgram-returning-500-invalid-json - pipeline-error-deepgram-returning-502-network-error - pipeline-error-deepgram-returning-502-bad-gateway-ehostunreach - pipeline-error-deepgram-returning-econnreset - call.in-progress.error-vapifault-deepgram-returning-400-no-such-model-language-tier-combination - call.in-progress.error-vapifault-deepgram-returning-401-invalid-credentials - call.in-progress.error-vapifault-deepgram-returning-404-not-found - call.in-progress.error-vapifault-deepgram-returning-403-model-access-denied - call.in-progress.error-providerfault-deepgram-returning-500-invalid-json - call.in-progress.error-providerfault-deepgram-returning-502-network-error - call.in-progress.error-providerfault-deepgram-returning-502-bad-gateway-ehostunreach - pipeline-error-google-transcriber-failed - call.in-progress.error-vapifault-google-transcriber-failed - pipeline-error-openai-transcriber-failed - call.in-progress.error-vapifault-openai-transcriber-failed - pipeline-error-soniox-transcriber-auth-failed - pipeline-error-soniox-transcriber-rate-limited - pipeline-error-soniox-transcriber-invalid-config - pipeline-error-soniox-transcriber-server-error - pipeline-error-soniox-transcriber-failed - call.in-progress.error-vapifault-soniox-transcriber-auth-failed - call.in-progress.error-vapifault-soniox-transcriber-rate-limited - call.in-progress.error-vapifault-soniox-transcriber-invalid-config - call.in-progress.error-vapifault-soniox-transcriber-server-error - call.in-progress.error-vapifault-soniox-transcriber-failed - call.in-progress.error-warm-transfer-max-duration - call.in-progress.error-warm-transfer-assistant-cancelled - call.in-progress.error-warm-transfer-silence-timeout - call.in-progress.error-warm-transfer-microphone-timeout - assistant-ended-call - assistant-said-end-call-phrase - assistant-ended-call-with-hangup-task - assistant-ended-call-after-message-spoken - assistant-forwarded-call - assistant-join-timed-out - call.in-progress.error-assistant-did-not-receive-customer-audio - call.in-progress.error-transfer-failed - customer-busy - customer-ended-call - customer-ended-call-before-warm-transfer - customer-ended-call-after-warm-transfer-attempt - customer-ended-call-during-transfer - customer-did-not-answer - customer-did-not-give-microphone-permission - exceeded-max-duration - manually-canceled - phone-call-provider-closed-websocket - call.forwarding.operator-busy - silence-timed-out - call.in-progress.error-sip-inbound-call-failed-to-connect - call.in-progress.error-providerfault-outbound-sip-403-forbidden - call.in-progress.error-providerfault-outbound-sip-407-proxy-authentication-required - call.in-progress.error-providerfault-outbound-sip-408-request-timeout - call.in-progress.error-providerfault-outbound-sip-503-service-unavailable - call.in-progress.error-providerfault-outbound-sip-480-temporarily-unavailable - call.in-progress.error-sip-outbound-call-failed-to-connect - call.ringing.hook-executed-say - call.ringing.hook-executed-transfer - call.ending.hook-executed-say - call.ending.hook-executed-transfer - call.ringing.sip-inbound-caller-hungup-before-call-connect - call.ringing.error-sip-inbound-call-failed-to-connect - twilio-failed-to-connect-call - twilio-reported-customer-misdialed - vonage-rejected - voicemail - call-deleted messages: type: array description: These are the conversation messages of the call. This is only sent if the status is "forwarding". 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 conversation messages of the call. This is only sent if the status is "forwarding". type: array items: $ref: '#/components/schemas/OpenAIMessage' destination: description: This is the destination the call is being transferred to. This is only sent if the status is "forwarding". oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' transcript: type: string description: This is the transcript of the call. This is only sent if the status is "forwarding". summary: type: string description: This is the summary of the call. This is only sent if the status is "forwarding". inboundPhoneCallDebuggingArtifacts: type: object description: 'This is the inbound phone call debugging artifacts. This is only sent if the status is "ended" and there was an error accepting the inbound phone call. This will include any errors related to the "assistant-request" if one was made.' required: - type - status ServerMessageToolCalls: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "tool-calls" is sent to call a tool. enum: - tool-calls toolWithToolCallList: type: array description: This is the list of tools calls that the model is requesting along with the original tool configuration. items: oneOf: - $ref: '#/components/schemas/FunctionToolWithToolCall' title: FunctionToolWithToolCall - $ref: '#/components/schemas/GhlToolWithToolCall' title: GhlToolWithToolCall - $ref: '#/components/schemas/MakeToolWithToolCall' title: MakeToolWithToolCall - $ref: '#/components/schemas/BashToolWithToolCall' title: BashToolWithToolCall - $ref: '#/components/schemas/ComputerToolWithToolCall' title: ComputerToolWithToolCall - $ref: '#/components/schemas/TextEditorToolWithToolCall' title: TextEditorToolWithToolCall - $ref: '#/components/schemas/GoogleCalendarCreateEventToolWithToolCall' title: GoogleCalendarCreateEventToolWithToolCall timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' toolCallList: description: This is the list of tool calls that the model is requesting. type: array items: $ref: '#/components/schemas/ToolCall' required: - toolWithToolCallList - toolCallList ServerMessageTransferDestinationRequest: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "transfer-destination-request" is sent when the model is requesting transfer but destination is unknown. enum: - transfer-destination-request timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type ServerMessageTransferUpdate: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "transfer-update" is sent whenever a transfer happens. enum: - transfer-update destination: description: This is the destination of the transfer. oneOf: - $ref: '#/components/schemas/TransferDestinationAssistant' title: Assistant - $ref: '#/components/schemas/TransferDestinationNumber' title: Number - $ref: '#/components/schemas/TransferDestinationSip' title: Sip timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' toAssistant: description: This is the assistant that the call is being transferred to. This is only sent if `destination.type` is "assistant". allOf: - $ref: '#/components/schemas/CreateAssistantDTO' fromAssistant: description: This is the assistant that the call is being transferred from. This is only sent if `destination.type` is "assistant". allOf: - $ref: '#/components/schemas/CreateAssistantDTO' toStepRecord: type: object description: This is the step that the conversation moved to. fromStepRecord: type: object description: This is the step that the conversation moved from. = required: - type ServerMessageTranscript: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "transcript" is sent as transcriber outputs partial or final transcript. enum: - transcript - transcript[transcriptType="final"] timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' role: type: string description: This is the role for which the transcript is for. enum: - assistant - user transcriptType: type: string description: This is the type of the transcript. enum: - partial - final transcript: type: string description: This is the transcript content. isFiltered: type: boolean description: Indicates if the transcript was filtered for security reasons. detectedThreats: description: List of detected security threats if the transcript was filtered. type: array items: type: string originalTranscript: type: string description: The original transcript before filtering (only included if content was filtered). required: - type - role - transcriptType - transcript ServerMessageUserInterrupted: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "user-interrupted" is sent when the user interrupts the assistant. enum: - user-interrupted turnId: type: string description: 'This is the turnId of the LLM response that was interrupted. Matches the turnId on model-output messages so clients can discard the interrupted turn''s tokens.' timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type ServerMessageLanguageChangeDetected: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "language-change-detected" is sent when the transcriber is automatically switched based on the detected language. enum: - language-change-detected timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' language: type: string description: This is the language the transcriber is switched to. required: - type - language ServerMessageVoiceInput: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "voice-input" is sent when a generation is requested from voice provider. enum: - voice-input timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' input: type: string description: This is the voice input content required: - type - input ServerMessageAssistantSpeech: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "assistant-speech" is sent as assistant audio is being played. enum: - assistant.speechStarted text: type: string description: "The full assistant text for the current turn. This is the\ \ complete text,\nnot an incremental delta \u2014 consumers should use\ \ `timing` metadata (e.g.\n`wordsSpoken`) to determine which portion has\ \ been spoken so far." turn: type: number description: This is the turn number of the assistant speech event (0-indexed). source: type: string description: Indicates how the text was sourced. enum: - model - force-say - custom-voice timing: description: "Optional timing metadata. Shape depends on `timing.type`:\n\ \n- `word-alignment` (ElevenLabs): per-character timing at playback\n\ \ cadence. words[] includes space entries. Best consumed by tracking\n\ \ a running character count: join timing.words, add to a char cursor,\n\ \ and highlight text up to that position. No interpolation needed.\n\n\ - `word-progress` (Minimax with voice.subtitleType: 'word'): cursor-\n\ \ based word count per TTS segment. Use wordsSpoken as the anchor,\n\ \ interpolate forward using segmentDurationMs or timing.words until\n\ \ the next event arrives.\n\nWhen absent, the event is a text-only fallback\ \ for providers without\nword-level timing (e.g. Cartesia, Deepgram, Azure).\ \ Text emits once\nper TTS chunk when audio is playing. Optionally interpolate\ \ a word\ncursor at ~3.5 words/sec between events for approximate tracking." oneOf: - $ref: '#/components/schemas/AssistantSpeechWordAlignmentTiming' title: WordAlignmentTiming - $ref: '#/components/schemas/AssistantSpeechWordProgressTiming' title: WordProgressTiming discriminator: propertyName: type timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type - text ServerMessageVoiceRequest: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: "This is the type of the message. \"voice-request\" is sent\ \ when using `assistant.voice={ \"type\": \"custom-voice\" }`.\n\nHere\ \ is what the request will look like:\n\nPOST https://{assistant.voice.server.url}\n\ Content-Type: application/json\n\n{\n \"messsage\": {\n \"type\":\ \ \"voice-request\",\n \"text\": \"Hello, world!\",\n \"sampleRate\"\ : 24000,\n ...other metadata about the call...\n }\n}\n\nThe expected\ \ response is 1-channel 16-bit raw PCM audio at the sample rate specified\ \ in the request. Here is how the response will be piped to the transport:\n\ ```\nresponse.on('data', (chunk: Buffer) => {\n outputStream.write(chunk);\n\ });\n```" enum: - voice-request timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' text: type: string description: This is the text to be synthesized. sampleRate: type: number description: This is the sample rate to be synthesized. required: - type - text - sampleRate ServerMessageCallEndpointingRequest: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: "This is the type of the message. \"call.endpointing.request\"\ \ is sent when using `assistant.startSpeakingPlan.smartEndpointingPlan={\ \ \"provider\": \"custom-endpointing-model\" }`.\n\nHere is what the request\ \ will look like:\n\nPOST https://{assistant.startSpeakingPlan.smartEndpointingPlan.server.url}\n\ Content-Type: application/json\n\n{\n \"message\": {\n \"type\": \"\ call.endpointing.request\",\n \"messages\": [\n {\n \"\ role\": \"user\",\n \"message\": \"Hello, how are you?\",\n \ \ \"time\": 1234567890,\n \"secondsFromStart\": 0\n }\n\ \ ],\n ...other metadata about the call...\n }\n}\n\nThe expected\ \ response:\n{\n \"timeoutSeconds\": 0.5\n}" enum: - call.endpointing.request messages: type: array description: This is the conversation history at the time of the endpointing request. items: oneOf: - $ref: '#/components/schemas/UserMessage' title: UserMessage - $ref: '#/components/schemas/SystemMessage' title: SystemMessage - $ref: '#/components/schemas/BotMessage' title: BotMessage - $ref: '#/components/schemas/ToolCallMessage' title: ToolCallMessage - $ref: '#/components/schemas/ToolCallResultMessage' title: ToolCallResultMessage messagesOpenAIFormatted: description: This is just `messages` formatted for OpenAI. type: array items: $ref: '#/components/schemas/OpenAIMessage' timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type - messagesOpenAIFormatted ServerMessageChatCreated: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "chat.created" is sent when a new chat is created. enum: - chat.created timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat that was created. allOf: - $ref: '#/components/schemas/Chat' required: - type - chat ServerMessageChatDeleted: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "chat.deleted" is sent when a chat is deleted. enum: - chat.deleted timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat that was deleted. allOf: - $ref: '#/components/schemas/Chat' required: - type - chat ServerMessageSessionCreated: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "session.created" is sent when a new session is created. enum: - session.created timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' session: description: This is the session that was created. allOf: - $ref: '#/components/schemas/Session' required: - type - session ServerMessageSessionUpdated: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "session.updated" is sent when a session is updated. enum: - session.updated timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' session: description: This is the session that was updated. allOf: - $ref: '#/components/schemas/Session' required: - type - session ServerMessageSessionDeleted: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "session.deleted" is sent when a session is deleted. enum: - session.deleted timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' session: description: This is the session that was deleted. allOf: - $ref: '#/components/schemas/Session' required: - type - session ServerMessageCallDeleted: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "call.deleted" is sent when a call is deleted. enum: - call.deleted timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type ServerMessageCallDeleteFailed: type: object properties: phoneNumber: description: This is the phone number that the message is associated with. oneOf: - $ref: '#/components/schemas/CreateByoPhoneNumberDTO' title: ByoPhoneNumber - $ref: '#/components/schemas/CreateTwilioPhoneNumberDTO' title: TwilioPhoneNumber - $ref: '#/components/schemas/CreateVonagePhoneNumberDTO' title: VonagePhoneNumber - $ref: '#/components/schemas/CreateVapiPhoneNumberDTO' title: VapiPhoneNumber - $ref: '#/components/schemas/CreateTelnyxPhoneNumberDTO' title: TelnyxPhoneNumber type: type: string description: This is the type of the message. "call.deleted" is sent when a call is deleted. enum: - call.delete.failed timestamp: type: number description: This is the timestamp of the message. artifact: description: 'This is a live version of the `call.artifact`. This matches what is stored on `call.artifact` after the call.' allOf: - $ref: '#/components/schemas/Artifact' assistant: description: This is the assistant that the message is associated with. allOf: - $ref: '#/components/schemas/CreateAssistantDTO' customer: description: This is the customer that the message is associated with. allOf: - $ref: '#/components/schemas/CreateCustomerDTO' call: description: This is the call that the message is associated with. allOf: - $ref: '#/components/schemas/Call' chat: description: This is the chat object. allOf: - $ref: '#/components/schemas/Chat' required: - type ServerMessage: type: object properties: message: description: 'These are all the messages that can be sent to your server before, after and during the call. Configure the messages you''d like to receive in `assistant.serverMessages`. The server where the message is sent is determined by the following precedence order: 1. `tool.server.url` (if configured, and only for "tool-calls" message) 2. `assistant.serverUrl` (if configure) 3. `phoneNumber.serverUrl` (if configured) 4. `org.serverUrl` (if configured)' oneOf: - $ref: '#/components/schemas/ServerMessageAssistantRequest' title: AssistantRequest - $ref: '#/components/schemas/ServerMessageConversationUpdate' title: ConversationUpdate - $ref: '#/components/schemas/ServerMessageEndOfCallReport' title: EndOfCallReport - $ref: '#/components/schemas/ServerMessageHandoffDestinationRequest' title: HandoffDestinationRequest - $ref: '#/components/schemas/ServerMessageHang' title: Hang - $ref: '#/components/schemas/ServerMessageKnowledgeBaseRequest' title: KnowledgeBaseRequest - $ref: '#/components/schemas/ServerMessageModelOutput' title: ModelOutput - $ref: '#/components/schemas/ServerMessagePhoneCallControl' title: PhoneCallControl - $ref: '#/components/schemas/ServerMessageSpeechUpdate' title: SpeechUpdate - $ref: '#/components/schemas/ServerMessageStatusUpdate' title: StatusUpdate - $ref: '#/components/schemas/ServerMessageToolCalls' title: ToolCalls - $ref: '#/components/schemas/ServerMessageTransferDestinationRequest' title: TransferDestinationRequest - $ref: '#/components/schemas/ServerMessageTransferUpdate' title: TransferUpdate - $ref: '#/components/schemas/ServerMessageTranscript' title: Transcript - $ref: '#/components/schemas/ServerMessageUserInterrupted' title: UserInterrupted - $ref: '#/components/schemas/ServerMessageLanguageChangeDetected' title: LanguageChangeDetected - $ref: '#/components/schemas/ServerMessageVoiceInput' title: VoiceInput - $ref: '#/components/schemas/ServerMessageAssistantSpeech' title: AssistantSpeech - $ref: '#/components/schemas/ServerMessageVoiceRequest' title: VoiceRequest - $ref: '#/components/schemas/ServerMessageCallEndpointingRequest' title: CallEndpointingRequest - $ref: '#/components/schemas/ServerMessageChatCreated' title: ChatCreated - $ref: '#/components/schemas/ServerMessageChatDeleted' title: ChatDeleted - $ref: '#/components/schemas/ServerMessageSessionCreated' title: SessionCreated - $ref: '#/components/schemas/ServerMessageSessionUpdated' title: SessionUpdated - $ref: '#/components/schemas/ServerMessageSessionDeleted' title: SessionDeleted - $ref: '#/components/schemas/ServerMessageCallDeleted' title: CallDeleted - $ref: '#/components/schemas/ServerMessageCallDeleteFailed' title: CallDeleteFailed required: - message ServerMessageResponseAssistantRequest: type: object properties: destination: description: 'This is the destination to transfer the inbound call to. This will immediately transfer without using any assistants. If this is sent, `assistantId`, `assistant`, `squadId`, and `squad` are ignored.' oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination assistantId: type: string description: 'This is the assistant ID that will be used for the call. To use a transient assistant, use `assistant` instead. To start a call with: - Assistant, use `assistantId` or `assistant` - Squad, use `squadId` or `squad` - Workflow, use `workflowId` or `workflow`' assistant: description: 'This is the assistant that will be used for the call. To use an existing assistant, use `assistantId` instead. To start a call with: - Assistant, use `assistant` - Squad, use `squad` - Workflow, use `workflow`' allOf: - $ref: '#/components/schemas/CreateAssistantDTO' assistantOverrides: description: These are the overrides for the `assistant` or `assistantId`'s settings and template variables. allOf: - $ref: '#/components/schemas/AssistantOverrides' squadId: type: string description: 'This is the squad that will be used for the call. To use a transient squad, use `squad` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' squad: description: 'This is a squad that will be used for the call. To use an existing squad, use `squadId` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' allOf: - $ref: '#/components/schemas/CreateSquadDTO' squadOverrides: description: 'These are the overrides for the `squad` or `squadId`''s member settings and template variables. This will apply to all members of the squad.' allOf: - $ref: '#/components/schemas/AssistantOverrides' workflowId: type: string description: 'This is the workflow that will be used for the call. To use a transient workflow, use `workflow` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' workflow: description: 'This is a workflow that will be used for the call. To use an existing workflow, use `workflowId` instead. To start a call with: - Assistant, use `assistant` or `assistantId` - Squad, use `squad` or `squadId` - Workflow, use `workflow` or `workflowId`' allOf: - $ref: '#/components/schemas/CreateWorkflowDTO' workflowOverrides: description: These are the overrides for the `workflow` or `workflowId`'s settings and template variables. allOf: - $ref: '#/components/schemas/WorkflowOverrides' error: type: string description: 'This is the error if the call shouldn''t be accepted. This is spoken to the customer. If this is sent, `assistantId`, `assistant`, `squadId`, `squad`, and `destination` are ignored.' ServerMessageResponseHandoffDestinationRequest: type: object properties: result: type: string description: This is the local tool result message returned for the handoff tool call. destination: type: object description: This is the destination you'd like the call to be transferred to. error: type: string description: This is the error message if the handoff should not be made. required: - destination KnowledgeBaseResponseDocument: type: object properties: content: type: string description: This is the content of the document. similarity: type: number description: This is the similarity score of the document. uuid: type: string description: This is the uuid of the document. required: - content - similarity ServerMessageResponseKnowledgeBaseRequest: type: object properties: documents: description: This is the list of documents that will be sent to the model alongside the `messages` to generate a response. type: array items: $ref: '#/components/schemas/KnowledgeBaseResponseDocument' message: description: This can be used to skip the model output generation and speak a custom message. allOf: - $ref: '#/components/schemas/CustomMessage' ToolCallResult: type: object properties: message: description: 'This is the message that will be spoken to the user. If this is not returned, assistant will speak: 1. a `request-complete` or `request-failed` message from `tool.messages`, if it exists 2. a response generated by the model, if not' oneOf: - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed name: type: string description: This is the name of the function the model called. toolCallId: type: string description: This is the unique identifier for the tool call. result: type: string description: 'This is the result if the tool call was successful. This is added to the conversation history. Further, if this is returned, assistant will speak: 1. the `message`, if it exists and is of type `request-complete` 2. a `request-complete` message from `tool.messages`, if it exists 3. a response generated by the model, if neither exist' error: type: string description: 'This is the error if the tool call was not successful. This is added to the conversation history. Further, if this is returned, assistant will speak: 1. the `message`, if it exists and is of type `request-failed` 2. a `request-failed` message from `tool.messages`, if it exists 3. a response generated by the model, if neither exist' metadata: type: object description: This is optional metadata for the tool call result to be sent to the client. required: - name - toolCallId ServerMessageResponseToolCalls: type: object properties: results: description: These are the results of the "tool-calls" message. type: array items: $ref: '#/components/schemas/ToolCallResult' error: type: string description: This is the error message if the tool call was not successful. ServerMessageResponseTransferDestinationRequest: type: object properties: destination: description: This is the destination you'd like the call to be transferred to. oneOf: - $ref: '#/components/schemas/TransferDestinationAssistant' title: Assistant - $ref: '#/components/schemas/TransferDestinationNumber' title: Number - $ref: '#/components/schemas/TransferDestinationSip' title: Sip message: description: This is the message that will be spoken to the user as the tool is running. oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed error: type: string description: This is the error message if the transfer should not be made. ServerMessageResponseVoiceRequest: type: object properties: data: type: string description: "DO NOT respond to a `voice-request` webhook with this schema\ \ of { data }. This schema just exists to document what the response should\ \ look like. Follow these instructions:\n\nHere is what the request will\ \ look like:\n\nPOST https://{assistant.voice.server.url}\nContent-Type:\ \ application/json\n\n{\n \"messsage\": {\n \"type\": \"voice-request\"\ ,\n \"text\": \"Hello, world!\",\n \"sampleRate\": 24000,\n ...other\ \ metadata about the call...\n }\n}\n\nThe expected response is 1-channel\ \ 16-bit raw PCM audio at the sample rate specified in the request. Here\ \ is how the response will be piped to the transport:\n```\nresponse.on('data',\ \ (chunk: Buffer) => {\n outputStream.write(chunk);\n});\n```" required: - data ServerMessageResponseCallEndpointingRequest: type: object properties: timeoutSeconds: type: number description: This is the timeout in seconds to wait before considering the user's speech as finished. minimum: 0 maximum: 15 required: - timeoutSeconds ServerMessageResponse: type: object properties: messageResponse: description: 'This is the response that is expected from the server to the message. Note: Most messages don''t expect a response. Only "assistant-request", "tool-calls" and "transfer-destination-request" do.' oneOf: - $ref: '#/components/schemas/ServerMessageResponseAssistantRequest' title: AssistantRequest - $ref: '#/components/schemas/ServerMessageResponseHandoffDestinationRequest' title: HandoffDestinationRequest - $ref: '#/components/schemas/ServerMessageResponseKnowledgeBaseRequest' title: KnowledgeBaseRequest - $ref: '#/components/schemas/ServerMessageResponseToolCalls' title: ToolCalls - $ref: '#/components/schemas/ServerMessageResponseTransferDestinationRequest' title: TransferDestinationRequest - $ref: '#/components/schemas/ServerMessageResponseVoiceRequest' title: VoiceRequest - $ref: '#/components/schemas/ServerMessageResponseCallEndpointingRequest' title: CallEndpointingRequest required: - messageResponse ClientInboundMessageAddMessage: type: object properties: type: type: string description: This is the type of the message. Send "add-message" message to add a message to the conversation history. enum: - add-message message: description: This is the message to add to the conversation. allOf: - $ref: '#/components/schemas/OpenAIMessage' triggerResponseEnabled: type: boolean description: 'This is the flag to trigger a response, or to insert the message into the conversation history silently. Defaults to `true`. Usage: - Use `true` to trigger a response. - Use `false` to insert the message into the conversation history silently. @default true' default: true required: - type - message ClientInboundMessageControl: type: object properties: type: type: string description: 'This is the type of the message. Send "control" message to control the assistant. `control` options are: - "mute-assistant" - mute the assistant - "unmute-assistant" - unmute the assistant - "mute-customer" - mute the user - "unmute-customer" - unmute the user - "say-first-message" - say the first message (this is used when video recording is enabled and the conversation is only started once the client side kicks off the recording)' enum: - control control: type: string description: This is the control action enum: - mute-assistant - unmute-assistant - mute-customer - unmute-customer - say-first-message required: - type - control ClientInboundMessageSay: type: object properties: type: type: string description: This is the type of the message. Send "say" message to make the assistant say something. enum: - say interruptAssistantEnabled: type: boolean description: 'This is the flag for whether the message should replace existing assistant speech. @default false' default: false content: type: string description: This is the content to say. 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 by the user. ClientInboundMessageEndCall: type: object properties: type: type: string description: This is the type of the message. Send "end-call" message to end the call. enum: - end-call required: - type ClientInboundMessageTransfer: type: object properties: type: type: string description: This is the type of the message. Send "transfer" message to transfer the call to a destination. enum: - transfer destination: description: This is the destination to transfer the call to. oneOf: - $ref: '#/components/schemas/TransferDestinationNumber' title: NumberTransferDestination - $ref: '#/components/schemas/TransferDestinationSip' title: SipTransferDestination content: type: string description: This is the content to say. required: - type ClientInboundMessageSendTransportMessage: type: object properties: type: type: string description: This is the type of the message. Send "send-transport-message" to send a transport-specific message during the call. enum: - send-transport-message message: description: This is the transport-specific message to send. oneOf: - $ref: '#/components/schemas/VapiSipTransportMessage' title: VapiSipTransportMessage - $ref: '#/components/schemas/TwilioTransportMessage' title: TwilioTransportMessage required: - type - message ClientInboundMessage: type: object properties: message: description: These are the messages that can be sent from client-side SDKs to control the call. oneOf: - $ref: '#/components/schemas/ClientInboundMessageAddMessage' title: AddMessage - $ref: '#/components/schemas/ClientInboundMessageControl' title: Control - $ref: '#/components/schemas/ClientInboundMessageSay' title: Say - $ref: '#/components/schemas/ClientInboundMessageEndCall' title: EndCall - $ref: '#/components/schemas/ClientInboundMessageTransfer' title: Transfer - $ref: '#/components/schemas/ClientInboundMessageSendTransportMessage' title: SendTransportMessage required: - message BotMessage: type: object properties: role: type: string description: The role of the bot in the conversation. message: type: string description: The message content from the bot. time: type: number description: The timestamp when the message was sent. endTime: type: number description: The timestamp when the message ended. secondsFromStart: type: number description: The number of seconds from the start of the conversation. source: type: string description: The source of the message. duration: type: number description: The duration of the message in seconds. required: - role - message - time - endTime - secondsFromStart ToolCallMessage: type: object properties: role: type: string description: The role of the tool call in the conversation. toolCalls: description: The list of tool calls made during the conversation. type: array items: type: object message: type: string description: The message content for the tool call. time: type: number description: The timestamp when the message was sent. secondsFromStart: type: number description: The number of seconds from the start of the conversation. required: - role - toolCalls - message - time - secondsFromStart ToolCallResultMessageWarning: type: object properties: type: type: string description: "The kind of warning. Currently:\n- `oversized-tool-response`:\ \ the tool's serialized response exceeded the\n recommended size and\ \ is likely to bloat the model context, increasing\n latency and risking\ \ truncation of earlier instructions." enum: - oversized-tool-response tokenCount: type: number description: The estimated number of tokens in the serialized tool response. threshold: type: number description: The threshold (in tokens) above which the warning is raised. required: - type - tokenCount - threshold ToolCallResultMessage: type: object properties: role: type: string description: The role of the tool call result in the conversation. toolCallId: type: string description: The ID of the tool call. name: type: string description: The name of the tool that returned the result. result: type: string description: The result of the tool call in JSON format. time: type: number description: The timestamp when the message was sent. secondsFromStart: type: number description: The number of seconds from the start of the conversation. metadata: type: object description: The metadata for the tool call result. warnings: description: 'Warnings raised for this tool call result, e.g. when the response is larger than recommended for voice AI context windows.' type: array items: $ref: '#/components/schemas/ToolCallResultMessageWarning' required: - role - toolCallId - name - result - time - secondsFromStart TransportCost: type: object properties: type: type: string description: This is the type of cost, always 'transport' for this class. enum: - transport provider: type: string enum: - daily - vapi.websocket - twilio - vonage - telnyx - vapi.sip minutes: type: number description: This is the minutes of `transport` usage. This should match `call.endedAt` - `call.startedAt`. cost: type: number description: This is the cost of the component in USD. required: - type - minutes - cost TranscriberCost: type: object properties: type: type: string description: This is the type of cost, always 'transcriber' for this class. enum: - transcriber transcriber: type: object description: 'This is the transcriber that was used during the call. This matches one of the below: - `call.assistant.transcriber`, - `call.assistantId->transcriber`, - `call.squad[n].assistant.transcriber`, - `call.squad[n].assistantId->transcriber`, - `call.squadId->[n].assistant.transcriber`, - `call.squadId->[n].assistantId->transcriber`.' minutes: type: number description: This is the minutes of `transcriber` usage. This should match `call.endedAt` - `call.startedAt` for single assistant calls, while squad calls will have multiple transcriber costs one for each assistant that was used. cost: type: number description: This is the cost of the component in USD. required: - type - transcriber - minutes - cost ModelCost: type: object properties: type: type: string description: This is the type of cost, always 'model' for this class. enum: - model model: type: object description: 'This is the model that was used during the call. This matches one of the following: - `call.assistant.model`, - `call.assistantId->model`, - `call.squad[n].assistant.model`, - `call.squad[n].assistantId->model`, - `call.squadId->[n].assistant.model`, - `call.squadId->[n].assistantId->model`.' promptTokens: type: number description: This is the number of prompt tokens used in the call. These should be total prompt tokens used in the call for single assistant calls, while squad calls will have multiple model costs one for each assistant that was used. completionTokens: type: number description: This is the number of completion tokens generated in the call. These should be total completion tokens used in the call for single assistant calls, while squad calls will have multiple model costs one for each assistant that was used. cachedPromptTokens: type: number description: This is the number of cached prompt tokens used in the call. This is only applicable to certain providers (e.g., OpenAI, Azure OpenAI) that support prompt caching. Cached tokens are billed at a discounted rate. cost: type: number description: This is the cost of the component in USD. required: - type - model - promptTokens - completionTokens - cost VoiceCost: type: object properties: type: type: string description: This is the type of cost, always 'voice' for this class. enum: - voice voice: type: object description: 'This is the voice that was used during the call. This matches one of the following: - `call.assistant.voice`, - `call.assistantId->voice`, - `call.squad[n].assistant.voice`, - `call.squad[n].assistantId->voice`, - `call.squadId->[n].assistant.voice`, - `call.squadId->[n].assistantId->voice`.' characters: type: number description: This is the number of characters that were generated during the call. These should be total characters used in the call for single assistant calls, while squad calls will have multiple voice costs one for each assistant that was used. cost: type: number description: This is the cost of the component in USD. required: - type - voice - characters - cost VapiCost: type: object properties: type: type: string description: This is the type of cost, always 'vapi' for this class. enum: - vapi subType: type: string description: This is the sub type of the cost. enum: - normal - overage minutes: type: number description: This is the minutes of Vapi usage. This should match `call.endedAt` - `call.startedAt`. cost: type: number description: This is the cost of the component in USD. required: - type - subType - minutes - cost AnalysisCost: type: object properties: type: type: string description: This is the type of cost, always 'analysis' for this class. enum: - analysis analysisType: type: string description: This is the type of analysis performed. enum: - summary - structuredData - successEvaluation - structuredOutput model: type: object description: This is the model that was used to perform the analysis. promptTokens: type: number description: This is the number of prompt tokens used in the analysis. completionTokens: type: number description: This is the number of completion tokens generated in the analysis. cachedPromptTokens: type: number description: This is the number of cached prompt tokens used in the analysis. This is only applicable to certain providers (e.g., OpenAI, Azure OpenAI) that support prompt caching. Cached tokens are billed at a discounted rate. cost: type: number description: This is the cost of the component in USD. required: - type - analysisType - model - promptTokens - completionTokens - cost VoicemailDetectionCost: type: object properties: type: type: string description: This is the type of cost, always 'voicemail-detection' for this class. enum: - voicemail-detection model: type: object description: This is the model that was used to perform the analysis. provider: type: string description: This is the provider that was used to detect the voicemail. enum: - twilio - google - openai - vapi promptTextTokens: type: number description: This is the number of prompt text tokens used in the voicemail detection. promptAudioTokens: type: number description: This is the number of prompt audio tokens used in the voicemail detection. completionTextTokens: type: number description: This is the number of completion text tokens used in the voicemail detection. completionAudioTokens: type: number description: This is the number of completion audio tokens used in the voicemail detection. cost: type: number description: This is the cost of the component in USD. required: - type - model - provider - promptTextTokens - promptAudioTokens - completionTextTokens - completionAudioTokens - cost KnowledgeBaseCost: type: object properties: type: type: string description: This is the type of cost, always 'knowledge-base' for this class. enum: - knowledge-base model: type: object description: This is the model that was used for processing the knowledge base. promptTokens: type: number description: This is the number of prompt tokens used in the knowledge base query. completionTokens: type: number description: This is the number of completion tokens generated in the knowledge base query. cost: type: number description: This is the cost of the component in USD. required: - type - model - promptTokens - completionTokens - cost ChatCost: type: object properties: type: type: string description: This is the type of cost, always 'chat' for this class. enum: - chat cost: type: number description: This is the cost of the component in USD. required: - type - cost SessionCost: type: object properties: type: type: string description: This is the type of cost, always 'session' for this class. enum: - session cost: type: number description: This is the cost of the component in USD. required: - type - cost FunctionToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - function description: The type of tool. "function" for Function tool. async: type: boolean example: false description: "This determines if the tool is async.\n\n If async, the assistant\ \ will move forward without waiting for your server to respond. This is\ \ useful if you just want to trigger something on your server.\n\n If\ \ sync, the assistant will wait for your server to respond. This is useful\ \ if want assistant to respond with the result from your server.\n\n \ \ Defaults to synchronous (`false`)." server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' variableExtractionPlan: description: Plan to extract variables from the tool response allOf: - $ref: '#/components/schemas/VariableExtractionPlan' parameters: description: Static key-value pairs merged into the request body. Values support Liquid templates. type: array items: $ref: '#/components/schemas/ToolParameter' toolCall: $ref: '#/components/schemas/ToolCall' function: description: This is the function definition of the tool. allOf: - $ref: '#/components/schemas/OpenAIFunction' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - toolCall GhlToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - ghl description: The type of tool. "ghl" for GHL tool. toolCall: $ref: '#/components/schemas/ToolCall' metadata: $ref: '#/components/schemas/GhlToolMetadata' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - toolCall - metadata MakeToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - make description: The type of tool. "make" for Make tool. toolCall: $ref: '#/components/schemas/ToolCall' metadata: $ref: '#/components/schemas/MakeToolMetadata' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - toolCall - metadata BashToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - bash description: The type of tool. "bash" for Bash tool. subType: type: string enum: - bash_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' toolCall: $ref: '#/components/schemas/ToolCall' name: type: string description: The name of the tool, fixed to 'bash' default: bash enum: - bash rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - subType - toolCall - name ComputerToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - computer description: The type of tool. "computer" for Computer tool. subType: type: string enum: - computer_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' toolCall: $ref: '#/components/schemas/ToolCall' 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 rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - subType - toolCall - name - displayWidthPx - displayHeightPx TextEditorToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - textEditor description: The type of tool. "textEditor" for Text Editor tool. subType: type: string enum: - text_editor_20241022 description: The sub type of tool. server: description: "\n This is the server where a `tool-calls` webhook will be\ \ sent.\n\n Notes:\n - Webhook is sent to this server when a tool call\ \ is made.\n - Webhook contains the call, assistant, and phone number\ \ objects.\n - Webhook contains the variables set on the assistant.\n\ \ - Webhook is sent to the first available URL in this order: {{tool.server.url}},\ \ {{assistant.server.url}}, {{phoneNumber.server.url}}, {{org.server.url}}.\n\ \ - Webhook expects a response with tool call result." allOf: - $ref: '#/components/schemas/Server' toolCall: $ref: '#/components/schemas/ToolCall' name: type: string description: The name of the tool, fixed to 'str_replace_editor' default: str_replace_editor enum: - str_replace_editor rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - subType - toolCall - name GoogleCalendarCreateEventToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - google.calendar.event.create description: The type of tool. "google.calendar.event.create" for Google Calendar Create Event tool. toolCall: $ref: '#/components/schemas/ToolCall' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - toolCall GoogleSheetsRowAppendToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - google.sheets.row.append description: The type of tool. "google.sheets.row.append" for Google Sheets Row Append tool. toolCall: $ref: '#/components/schemas/ToolCall' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - toolCall GoHighLevelCalendarAvailabilityToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.calendar.availability.check description: The type of tool. "gohighlevel.calendar.availability.check" for GoHighLevel Calendar Availability Check tool. toolCall: $ref: '#/components/schemas/ToolCall' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - toolCall GoHighLevelCalendarEventCreateToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.calendar.event.create description: The type of tool. "gohighlevel.calendar.event.create" for GoHighLevel Calendar Event Create tool. toolCall: $ref: '#/components/schemas/ToolCall' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - toolCall GoHighLevelContactCreateToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.contact.create description: The type of tool. "gohighlevel.contact.create" for GoHighLevel Contact Create tool. toolCall: $ref: '#/components/schemas/ToolCall' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - toolCall GoHighLevelContactGetToolWithToolCall: type: object properties: messages: type: array description: 'These are the messages that will be spoken to the user as the tool is running. For some tools, this is auto-filled based on special fields like `tool.destinations`. For others like the function tool, these can be custom configured.' items: oneOf: - $ref: '#/components/schemas/ToolMessageStart' title: ToolMessageStart - $ref: '#/components/schemas/ToolMessageComplete' title: ToolMessageComplete - $ref: '#/components/schemas/ToolMessageFailed' title: ToolMessageFailed - $ref: '#/components/schemas/ToolMessageDelayed' title: ToolMessageDelayed type: type: string enum: - gohighlevel.contact.get description: The type of tool. "gohighlevel.contact.get" for GoHighLevel Contact Get tool. toolCall: $ref: '#/components/schemas/ToolCall' rejectionPlan: description: "This is the plan to reject a tool call based on the conversation\ \ state.\n\n// Example 1: Reject endCall if user didn't say goodbye\n\ ```json\n{\n conditions: [{\n type: 'regex',\n regex: '(?i)\\\\\ b(bye|goodbye|farewell|see you later|take care)\\\\b',\n target: {\ \ position: -1, role: 'user' },\n negate: true // Reject if pattern\ \ does NOT match\n }]\n}\n```\n\n// Example 2: Reject transfer if user\ \ is actually asking a question\n```json\n{\n conditions: [{\n type:\ \ 'regex',\n regex: '\\\\?',\n target: { position: -1, role: 'user'\ \ }\n }]\n}\n```\n\n// Example 3: Reject transfer if user didn't mention\ \ transfer recently\n```json\n{\n conditions: [{\n type: 'liquid',\n\ \ liquid: `{% assign recentMessages = messages | last: 5 %}\n{% assign\ \ userMessages = recentMessages | where: 'role', 'user' %}\n{% assign\ \ mentioned = false %}\n{% for msg in userMessages %}\n {% if msg.content\ \ contains 'transfer' or msg.content contains 'connect' or msg.content\ \ contains 'speak to' %}\n {% assign mentioned = true %}\n {% break\ \ %}\n {% endif %}\n{% endfor %}\n{% if mentioned %}\n false\n{% else\ \ %}\n true\n{% endif %}`\n }]\n}\n```\n\n// Example 4: Reject endCall\ \ if the bot is looping and trying to exit\n```json\n{\n conditions:\ \ [{\n type: 'liquid',\n liquid: `{% assign recentMessages = messages\ \ | last: 6 %}\n{% assign userMessages = recentMessages | where: 'role',\ \ 'user' | reverse %}\n{% if userMessages.size < 3 %}\n false\n{% else\ \ %}\n {% assign msg1 = userMessages[0].content | downcase %}\n {% assign\ \ msg2 = userMessages[1].content | downcase %}\n {% assign msg3 = userMessages[2].content\ \ | downcase %}\n {% comment %} Check for repetitive messages {% endcomment\ \ %}\n {% if msg1 == msg2 or msg1 == msg3 or msg2 == msg3 %}\n true\n\ \ {% comment %} Check for common loop phrases {% endcomment %}\n {%\ \ elsif msg1 contains 'cool thanks' or msg2 contains 'cool thanks' or\ \ msg3 contains 'cool thanks' %}\n true\n {% elsif msg1 contains 'okay\ \ thanks' or msg2 contains 'okay thanks' or msg3 contains 'okay thanks'\ \ %}\n true\n {% elsif msg1 contains 'got it' or msg2 contains 'got\ \ it' or msg3 contains 'got it' %}\n true\n {% else %}\n false\n\ \ {% endif %}\n{% endif %}`\n }]\n}\n```" allOf: - $ref: '#/components/schemas/ToolRejectionPlan' required: - type - toolCall VapiSipTransportMessage: type: object properties: transport: type: string description: This is the transport type. enum: - vapi.sip sipVerb: type: string description: This is the SIP verb to use. Must be one of INFO, MESSAGE, or NOTIFY. enum: - INFO - MESSAGE - NOTIFY headers: type: object description: These are the headers to include with the SIP request. body: type: string description: This is the body of the SIP request, if any. required: - transport - sipVerb TwilioTransportMessage: type: object properties: transport: type: string description: This is the transport type. enum: - twilio twiml: type: string description: This is the TwiML to send to the Twilio call. required: - transport - twiml