diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index 83437602f..1f60dd3e6 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -7959,6 +7959,33 @@ ] } }, + "/eval/simulation/concurrency": { + "get": { + "operationId": "SimulationController_getConcurrency", + "summary": "Get Simulation Concurrency", + "parameters": [], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SimulationConcurrencyResponse" + } + } + } + } + }, + "tags": [ + "Simulations" + ], + "security": [ + { + "bearer": [] + } + ] + } + }, "/eval/simulation/{id}": { "get": { "operationId": "SimulationController_findOne", @@ -8079,33 +8106,6 @@ ] } }, - "/eval/simulation/concurrency": { - "get": { - "operationId": "SimulationController_getConcurrency", - "summary": "Get Simulation Concurrency", - "parameters": [], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SimulationConcurrencyResponse" - } - } - } - } - }, - "tags": [ - "Simulations" - ], - "security": [ - { - "bearer": [] - } - ] - } - }, "/reporting/insight": { "post": { "operationId": "InsightController_create", @@ -12680,6 +12680,13 @@ "$ref": "#/components/schemas/SonioxContextGeneralItem" } }, + "confidenceThreshold": { + "type": "number", + "minimum": 0, + "maximum": 1, + "example": 0.4, + "description": "Transcripts below this confidence are discarded. For a discarded final, an `assistant.transcriber.endpointedSpeechLowConfidence` hook whose range covers the confidence runs (by default `[threshold - 0.2, threshold)`); if none does, the assistant does not respond to that utterance. Confidence is the mean of the per-token scores, and a transcript with an unscored token counts as 1. When unset, nothing is discarded by this setting." + }, "fallbackPlan": { "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ @@ -15772,6 +15779,13 @@ "items": { "$ref": "#/components/schemas/SonioxContextGeneralItem" } + }, + "confidenceThreshold": { + "type": "number", + "minimum": 0, + "maximum": 1, + "example": 0.4, + "description": "Transcripts below this confidence are discarded. For a discarded final, an `assistant.transcriber.endpointedSpeechLowConfidence` hook whose range covers the confidence runs (by default `[threshold - 0.2, threshold)`); if none does, the assistant does not respond to that utterance. Confidence is the mean of the per-token scores, and a transcript with an unscored token counts as 1. When unset, nothing is discarded by this setting." } }, "required": [ @@ -21915,6 +21929,70 @@ } } }, + "OpenAIReasonerSkill": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Unique name within this assistant.", + "maxLength": 64, + "pattern": "/^[a-z][a-z0-9_-]*$/" + }, + "description": { + "type": "string", + "description": "Explain when the reasoner should load this skill. Always visible in its catalog.", + "maxLength": 1024, + "pattern": "/\\S/" + }, + "content": { + "type": "string", + "description": "Full skill instructions, loaded only while this skill is active.", + "maxLength": 32000, + "pattern": "/\\S/" + }, + "tools": { + "type": "array", + "description": "Tools available only after loading this skill. Can be combined with toolIds.", + "maxItems": 20, + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/CreateFunctionToolDTO" + }, + { + "$ref": "#/components/schemas/CreateApiRequestToolDTO" + }, + { + "$ref": "#/components/schemas/CreateMcpToolDTO" + }, + { + "$ref": "#/components/schemas/CreateEndCallToolDTO" + }, + { + "$ref": "#/components/schemas/CreateDtmfToolDTO" + }, + { + "$ref": "#/components/schemas/CreateTransferCallToolDTO" + } + ] + } + }, + "toolIds": { + "type": "array", + "description": "Existing organization-owned tools available only after loading this skill.", + "items": { + "type": "string", + "format": "uuid" + }, + "maxItems": 20 + } + }, + "required": [ + "name", + "description", + "content" + ] + }, "OpenAIReasoner": { "type": "object", "properties": { @@ -21951,7 +22029,15 @@ }, "instructions": { "type": "string", - "description": "Complete reasoner instructions. An explicit empty string is preserved.\nOmit to use Vapi's default reasoner instructions. No behavioral instructions\nare appended to a custom prompt." + "description": "Complete reasoner instructions. An explicit empty string is preserved.\nOmit to use Vapi's default reasoner instructions. No behavioral instructions\nare appended unless skills are configured; skill loading guidance and active\nskill content are then composed with these instructions." + }, + "skills": { + "description": "Inline skills whose instructions and tools the GPT-Live reasoner loads on demand.", + "maxItems": 20, + "type": "array", + "items": { + "$ref": "#/components/schemas/OpenAIReasonerSkill" + } } } }, @@ -27927,45 +28013,45 @@ }, "similarityBoost": { "type": "number", - "description": "Defines the similarity boost for voice settings.", + "description": "Defines the similarity boost for voice settings. Ignored by `eleven_v4_turbo`.", "minimum": 0, "maximum": 1, "example": 0.75 }, "style": { "type": "number", - "description": "Defines the style for voice settings.", + "description": "Defines the style for voice settings. Ignored by `eleven_v4_turbo`.", "minimum": 0, "maximum": 1, "example": 0 }, "useSpeakerBoost": { "type": "boolean", - "description": "Defines the use speaker boost for voice settings.", + "description": "Defines the use speaker boost for voice settings. Ignored by `eleven_v4_turbo`.", "example": false }, "speed": { "type": "number", - "description": "Defines the speed for voice settings.", + "description": "Defines the speed for voice settings. Ignored by `eleven_v4_turbo`.", "minimum": 0.7, "maximum": 1.2, "example": 0.9 }, "optimizeStreamingLatency": { "type": "number", - "description": "Defines the optimize streaming latency for voice settings. Defaults to 3.", + "description": "Defines the optimize streaming latency for voice settings. Defaults to 3. Ignored by `eleven_v4_turbo`.", "minimum": 0, "maximum": 4, "example": 3 }, "enableSsmlParsing": { "type": "boolean", - "description": "This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency.\n\n@default false", + "description": "This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency. Ignored by `eleven_v4_turbo`.\n\n@default false", "example": false }, "autoMode": { "type": "boolean", - "description": "Defines the auto mode for voice settings. Defaults to false.", + "description": "Defines the auto mode for voice settings. Defaults to false. Ignored by `eleven_v4_turbo`.", "example": false }, "model": { @@ -27978,13 +28064,14 @@ "eleven_flash_v2", "eleven_flash_v2_5", "eleven_monolingual_v1", - "eleven_v3" + "eleven_v3", + "eleven_v4_turbo" ], "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." + "description": "This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5, Flash v2.5 and v4 Turbo support language enforcement; other models ignore it." }, "chunkPlan": { "description": "This is the plan for chunking the model output before it is sent to the voice provider.", @@ -30772,45 +30859,45 @@ }, "similarityBoost": { "type": "number", - "description": "Defines the similarity boost for voice settings.", + "description": "Defines the similarity boost for voice settings. Ignored by `eleven_v4_turbo`.", "minimum": 0, "maximum": 1, "example": 0.75 }, "style": { "type": "number", - "description": "Defines the style for voice settings.", + "description": "Defines the style for voice settings. Ignored by `eleven_v4_turbo`.", "minimum": 0, "maximum": 1, "example": 0 }, "useSpeakerBoost": { "type": "boolean", - "description": "Defines the use speaker boost for voice settings.", + "description": "Defines the use speaker boost for voice settings. Ignored by `eleven_v4_turbo`.", "example": false }, "speed": { "type": "number", - "description": "Defines the speed for voice settings.", + "description": "Defines the speed for voice settings. Ignored by `eleven_v4_turbo`.", "minimum": 0.7, "maximum": 1.2, "example": 0.9 }, "optimizeStreamingLatency": { "type": "number", - "description": "Defines the optimize streaming latency for voice settings. Defaults to 3.", + "description": "Defines the optimize streaming latency for voice settings. Defaults to 3. Ignored by `eleven_v4_turbo`.", "minimum": 0, "maximum": 4, "example": 3 }, "enableSsmlParsing": { "type": "boolean", - "description": "This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency.\n\n@default false", + "description": "This enables the use of https://elevenlabs.io/docs/speech-synthesis/prompting#pronunciation. Defaults to false to save latency. Ignored by `eleven_v4_turbo`.\n\n@default false", "example": false }, "autoMode": { "type": "boolean", - "description": "Defines the auto mode for voice settings. Defaults to false.", + "description": "Defines the auto mode for voice settings. Defaults to false. Ignored by `eleven_v4_turbo`.", "example": false }, "model": { @@ -30823,13 +30910,14 @@ "eleven_flash_v2", "eleven_flash_v2_5", "eleven_monolingual_v1", - "eleven_v3" + "eleven_v3", + "eleven_v4_turbo" ], "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." + "description": "This is the language (ISO 639-1) that is enforced for the model. Currently only Turbo v2.5, Flash v2.5 and v4 Turbo support language enforcement; other models ignore it." }, "pronunciationDictionaryLocators": { "description": "This is the pronunciation dictionary locators to use.", @@ -45482,6 +45570,83 @@ "provider" ] }, + "TransientTwilioPhoneNumber": { + "type": "object", + "properties": { + "fallbackDestination": { + "description": "This is the fallback destination an inbound call will be transferred to if:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.", + "oneOf": [ + { + "$ref": "#/components/schemas/TransferDestinationNumber", + "title": "NumberTransferDestination" + }, + { + "$ref": "#/components/schemas/TransferDestinationSip", + "title": "SipTransferDestination" + } + ] + }, + "hooks": { + "type": "array", + "description": "This is the hooks that will be used for incoming calls to this phone number.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PhoneNumberHookCallRinging", + "title": "PhoneNumberHookCallRinging" + }, + { + "$ref": "#/components/schemas/PhoneNumberHookCallEnding", + "title": "PhoneNumberHookCallEnding" + } + ] + } + }, + "smsEnabled": { + "type": "boolean", + "description": "Controls whether Vapi sets the messaging webhook URL on the Twilio number during import.\n\nIf set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is.\nIf `true` or omitted (default), Vapi will configure both the voice and messaging URLs.\n\n@default true", + "default": true + }, + "name": { + "type": "string", + "description": "This is the name of the phone number. This is just for your own reference.", + "maxLength": 40 + }, + "assistantId": { + "type": "string", + "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "workflowId": { + "type": "string", + "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "squadId": { + "type": "string", + "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "server": { + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + }, + "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." + } + }, + "required": [ + "twilioPhoneNumber", + "twilioAccountSid" + ] + }, "AnalysisCostBreakdown": { "type": "object", "properties": { @@ -46166,309 +46331,6 @@ } } }, - "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:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.", - "oneOf": [ - { - "$ref": "#/components/schemas/TransferDestinationNumber", - "title": "NumberTransferDestination" - }, - { - "$ref": "#/components/schemas/TransferDestinationSip", - "title": "SipTransferDestination" - } - ] - }, - "hooks": { - "type": "array", - "description": "This is the hooks that will be used for incoming calls to this phone number.", - "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/PhoneNumberHookCallRinging", - "title": "PhoneNumberHookCallRinging" - }, - { - "$ref": "#/components/schemas/PhoneNumberHookCallEnding", - "title": "PhoneNumberHookCallEnding" - } - ] - } - }, - "smsEnabled": { - "type": "boolean", - "description": "Controls whether Vapi sets the messaging webhook URL on the Twilio number during import.\n\nIf set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is.\nIf `true` or omitted (default), Vapi will configure both the voice and messaging URLs.\n\n@default true", - "default": true - }, - "twilioPhoneNumber": { - "type": "string", - "description": "These are the digits of the phone number you own on your Twilio.", - "deprecated": true - }, - "twilioAccountSid": { - "type": "string", - "description": "This is your Twilio Account SID that will be used to handle this phone number." - }, - "twilioAuthToken": { - "type": "string", - "description": "This is the Twilio Auth Token that will be used to handle this phone number." - }, - "twilioApiKey": { - "type": "string", - "description": "This is the Twilio API Key that will be used to handle this phone number. If AuthToken is provided, this will be ignored." - }, - "twilioApiSecret": { - "type": "string", - "description": "This is the Twilio API Secret that will be used to handle this phone number. If AuthToken is provided, this will be ignored." - }, - "name": { - "type": "string", - "description": "This is the name of the phone number. This is just for your own reference.", - "maxLength": 40 - }, - "assistantId": { - "type": "string", - "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." - }, - "workflowId": { - "type": "string", - "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." - }, - "squadId": { - "type": "string", - "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." - }, - "server": { - "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", - "allOf": [ - { - "$ref": "#/components/schemas/Server" - } - ] - } - }, - "required": [ - "twilioPhoneNumber", - "twilioAccountSid" - ] - }, "CreateCustomerDTO": { "type": "object", "properties": { @@ -46806,6 +46668,7 @@ "vonage-completed", "phone-call-provider-bypass-enabled-but-no-call-received", "call.in-progress.error-providerfault-transport-never-connected", + "call.start.error-vapifault-worker-not-available", "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", @@ -47177,6 +47040,9 @@ "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-blocked-concurrent-requests-and-requested-upgrade", + "call.in-progress.error-providerfault-eleven-labs-voice-disabled-by-owner", + "call.in-progress.error-providerfault-eleven-labs-vapi-voice-disabled-by-owner", "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", @@ -47351,6 +47217,14 @@ } ] }, + "phoneNumber": { + "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", + "allOf": [ + { + "$ref": "#/components/schemas/TransientTwilioPhoneNumber" + } + ] + }, "id": { "type": "string", "description": "This is the unique identifier for the call." @@ -47504,14 +47378,6 @@ "type": "string", "description": "This is the phone number that will be used for the call. To use a transient number, use `phoneNumber` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." }, - "phoneNumber": { - "description": "This is the phone number that will be used for the call. To use an existing number, use `phoneNumberId` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type.", - "allOf": [ - { - "$ref": "#/components/schemas/ImportTwilioPhoneNumberDTO" - } - ] - }, "customerId": { "type": "string", "description": "This is the customer that will be called. To call a transient customer , use `customer` instead.\n\nOnly relevant for `outboundPhoneCall` and `inboundPhoneCall` type." @@ -47692,6 +47558,309 @@ "totalWords" ] }, + "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:\n1. `assistantId` is not set\n2. `squadId` is not set\n3. and, `assistant-request` message to the `serverUrl` fails\n\nIf this is not set and above conditions are met, the inbound call is hung up with an error message.", + "oneOf": [ + { + "$ref": "#/components/schemas/TransferDestinationNumber", + "title": "NumberTransferDestination" + }, + { + "$ref": "#/components/schemas/TransferDestinationSip", + "title": "SipTransferDestination" + } + ] + }, + "hooks": { + "type": "array", + "description": "This is the hooks that will be used for incoming calls to this phone number.", + "items": { + "oneOf": [ + { + "$ref": "#/components/schemas/PhoneNumberHookCallRinging", + "title": "PhoneNumberHookCallRinging" + }, + { + "$ref": "#/components/schemas/PhoneNumberHookCallEnding", + "title": "PhoneNumberHookCallEnding" + } + ] + } + }, + "smsEnabled": { + "type": "boolean", + "description": "Controls whether Vapi sets the messaging webhook URL on the Twilio number during import.\n\nIf set to `false`, Vapi will not update the Twilio messaging URL, leaving it as is.\nIf `true` or omitted (default), Vapi will configure both the voice and messaging URLs.\n\n@default true", + "default": true + }, + "twilioPhoneNumber": { + "type": "string", + "description": "These are the digits of the phone number you own on your Twilio.", + "deprecated": true + }, + "twilioAccountSid": { + "type": "string", + "description": "This is your Twilio Account SID that will be used to handle this phone number." + }, + "twilioAuthToken": { + "type": "string", + "description": "This is the Twilio Auth Token that will be used to handle this phone number." + }, + "twilioApiKey": { + "type": "string", + "description": "This is the Twilio API Key that will be used to handle this phone number. If AuthToken is provided, this will be ignored." + }, + "twilioApiSecret": { + "type": "string", + "description": "This is the Twilio API Secret that will be used to handle this phone number. If AuthToken is provided, this will be ignored." + }, + "name": { + "type": "string", + "description": "This is the name of the phone number. This is just for your own reference.", + "maxLength": 40 + }, + "assistantId": { + "type": "string", + "description": "This is the assistant that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId` nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "workflowId": { + "type": "string", + "description": "This is the workflow that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "squadId": { + "type": "string", + "description": "This is the squad that will be used for incoming calls to this phone number.\n\nIf neither `assistantId`, `squadId`, nor `workflowId` is set, `assistant-request` will be sent to your Server URL. Check `ServerMessage` and `ServerMessageResponse` for the shape of the message and response that is expected." + }, + "server": { + "description": "This is where Vapi will send webhooks. You can find all webhooks available along with their shape in ServerMessage schema.\n\nThe order of precedence is:\n\n1. assistant.server\n2. phoneNumber.server\n3. org.server", + "allOf": [ + { + "$ref": "#/components/schemas/Server" + } + ] + } + }, + "required": [ + "twilioPhoneNumber", + "twilioAccountSid" + ] + }, "CreateCallDTO": { "type": "object", "properties": { @@ -62388,33 +62557,6 @@ "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.\nSupports up to 3 levels (e.g., \"dept/feature/variant\").\nSet 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": { @@ -62458,6 +62600,33 @@ "isDefault" ] }, + "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.\nSupports up to 3 levels (e.g., \"dept/feature/variant\").\nSet 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}$/" + } + } + }, "BarInsightMetadata": { "type": "object", "properties": { @@ -77076,6 +77245,7 @@ "vonage-completed", "phone-call-provider-bypass-enabled-but-no-call-received", "call.in-progress.error-providerfault-transport-never-connected", + "call.start.error-vapifault-worker-not-available", "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", @@ -77447,6 +77617,9 @@ "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-blocked-concurrent-requests-and-requested-upgrade", + "call.in-progress.error-providerfault-eleven-labs-voice-disabled-by-owner", + "call.in-progress.error-providerfault-eleven-labs-vapi-voice-disabled-by-owner", "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", @@ -78531,6 +78704,7 @@ "vonage-completed", "phone-call-provider-bypass-enabled-but-no-call-received", "call.in-progress.error-providerfault-transport-never-connected", + "call.start.error-vapifault-worker-not-available", "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", @@ -78902,6 +79076,9 @@ "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-blocked-concurrent-requests-and-requested-upgrade", + "call.in-progress.error-providerfault-eleven-labs-voice-disabled-by-owner", + "call.in-progress.error-providerfault-eleven-labs-vapi-voice-disabled-by-owner", "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",