diff --git a/fern/apis/api/openapi.json b/fern/apis/api/openapi.json index d48aac42f..c53b95616 100644 --- a/fern/apis/api/openapi.json +++ b/fern/apis/api/openapi.json @@ -6464,7 +6464,7 @@ "description": "Disable partial transcripts.\nSet to `true` to not receive partial transcripts. Defaults to `false`." }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -6657,7 +6657,7 @@ "maximum": 70000 }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -6875,7 +6875,7 @@ ] }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -6997,7 +6997,7 @@ ] }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -7219,7 +7219,7 @@ "maximum": 500 }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -7473,7 +7473,7 @@ "example": 100 }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -7824,7 +7824,7 @@ "description": "Enable partial transcripts for low-latency streaming transcription" }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -8024,7 +8024,7 @@ "default": 0 }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -8161,7 +8161,7 @@ ] }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -8250,7 +8250,7 @@ ] }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -8344,7 +8344,7 @@ ] }, "fallbackPlan": { - "description": "This is the plan for voice provider fallbacks in the event that the primary voice provider fails.", + "description": "This is the plan for transcriber provider fallbacks in the event that the primary transcriber provider fails.", "allOf": [ { "$ref": "#/components/schemas/FallbackTranscriberPlan" @@ -12425,6 +12425,20 @@ "type" ] }, + "ContextEngineeringPlanUserAndAssistantMessages": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "userAndAssistantMessages" + ] + } + }, + "required": [ + "type" + ] + }, "VariableExtractionAlias": { "type": "object", "properties": { @@ -12489,6 +12503,10 @@ { "$ref": "#/components/schemas/ContextEngineeringPlanAll", "title": "All" + }, + { + "$ref": "#/components/schemas/ContextEngineeringPlanUserAndAssistantMessages", + "title": "User And Assistant Messages" } ] }, @@ -12559,6 +12577,145 @@ "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.\n\nThe call will start with the first assistant in the list.", + "type": "array", + "items": { + "$ref": "#/components/schemas/SquadMemberDTO" + } + }, + "membersOverrides": { + "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.", + "allOf": [ + { + "$ref": "#/components/schemas/AssistantOverrides" + } + ] + } + }, + "required": [ + "members" + ] + }, + "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" + } + ] + }, + "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.\nIf 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.\nMaps 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": { @@ -12605,6 +12762,10 @@ { "$ref": "#/components/schemas/HandoffDestinationDynamic", "title": "Dynamic" + }, + { + "$ref": "#/components/schemas/HandoffDestinationSquad", + "title": "Squad" } ] } @@ -15250,6 +15411,7 @@ "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", @@ -15376,6 +15538,7 @@ "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", @@ -20434,7 +20597,8 @@ "eleven_turbo_v2_5", "eleven_flash_v2", "eleven_flash_v2_5", - "eleven_monolingual_v1" + "eleven_monolingual_v1", + "eleven_v3" ], "example": "eleven_turbo_v2_5" }, @@ -21973,7 +22137,7 @@ }, "voiceId": { "type": "string", - "description": "Available voices by language:\n• en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus\n• zh: Yichen, Xiaoyin, Xinyi, Jing\n• nl: Erik, Katrien, Lennart, Lore\n• fr: Alain, Hélène, Mathieu, Étienne\n• de: Johanna, Josef\n• it: Gianni, Orietta\n• ja: Asuka, Satoshi\n• ko: Hyunwoo, Minji, Seojun, Yoona\n• pl: Szymon, Wojciech\n• pt: Heitor, Maitê\n• es: Diego, Lupita, Miguel, Rafael", + "description": "Available voices by language:\n• 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• zh: Yichen, Xiaoyin, Xinyi, Jing\n• nl: Erik, Katrien, Lennart, Lore\n• fr: Alain, Hélène, Mathieu, Étienne\n• de: Johanna, Josef\n• it: Gianni, Orietta\n• ja: Asuka, Satoshi\n• ko: Hyunwoo, Minji, Seojun, Yoona\n• pl: Szymon, Wojciech\n• pt: Heitor, Maitê\n• es: Diego, Lupita, Miguel, Rafael\n• ru: Svetlana, Elena, Dmitry, Nikolai\n• hi: Riya, Manoj\n• he: Yael, Oren\n• ar: Nour, Omar", "maxLength": 120, "title": "Inworld Voice ID", "enum": [ @@ -21997,6 +22161,11 @@ "Timothy", "Wendy", "Dominus", + "Hana", + "Clive", + "Carter", + "Blake", + "Luna", "Yichen", "Xiaoyin", "Xinyi", @@ -22026,7 +22195,17 @@ "Diego", "Lupita", "Miguel", - "Rafael" + "Rafael", + "Svetlana", + "Elena", + "Dmitry", + "Nikolai", + "Riya", + "Manoj", + "Yael", + "Oren", + "Nour", + "Omar" ], "example": "Alex" }, @@ -22053,7 +22232,11 @@ "de", "it", "pl", - "pt" + "pt", + "ru", + "hi", + "he", + "ar" ] }, "temperature": { @@ -22856,7 +23039,8 @@ "eleven_turbo_v2_5", "eleven_flash_v2", "eleven_flash_v2_5", - "eleven_monolingual_v1" + "eleven_monolingual_v1", + "eleven_v3" ], "example": "eleven_turbo_v2_5" }, @@ -24183,7 +24367,7 @@ }, "voiceId": { "type": "string", - "description": "Available voices by language:\n• en: Alex, Ashley, Craig, Deborah, Dennis, Edward, Elizabeth, Hades, Julia, Pixie, Mark, Olivia, Priya, Ronald, Sarah, Shaun, Theodore, Timothy, Wendy, Dominus\n• zh: Yichen, Xiaoyin, Xinyi, Jing\n• nl: Erik, Katrien, Lennart, Lore\n• fr: Alain, Hélène, Mathieu, Étienne\n• de: Johanna, Josef\n• it: Gianni, Orietta\n• ja: Asuka, Satoshi\n• ko: Hyunwoo, Minji, Seojun, Yoona\n• pl: Szymon, Wojciech\n• pt: Heitor, Maitê\n• es: Diego, Lupita, Miguel, Rafael", + "description": "Available voices by language:\n• 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• zh: Yichen, Xiaoyin, Xinyi, Jing\n• nl: Erik, Katrien, Lennart, Lore\n• fr: Alain, Hélène, Mathieu, Étienne\n• de: Johanna, Josef\n• it: Gianni, Orietta\n• ja: Asuka, Satoshi\n• ko: Hyunwoo, Minji, Seojun, Yoona\n• pl: Szymon, Wojciech\n• pt: Heitor, Maitê\n• es: Diego, Lupita, Miguel, Rafael\n• ru: Svetlana, Elena, Dmitry, Nikolai\n• hi: Riya, Manoj\n• he: Yael, Oren\n• ar: Nour, Omar", "maxLength": 120, "title": "Inworld Voice ID", "enum": [ @@ -24207,6 +24391,11 @@ "Timothy", "Wendy", "Dominus", + "Hana", + "Clive", + "Carter", + "Blake", + "Luna", "Yichen", "Xiaoyin", "Xinyi", @@ -24236,7 +24425,17 @@ "Diego", "Lupita", "Miguel", - "Rafael" + "Rafael", + "Svetlana", + "Elena", + "Dmitry", + "Nikolai", + "Riya", + "Manoj", + "Yael", + "Oren", + "Nour", + "Omar" ], "example": "Alex" }, @@ -24263,7 +24462,11 @@ "de", "it", "pl", - "pt" + "pt", + "ru", + "hi", + "he", + "ar" ] }, "temperature": { @@ -29695,74 +29898,6 @@ } } }, - "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.\n\nThe call will start with the first assistant in the list.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SquadMemberDTO" - } - }, - "membersOverrides": { - "description": "This can be used to override all the assistants' settings and provide values for their template variables.\n\nBoth `membersOverrides` and `members[n].assistantOverrides` can be used together. First, `members[n].assistantOverrides` is applied. Then, `membersOverrides` is applied as a global override.", - "allOf": [ - { - "$ref": "#/components/schemas/AssistantOverrides" - } - ] - } - }, - "required": [ - "members" - ] - }, "Squad": { "type": "object", "properties": { @@ -31958,9 +32093,30 @@ } } }, + "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`." @@ -33279,6 +33435,7 @@ "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", @@ -34865,7 +35022,15 @@ "properties": { "assistantId": { "type": "string", - "description": "The assistant ID to use for this chat" + "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", @@ -34951,7 +35116,6 @@ } }, "required": [ - "assistantId", "input" ] }, @@ -35005,7 +35169,15 @@ "properties": { "assistantId": { "type": "string", - "description": "The assistant ID to use for this chat" + "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", @@ -35091,7 +35263,6 @@ } }, "required": [ - "assistantId", "input" ] }, @@ -38867,6 +39038,10 @@ { "$ref": "#/components/schemas/HandoffDestinationDynamic", "title": "Dynamic" + }, + { + "$ref": "#/components/schemas/HandoffDestinationSquad", + "title": "Squad" } ] } @@ -41312,6 +41487,10 @@ { "$ref": "#/components/schemas/HandoffDestinationDynamic", "title": "Dynamic" + }, + { + "$ref": "#/components/schemas/HandoffDestinationSquad", + "title": "Squad" } ] } @@ -43048,509 +43227,2090 @@ ], "maxLength": 100 }, - "id": { + "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.\nIt 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.\nSupports up to 3 levels (e.g., \"dept/feature/variant\").\nMaps 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.\nIf 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.\nIt 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.\nSupports up to 3 levels (e.g., \"dept/feature/variant\").\nMaps 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.\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}$/" + } + } + }, + "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.\nIf 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.\nMutually exclusive with structuredOutput.", + "format": "uuid" + }, + "structuredOutput": { + "description": "This is an inline structured output definition for evaluation.\nMutually exclusive with structuredOutputId.\nOnly 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.\nAvailable operators depend on the structured output's schema type:\n- boolean: '=', '!='\n- string: '=', '!='\n- number/integer: '=', '!=', '>', '<', '>=', '<='", + "enum": [ + "=", + "!=", + ">", + "<", + ">=", + "<=" + ], + "example": "=" + }, + "value": { + "description": "This is the expected value to compare against the extracted structured output result.\nType 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.\nDefaults 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.\nEach 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" + } + ] + } + }, + "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.\nSupports up to 3 levels (e.g., \"dept/feature/variant\").\nMaps 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.\nEach 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" + } + ] + } + }, + "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.\nSupports up to 3 levels (e.g., \"dept/feature/variant\").\nMaps 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.\nEach 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" + } + ] + } + }, + "toolMocks": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ScenarioToolMock" + } + }, + "path": { + "type": "string", + "nullable": true, + "description": "Optional folder path for organizing scenarios.\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}$/" + } + } + }, + "SimulationRunSimulationEntry": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "simulation" + ], + "description": "Type discriminator" + }, + "simulationId": { + "type": "string", + "description": "ID of the simulation to run", + "format": "uuid" + } + }, + "required": [ + "type", + "simulationId" + ] + }, + "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 the assistant to test against", + "format": "uuid" + } + }, + "required": [ + "type", + "assistantId" + ] + }, + "SimulationRunTargetSquad": { + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "squad" + ], + "description": "Type of target" + }, + "squadId": { + "type": "string", + "description": "ID of the squad to test against", + "format": "uuid" + } + }, + "required": [ + "type", + "squadId" + ] + }, + "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.\nWill 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 unique identifier for the test." + "description": "This is the ISO 8601 date-time string of when the run failed." }, - "testSuiteId": { + "canceledAt": { + "format": "date-time", "type": "string", - "description": "This is the unique identifier for the test suite this test belongs to." + "description": "This is the ISO 8601 date-time string of when the run was canceled." }, - "orgId": { + "failureReason": { "type": "string", - "description": "This is the unique identifier for the organization this test belongs to." + "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 test was created." + "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 test was last updated." - }, - "name": { - "type": "string", - "description": "This is the name of the test.", - "maxLength": 80 + "description": "This is the ISO 8601 date-time string of when the run item was last updated." }, - "script": { + "runId": { "type": "string", - "description": "This is the script to be used for the chat test.", - "maxLength": 10000 + "description": "This is the ID of the parent run (batch/group).", + "format": "uuid" }, - "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": { + "hooks": { "type": "array", - "description": "These are the scorers used to evaluate the test.", + "description": "Hooks configured for this simulation run item", "items": { "oneOf": [ { - "$ref": "#/components/schemas/TestSuiteTestScorerAI", - "title": "AI" + "$ref": "#/components/schemas/SimulationHookCallStarted", + "title": "SimulationHookCallStarted" + }, + { + "$ref": "#/components/schemas/SimulationHookCallEnded", + "title": "SimulationHookCallEnded" } ] } }, - "type": { - "type": "string", - "description": "This is the type of the test, which must be voice.", - "enum": [ - "voice" - ], - "maxLength": 100 + "iterationNumber": { + "type": "number", + "description": "This is the iteration number (1-indexed) when run with iterations > 1.", + "default": 1 }, - "script": { + "sessionId": { "type": "string", - "description": "This is the script to be used for the voice test.", - "maxLength": 10000 + "description": "This is the session ID for chat-based simulations (webchat transport).", + "format": "uuid" }, - "numAttempts": { - "type": "number", - "description": "This is the number of attempts allowed for the test.", - "minimum": 1, - "maximum": 10 + "scenarioId": { + "type": "string", + "description": "This is the scenario ID at run creation time.", + "format": "uuid" }, - "name": { + "personalityId": { "type": "string", - "description": "This is the name of the test.", - "maxLength": 80 + "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": [ - "scorers", - "type", - "script" + "id", + "orgId", + "simulationId", + "status", + "queuedAt", + "createdAt", + "updatedAt" ] }, - "CreateTestSuiteTestChatDto": { + "CreateSimulationSuiteDTO": { "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": { + "name": { "type": "string", - "description": "This is the type of the test, which must be chat.", - "enum": [ - "chat" - ], - "maxLength": 100 + "description": "This is the name of the simulation suite.", + "maxLength": 80, + "example": "Checkout Flow Tests" }, - "script": { + "slackWebhookUrl": { "type": "string", - "description": "This is the script to be used for the chat test.", - "maxLength": 10000 + "description": "This is the Slack webhook URL for notifications." }, - "numAttempts": { - "type": "number", - "description": "This is the number of attempts allowed for the test.", - "minimum": 1, - "maximum": 10 + "simulationIds": { + "description": "This is the list of simulation IDs to include in the suite.", + "type": "array", + "items": { + "type": "string" + } }, - "name": { + "path": { "type": "string", - "description": "This is the name of the test.", - "maxLength": 80 + "nullable": true, + "description": "Optional folder path for organizing simulation suites.\nSupports up to 3 levels (e.g., \"dept/feature/variant\").\nMaps 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": [ - "scorers", - "type", - "script" + "name", + "simulationIds" ] }, - "UpdateTestSuiteTestVoiceDto": { + "SimulationSuite": { "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": { + "id": { "type": "string", - "description": "This is the type of the test, which must be voice.", - "enum": [ - "voice" - ], - "maxLength": 100 + "description": "This is the unique identifier for the simulation suite.", + "format": "uuid" }, - "name": { + "orgId": { "type": "string", - "description": "This is the name of the test.", - "maxLength": 80 + "description": "This is the unique identifier for the organization this suite belongs to.", + "format": "uuid" }, - "script": { + "createdAt": { + "format": "date-time", "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" - } - ] - } + "description": "This is the ISO 8601 date-time string of when the suite was created." }, - "type": { + "updatedAt": { + "format": "date-time", "type": "string", - "description": "This is the type of the test, which must be chat.", - "enum": [ - "chat" - ], - "maxLength": 100 + "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 test.", - "maxLength": 80 + "description": "This is the name of the simulation suite.", + "maxLength": 80, + "example": "Checkout Flow Tests" }, - "script": { + "slackWebhookUrl": { "type": "string", - "description": "This is the script to be used for the chat test.", - "maxLength": 10000 + "description": "This is the Slack webhook URL for notifications." }, - "numAttempts": { - "type": "number", - "description": "This is the number of attempts allowed for the test.", - "minimum": 1, - "maximum": 10 - } - } - }, - "TestSuiteTestScorerAI": { - "type": "object", - "properties": { - "type": { + "path": { "type": "string", - "description": "This is the type of the scorer, which must be AI.", - "enum": [ - "ai" - ], - "maxLength": 100 + "nullable": true, + "description": "Optional folder path for organizing simulation suites.\nSupports up to 3 levels (e.g., \"dept/feature/variant\").\nMaps 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}$/" }, - "rubric": { - "type": "string", - "description": "This is the rubric used by the AI scorer.", - "maxLength": 10000 - } - }, - "required": [ - "type", - "rubric" - ] - }, - "TestSuiteTestsPaginatedResponse": { - "type": "object", - "properties": { - "results": { + "simulationIds": { + "description": "This is the list of simulation IDs in this suite.", "type": "array", - "description": "A list of test suite tests.", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteTestVoice" - }, - { - "$ref": "#/components/schemas/TestSuiteTestChat" - } - ] + "type": "string" } - }, - "metadata": { - "description": "Metadata about the pagination.", - "allOf": [ - { - "$ref": "#/components/schemas/PaginationMeta" - } - ] } }, "required": [ - "results", - "metadata" + "id", + "orgId", + "createdAt", + "updatedAt", + "name", + "simulationIds" ] }, - "TestSuiteRunScorerAI": { + "UpdateSimulationSuiteDTO": { "type": "object", "properties": { - "type": { + "name": { "type": "string", - "description": "This is the type of the scorer, which must be AI.", - "enum": [ - "ai" - ], - "maxLength": 100 + "description": "This is the name of the simulation suite.", + "maxLength": 80 }, - "result": { + "slackWebhookUrl": { "type": "string", - "description": "This is the result of the test suite.", - "enum": [ - "pass", - "fail" - ], - "maxLength": 100 + "description": "This is the Slack webhook URL for notifications." }, - "reasoning": { - "type": "string", - "description": "This is the reasoning provided by the AI scorer.", - "maxLength": 10000 + "simulationIds": { + "description": "This is the list of simulation IDs to include in the suite (replaces existing).", + "type": "array", + "items": { + "type": "string" + } }, - "rubric": { + "path": { "type": "string", - "description": "This is the rubric used by the AI scorer.", - "maxLength": 10000 + "nullable": true, + "description": "Optional folder path for organizing simulation suites.\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}$/" } - }, - "required": [ - "type", - "result", - "reasoning", - "rubric" - ] + } }, - "TestSuiteRunTestAttemptCall": { + "GenerateScenariosDTO": { "type": "object", "properties": { - "artifact": { - "description": "This is the artifact of the call.", - "allOf": [ - { - "$ref": "#/components/schemas/Artifact" - } - ] + "assistantId": { + "type": "string", + "description": "ID of the assistant to generate scenarios for" + }, + "squadId": { + "type": "string", + "description": "ID of the squad to generate scenarios for" } - }, - "required": [ - "artifact" - ] + } }, - "TestSuiteRunTestAttemptMetadata": { + "GeneratedScenario": { "type": "object", "properties": { - "sessionId": { + "name": { "type": "string", - "description": "This is the session ID for the test attempt." + "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": [ - "sessionId" + "name", + "instructions", + "category", + "reasoning" ] }, - "TestSuiteRunTestAttempt": { + "GenerateScenariosResponse": { "type": "object", "properties": { - "scorerResults": { + "scenarios": { + "description": "Generated scenarios", "type": "array", - "description": "These are the results of the scorers used to evaluate the test attempt.", "items": { - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteRunScorerAI", - "title": "AI" - } - ] + "$ref": "#/components/schemas/GeneratedScenario" } }, - "call": { - "description": "This is the call made during the test attempt.", - "allOf": [ - { - "$ref": "#/components/schemas/TestSuiteRunTestAttemptCall" - } - ] - }, - "callId": { + "coverageNotes": { "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" - } - ] + "description": "Summary of test coverage" } }, "required": [ - "scorerResults" + "scenarios", + "coverageNotes" ] }, - "TestSuiteRunTestResult": { + "CreateSimulationDTO": { "type": "object", "properties": { - "test": { - "description": "This is the test that was run.", - "oneOf": [ - { - "$ref": "#/components/schemas/TestSuiteTestVoice", - "title": "TestSuiteTestVoice" - } - ] + "name": { + "type": "string", + "description": "This is an optional friendly name for the simulation.", + "maxLength": 80, + "example": "Eligible Path with Confused User" }, - "attempts": { - "description": "These are the attempts made for this test.", - "type": "array", - "items": { - "$ref": "#/components/schemas/TestSuiteRunTestAttempt" - } + "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\").\nMaps 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": [ - "test", - "attempts" + "scenarioId", + "personalityId" ] }, - "TestSuiteRun": { + "Simulation": { "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." + "description": "This is the unique identifier for the simulation.", + "format": "uuid" }, "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." + "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 test suite run was created." + "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 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" - } + "description": "This is the ISO 8601 date-time string of when the simulation was last updated." }, "name": { "type": "string", - "description": "This is the name of the test suite run.", - "maxLength": 80 + "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.\nSupports up to 3 levels (e.g., \"dept/feature/variant\").\nMaps 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": [ - "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" + "scenarioId", + "personalityId" ] }, - "CreateTestSuiteRunDto": { + "UpdateSimulationDTO": { "type": "object", "properties": { "name": { "type": "string", - "description": "This is the name of the test suite run.", + "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}$/" } } }, - "UpdateTestSuiteRunDto": { + "SimulationConcurrencyResponse": { "type": "object", "properties": { - "name": { + "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", - "description": "This is the name of the test suite run.", - "maxLength": 80 + "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", @@ -43657,6 +45417,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -43771,6 +45532,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -43896,6 +45658,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -44069,6 +45832,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -44138,6 +45902,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -44211,6 +45976,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -44332,6 +46098,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -44405,6 +46172,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -44482,6 +46250,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -44873,6 +46642,9 @@ "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", @@ -44901,7 +46673,8 @@ "assistant.transcriber.cleanup", "assistant.transcriber.clearing", "assistant.transcriber.transcriptIgnored", - "assistant.transcriber.languageSwitched" + "assistant.transcriber.languageSwitched", + "assistant.analysis.structuredOutputGenerated" ] }, "operation": { @@ -45330,6 +47103,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -45403,6 +47177,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -45480,6 +47255,7 @@ "phoneNumberId", "type", "endedReason", + "customerNumber", "campaignId", "artifact.structuredOutputs[OutputID]" ] @@ -56805,6 +58581,7 @@ "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", @@ -58107,6 +59884,7 @@ "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", @@ -59999,12 +61777,8 @@ "type": "object", "properties": { "destination": { - "description": "This is the destination you'd like the call to be transferred to.", - "allOf": [ - { - "$ref": "#/components/schemas/HandoffDestinationAssistant" - } - ] + "type": "object", + "description": "This is the destination you'd like the call to be transferred to." }, "error": { "type": "string",